Skip to content

Commit

Permalink
Auto merge of rust-lang#9276 - dswij:9164, r=flip1995
Browse files Browse the repository at this point in the history
Ignore `match_like_matches_macro` when there is comment

Closes rust-lang#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.
  • Loading branch information
bors committed Aug 28, 2022
2 parents 2d4d8e1 + b07d72b commit 8d9da4d
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 1 deletion.
4 changes: 3 additions & 1 deletion clippy_lints/src/matches/match_like_matches.rs
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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();
Expand Down
14 changes: 14 additions & 0 deletions clippy_utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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};
Expand Down Expand Up @@ -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`
Expand Down
25 changes: 25 additions & 0 deletions tests/ui/match_expr_like_matches_macro.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
}
25 changes: 25 additions & 0 deletions tests/ui/match_expr_like_matches_macro.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
}

0 comments on commit 8d9da4d

Please sign in to comment.