Fix single_match lint being emitted when it should not
This commit is contained in:
parent
650e0c8d3d
commit
efe3fe9b8c
5 changed files with 85 additions and 22 deletions
|
|
@ -27,7 +27,9 @@ mod wild_in_or_pats;
|
|||
use clippy_config::Conf;
|
||||
use clippy_utils::msrvs::{self, Msrv};
|
||||
use clippy_utils::source::walk_span_to_context;
|
||||
use clippy_utils::{higher, is_direct_expn_of, is_in_const_context, is_span_match, span_contains_cfg};
|
||||
use clippy_utils::{
|
||||
higher, is_direct_expn_of, is_in_const_context, is_span_match, span_contains_cfg, span_extract_comments,
|
||||
};
|
||||
use rustc_hir::{Arm, Expr, ExprKind, LetStmt, MatchSource, Pat, PatKind};
|
||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
|
|
@ -1059,7 +1061,28 @@ impl<'tcx> LateLintPass<'tcx> for Matches {
|
|||
}
|
||||
|
||||
redundant_pattern_match::check_match(cx, expr, ex, arms);
|
||||
single_match::check(cx, ex, arms, expr);
|
||||
let source_map = cx.tcx.sess.source_map();
|
||||
let mut match_comments = span_extract_comments(source_map, expr.span);
|
||||
// We remove comments from inside arms block.
|
||||
if !match_comments.is_empty() {
|
||||
for arm in arms {
|
||||
for comment in span_extract_comments(source_map, arm.body.span) {
|
||||
if let Some(index) = match_comments
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find(|(_, cm)| **cm == comment)
|
||||
.map(|(index, _)| index)
|
||||
{
|
||||
match_comments.remove(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// If there are still comments, it means they are outside of the arms, therefore
|
||||
// we should not lint.
|
||||
if match_comments.is_empty() {
|
||||
single_match::check(cx, ex, arms, expr);
|
||||
}
|
||||
match_bool::check(cx, ex, arms, expr);
|
||||
overlapping_arms::check(cx, ex, arms);
|
||||
match_wild_enum::check(cx, ex, arms);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue