mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-10 15:14:29 +00:00
Auto merge of #9276 - dswij:9164, r=flip1995
Ignore `match_like_matches_macro` when there is comment Closes #9164 changelog: [`match_like_matches_macro`] is ignored when there is some comment inside the match block. Also add `span_contains_comment` util to check if given span contains comments.
This commit is contained in:
commit
8d9da4d7c7
4 changed files with 67 additions and 1 deletions
|
@ -1,10 +1,11 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::is_wild;
|
||||
use clippy_utils::source::snippet_with_applicability;
|
||||
use clippy_utils::span_contains_comment;
|
||||
use rustc_ast::{Attribute, LitKind};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Arm, BorrowKind, Expr, ExprKind, Guard, Pat};
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_lint::{LateContext, LintContext};
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::source_map::Spanned;
|
||||
|
||||
|
@ -76,6 +77,7 @@ where
|
|||
>,
|
||||
{
|
||||
if_chain! {
|
||||
if !span_contains_comment(cx.sess().source_map(), expr.span);
|
||||
if iter.len() >= 2;
|
||||
if cx.typeck_results().expr_ty(expr).is_bool();
|
||||
if let Some((_, last_pat_opt, last_expr, _)) = iter.next_back();
|
||||
|
|
|
@ -87,6 +87,7 @@ use rustc_hir::{
|
|||
Mutability, Node, Param, Pat, PatKind, Path, PathSegment, PrimTy, QPath, Stmt, StmtKind, TraitItem, TraitItemKind,
|
||||
TraitRef, TyKind, UnOp,
|
||||
};
|
||||
use rustc_lexer::{tokenize, TokenKind};
|
||||
use rustc_lint::{LateContext, Level, Lint, LintContext};
|
||||
use rustc_middle::hir::place::PlaceBase;
|
||||
use rustc_middle::ty as rustc_ty;
|
||||
|
@ -104,6 +105,7 @@ use rustc_semver::RustcVersion;
|
|||
use rustc_session::Session;
|
||||
use rustc_span::hygiene::{ExpnKind, MacroKind};
|
||||
use rustc_span::source_map::original_sp;
|
||||
use rustc_span::source_map::SourceMap;
|
||||
use rustc_span::sym;
|
||||
use rustc_span::symbol::{kw, Symbol};
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
|
@ -2278,6 +2280,18 @@ pub fn walk_to_expr_usage<'tcx, T>(
|
|||
None
|
||||
}
|
||||
|
||||
/// Checks whether a given span has any comment token
|
||||
/// This checks for all types of comment: line "//", block "/**", doc "///" "//!"
|
||||
pub fn span_contains_comment(sm: &SourceMap, span: Span) -> bool {
|
||||
let Ok(snippet) = sm.span_to_snippet(span) else { return false };
|
||||
return tokenize(&snippet).any(|token| {
|
||||
matches!(
|
||||
token.kind,
|
||||
TokenKind::BlockComment { .. } | TokenKind::LineComment { .. }
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
macro_rules! op_utils {
|
||||
($($name:ident $assign:ident)*) => {
|
||||
/// Binary operation traits like `LangItem::Add`
|
||||
|
|
|
@ -167,4 +167,29 @@ fn main() {
|
|||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
let x = ' ';
|
||||
// ignore if match block contains comment
|
||||
let _line_comments = match x {
|
||||
// numbers are bad!
|
||||
'1' | '2' | '3' => true,
|
||||
// spaces are very important to be true.
|
||||
' ' => true,
|
||||
// as are dots
|
||||
'.' => true,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
let _block_comments = match x {
|
||||
/* numbers are bad!
|
||||
*/
|
||||
'1' | '2' | '3' => true,
|
||||
/* spaces are very important to be true.
|
||||
*/
|
||||
' ' => true,
|
||||
/* as are dots
|
||||
*/
|
||||
'.' => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -208,4 +208,29 @@ fn main() {
|
|||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
let x = ' ';
|
||||
// ignore if match block contains comment
|
||||
let _line_comments = match x {
|
||||
// numbers are bad!
|
||||
'1' | '2' | '3' => true,
|
||||
// spaces are very important to be true.
|
||||
' ' => true,
|
||||
// as are dots
|
||||
'.' => true,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
let _block_comments = match x {
|
||||
/* numbers are bad!
|
||||
*/
|
||||
'1' | '2' | '3' => true,
|
||||
/* spaces are very important to be true.
|
||||
*/
|
||||
' ' => true,
|
||||
/* as are dots
|
||||
*/
|
||||
'.' => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue