mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
Auto merge of #7478 - DevinR528:preemtive, r=llogiq
Fix nonstandard_macro_braces FP and docs of disallowed_types changelog: Fix FP in [`nonstandard_macro_braces`] lint
This commit is contained in:
commit
f998e89e43
@ -7,6 +7,7 @@ use clippy_utils::{diagnostics::span_lint_and_help, in_macro, is_direct_expn_of,
|
|||||||
use if_chain::if_chain;
|
use if_chain::if_chain;
|
||||||
use rustc_ast::ast;
|
use rustc_ast::ast;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_lint::{EarlyContext, EarlyLintPass};
|
use rustc_lint::{EarlyContext, EarlyLintPass};
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
@ -91,13 +92,23 @@ impl EarlyLintPass for MacroBraces {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn is_offending_macro<'a>(cx: &EarlyContext<'_>, span: Span, mac_braces: &'a MacroBraces) -> Option<MacroInfo<'a>> {
|
fn is_offending_macro<'a>(cx: &EarlyContext<'_>, span: Span, mac_braces: &'a MacroBraces) -> Option<MacroInfo<'a>> {
|
||||||
|
let unnested_or_local = || {
|
||||||
|
let nested = in_macro(span.ctxt().outer_expn_data().call_site);
|
||||||
|
!nested
|
||||||
|
|| span
|
||||||
|
.macro_backtrace()
|
||||||
|
.last()
|
||||||
|
.map_or(false, |e| e.macro_def_id.map_or(false, DefId::is_local))
|
||||||
|
};
|
||||||
if_chain! {
|
if_chain! {
|
||||||
|
// Make sure we are only one level deep otherwise there are to many FP's
|
||||||
if in_macro(span);
|
if in_macro(span);
|
||||||
if let Some((name, braces)) = find_matching_macro(span, &mac_braces.macro_braces);
|
if let Some((name, braces)) = find_matching_macro(span, &mac_braces.macro_braces);
|
||||||
if let Some(snip) = snippet_opt(cx, span.ctxt().outer_expn_data().call_site);
|
if let Some(snip) = snippet_opt(cx, span.ctxt().outer_expn_data().call_site);
|
||||||
// we must check only invocation sites
|
// we must check only invocation sites
|
||||||
// https://github.com/rust-lang/rust-clippy/issues/7422
|
// https://github.com/rust-lang/rust-clippy/issues/7422
|
||||||
if snip.starts_with(name);
|
if snip.starts_with(&format!("{}!", name));
|
||||||
|
if unnested_or_local();
|
||||||
// make formatting consistent
|
// make formatting consistent
|
||||||
let c = snip.replace(" ", "");
|
let c = snip.replace(" ", "");
|
||||||
if !c.starts_with(&format!("{}!{}", name, braces.0));
|
if !c.starts_with(&format!("{}!{}", name, braces.0));
|
||||||
|
@ -32,13 +32,19 @@ macro_rules! type_pos {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! printlnfoo {
|
||||||
|
($thing:expr) => {
|
||||||
|
println!("{}", $thing)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
fn main() {
|
fn main() {
|
||||||
let _ = vec! {1, 2, 3};
|
let _ = vec! {1, 2, 3};
|
||||||
let _ = format!["ugh {} stop being such a good compiler", "hello"];
|
let _ = format!["ugh {} stop being such a good compiler", "hello"];
|
||||||
let _ = quote!(let x = 1;);
|
let _ = quote!(let x = 1;);
|
||||||
let _ = quote::quote!(match match match);
|
let _ = quote::quote!(match match match);
|
||||||
let _ = test!();
|
let _ = test!(); // trigger when macro def is inside our own crate
|
||||||
let _ = vec![1,2,3];
|
let _ = vec![1,2,3];
|
||||||
|
|
||||||
let _ = quote::quote! {true || false};
|
let _ = quote::quote! {true || false};
|
||||||
@ -49,4 +55,6 @@ fn main() {
|
|||||||
let _: type_pos!(usize) = vec![];
|
let _: type_pos!(usize) = vec![];
|
||||||
|
|
||||||
eprint!("test if user config overrides defaults");
|
eprint!("test if user config overrides defaults");
|
||||||
|
|
||||||
|
printlnfoo!["test if printlnfoo is triggered by println"];
|
||||||
}
|
}
|
||||||
|
@ -1,48 +1,48 @@
|
|||||||
error: use of irregular braces for `vec!` macro
|
error: use of irregular braces for `vec!` macro
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:37:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:43:13
|
||||||
|
|
|
|
||||||
LL | let _ = vec! {1, 2, 3};
|
LL | let _ = vec! {1, 2, 3};
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::nonstandard-macro-braces` implied by `-D warnings`
|
= note: `-D clippy::nonstandard-macro-braces` implied by `-D warnings`
|
||||||
help: consider writing `vec![1, 2, 3]`
|
help: consider writing `vec![1, 2, 3]`
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:37:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:43:13
|
||||||
|
|
|
|
||||||
LL | let _ = vec! {1, 2, 3};
|
LL | let _ = vec! {1, 2, 3};
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: use of irregular braces for `format!` macro
|
error: use of irregular braces for `format!` macro
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:38:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:44:13
|
||||||
|
|
|
|
||||||
LL | let _ = format!["ugh {} stop being such a good compiler", "hello"];
|
LL | let _ = format!["ugh {} stop being such a good compiler", "hello"];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: consider writing `format!("ugh () stop being such a good compiler", "hello")`
|
help: consider writing `format!("ugh () stop being such a good compiler", "hello")`
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:38:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:44:13
|
||||||
|
|
|
|
||||||
LL | let _ = format!["ugh {} stop being such a good compiler", "hello"];
|
LL | let _ = format!["ugh {} stop being such a good compiler", "hello"];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: use of irregular braces for `quote!` macro
|
error: use of irregular braces for `quote!` macro
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:39:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:45:13
|
||||||
|
|
|
|
||||||
LL | let _ = quote!(let x = 1;);
|
LL | let _ = quote!(let x = 1;);
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: consider writing `quote! {let x = 1;}`
|
help: consider writing `quote! {let x = 1;}`
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:39:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:45:13
|
||||||
|
|
|
|
||||||
LL | let _ = quote!(let x = 1;);
|
LL | let _ = quote!(let x = 1;);
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: use of irregular braces for `quote::quote!` macro
|
error: use of irregular braces for `quote::quote!` macro
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:40:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:46:13
|
||||||
|
|
|
|
||||||
LL | let _ = quote::quote!(match match match);
|
LL | let _ = quote::quote!(match match match);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: consider writing `quote::quote! {match match match}`
|
help: consider writing `quote::quote! {match match match}`
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:40:13
|
--> $DIR/conf_nonstandard_macro_braces.rs:46:13
|
||||||
|
|
|
|
||||||
LL | let _ = quote::quote!(match match match);
|
LL | let _ = quote::quote!(match match match);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -53,7 +53,7 @@ error: use of irregular braces for `vec!` macro
|
|||||||
LL | vec!{0, 0, 0}
|
LL | vec!{0, 0, 0}
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | let _ = test!();
|
LL | let _ = test!(); // trigger when macro def is inside our own crate
|
||||||
| ------- in this macro invocation
|
| ------- in this macro invocation
|
||||||
|
|
|
|
||||||
help: consider writing `vec![0, 0, 0]`
|
help: consider writing `vec![0, 0, 0]`
|
||||||
@ -62,30 +62,30 @@ help: consider writing `vec![0, 0, 0]`
|
|||||||
LL | vec!{0, 0, 0}
|
LL | vec!{0, 0, 0}
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | let _ = test!();
|
LL | let _ = test!(); // trigger when macro def is inside our own crate
|
||||||
| ------- in this macro invocation
|
| ------- in this macro invocation
|
||||||
= note: this error originates in the macro `test` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `test` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: use of irregular braces for `type_pos!` macro
|
error: use of irregular braces for `type_pos!` macro
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:49:12
|
--> $DIR/conf_nonstandard_macro_braces.rs:55:12
|
||||||
|
|
|
|
||||||
LL | let _: type_pos!(usize) = vec![];
|
LL | let _: type_pos!(usize) = vec![];
|
||||||
| ^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: consider writing `type_pos![usize]`
|
help: consider writing `type_pos![usize]`
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:49:12
|
--> $DIR/conf_nonstandard_macro_braces.rs:55:12
|
||||||
|
|
|
|
||||||
LL | let _: type_pos!(usize) = vec![];
|
LL | let _: type_pos!(usize) = vec![];
|
||||||
| ^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: use of irregular braces for `eprint!` macro
|
error: use of irregular braces for `eprint!` macro
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:51:5
|
--> $DIR/conf_nonstandard_macro_braces.rs:57:5
|
||||||
|
|
|
|
||||||
LL | eprint!("test if user config overrides defaults");
|
LL | eprint!("test if user config overrides defaults");
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: consider writing `eprint!["test if user config overrides defaults"];`
|
help: consider writing `eprint!["test if user config overrides defaults"];`
|
||||||
--> $DIR/conf_nonstandard_macro_braces.rs:51:5
|
--> $DIR/conf_nonstandard_macro_braces.rs:57:5
|
||||||
|
|
|
|
||||||
LL | eprint!("test if user config overrides defaults");
|
LL | eprint!("test if user config overrides defaults");
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Loading…
Reference in New Issue
Block a user