Skip to content

Commit 64ff255

Browse files
bors[bot]flip1995
andcommitted
Merge #3432
3432: match_ref_pats: don't emit suggestions inside of a macro r=Manishearth a=flip1995 Fixes #2636 Co-authored-by: flip1995 <[email protected]>
2 parents 0abbc38 + 655a2b4 commit 64ff255

File tree

3 files changed

+54
-4
lines changed

3 files changed

+54
-4
lines changed

clippy_lints/src/matches.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ use std::collections::Bound;
1818
use crate::syntax::ast::LitKind;
1919
use crate::syntax::source_map::Span;
2020
use crate::utils::paths;
21-
use crate::utils::{expr_block, is_allowed, is_expn_of, match_qpath, match_type, multispan_sugg,
22-
remove_blocks, snippet, span_lint_and_sugg, span_lint_and_then,
23-
span_note_and_lint, walk_ptrs_ty};
21+
use crate::utils::{expr_block, in_macro, is_allowed, is_expn_of, match_qpath, match_type,
22+
multispan_sugg, remove_blocks, snippet, span_lint_and_sugg, span_lint_and_then,
23+
span_note_and_lint, walk_ptrs_ty};
2424
use crate::utils::sugg::Sugg;
2525
use crate::consts::{constant, Constant};
2626
use crate::rustc_errors::Applicability;
@@ -457,7 +457,9 @@ fn check_match_ref_pats(cx: &LateContext<'_, '_>, ex: &Expr, arms: &[Arm], expr:
457457
}));
458458

459459
span_lint_and_then(cx, MATCH_REF_PATS, expr.span, title, |db| {
460-
multispan_sugg(db, msg.to_owned(), suggs);
460+
if !in_macro(expr.span) {
461+
multispan_sugg(db, msg.to_owned(), suggs);
462+
}
461463
});
462464
}
463465
}

tests/ui/ice-2636.rs

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution.
3+
//
4+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
5+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7+
// option. This file may not be copied, modified, or distributed
8+
// except according to those terms.
9+
10+
#![allow(dead_code)]
11+
12+
enum Foo {
13+
A,
14+
B,
15+
C,
16+
}
17+
18+
macro_rules! test_hash {
19+
($foo:expr, $($t:ident => $ord:expr),+ ) => {
20+
use self::Foo::*;
21+
match $foo {
22+
$ ( & $t => $ord,
23+
)*
24+
};
25+
};
26+
}
27+
28+
fn main() {
29+
let a = Foo::A;
30+
test_hash!(&a, A => 0, B => 1, C => 2);
31+
}
32+

tests/ui/ice-2636.stderr

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
error: you don't need to add `&` to both the expression and the patterns
2+
--> $DIR/ice-2636.rs:21:9
3+
|
4+
21 | / match $foo {
5+
22 | | $ ( & $t => $ord,
6+
23 | | )*
7+
24 | | };
8+
| |_________^
9+
...
10+
30 | test_hash!(&a, A => 0, B => 1, C => 2);
11+
| --------------------------------------- in this macro invocation
12+
|
13+
= note: `-D clippy::match-ref-pats` implied by `-D warnings`
14+
15+
error: aborting due to previous error
16+

0 commit comments

Comments
 (0)