mirror of
https://github.com/rust-lang/rust-clippy
synced 2025-02-17 06:28:42 +00:00
Auto merge of #10055 - taiki-e:uninlined_format_args, r=llogiq
uninlined_format_args: Ignore assert! and debug_assert! before 2021 edition Similar to https://github.com/rust-lang/rust-clippy/pull/9605, but for `assert!` and `debug_assert!` macros. ([non_fmt_panics lint triggers them](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=18b20c408ec62a67f1503cd5d284424b)) changelog: [`uninlined_format_args`]: Do not inline `assert!` and `debug_assert!` macros before 2021 edition r? `@llogiq`
This commit is contained in:
commit
c0130e45df
6 changed files with 45 additions and 4 deletions
|
@ -2,7 +2,8 @@ use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_and_then};
|
|||
use clippy_utils::is_diag_trait_item;
|
||||
use clippy_utils::macros::FormatParamKind::{Implicit, Named, NamedInline, Numbered, Starred};
|
||||
use clippy_utils::macros::{
|
||||
is_format_macro, is_panic, root_macro_call, Count, FormatArg, FormatArgsExpn, FormatParam, FormatParamUsage,
|
||||
is_assert_macro, is_format_macro, is_panic, root_macro_call, Count, FormatArg, FormatArgsExpn, FormatParam,
|
||||
FormatParamUsage,
|
||||
};
|
||||
use clippy_utils::msrvs::{self, Msrv};
|
||||
use clippy_utils::source::snippet_opt;
|
||||
|
@ -290,8 +291,9 @@ fn check_uninlined_args(
|
|||
if args.format_string.span.from_expansion() {
|
||||
return;
|
||||
}
|
||||
if call_site.edition() < Edition2021 && is_panic(cx, def_id) {
|
||||
// panic! before 2021 edition considers a single string argument as non-format
|
||||
if call_site.edition() < Edition2021 && (is_panic(cx, def_id) || is_assert_macro(cx, def_id)) {
|
||||
// panic!, assert!, and debug_assert! before 2021 edition considers a single string argument as
|
||||
// non-format
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -208,6 +208,12 @@ pub fn is_panic(cx: &LateContext<'_>, def_id: DefId) -> bool {
|
|||
)
|
||||
}
|
||||
|
||||
/// Is `def_id` of `assert!` or `debug_assert!`
|
||||
pub fn is_assert_macro(cx: &LateContext<'_>, def_id: DefId) -> bool {
|
||||
let Some(name) = cx.tcx.get_diagnostic_name(def_id) else { return false };
|
||||
matches!(name, sym::assert_macro | sym::debug_assert_macro)
|
||||
}
|
||||
|
||||
pub enum PanicExpn<'a> {
|
||||
/// No arguments - `panic!()`
|
||||
Empty,
|
||||
|
|
|
@ -26,4 +26,7 @@ fn main() {
|
|||
panic!("p4 {var}");
|
||||
}
|
||||
}
|
||||
|
||||
assert!(var == 1, "p5 {}", var);
|
||||
debug_assert!(var == 1, "p6 {}", var);
|
||||
}
|
||||
|
|
|
@ -26,4 +26,7 @@ fn main() {
|
|||
panic!("p4 {var}");
|
||||
}
|
||||
}
|
||||
|
||||
assert!(var == 1, "p5 {var}");
|
||||
debug_assert!(var == 1, "p6 {var}");
|
||||
}
|
||||
|
|
|
@ -47,5 +47,29 @@ LL - panic!("p3 {var}", var = var);
|
|||
LL + panic!("p3 {var}");
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: variables can be used directly in the `format!` string
|
||||
--> $DIR/uninlined_format_args_panic.rs:30:5
|
||||
|
|
||||
LL | assert!(var == 1, "p5 {}", var);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: change this to
|
||||
|
|
||||
LL - assert!(var == 1, "p5 {}", var);
|
||||
LL + assert!(var == 1, "p5 {var}");
|
||||
|
|
||||
|
||||
error: variables can be used directly in the `format!` string
|
||||
--> $DIR/uninlined_format_args_panic.rs:31:5
|
||||
|
|
||||
LL | debug_assert!(var == 1, "p6 {}", var);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: change this to
|
||||
|
|
||||
LL - debug_assert!(var == 1, "p6 {}", var);
|
||||
LL + debug_assert!(var == 1, "p6 {var}");
|
||||
|
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
|
|
@ -26,4 +26,7 @@ fn main() {
|
|||
panic!("p4 {var}");
|
||||
}
|
||||
}
|
||||
|
||||
assert!(var == 1, "p5 {}", var);
|
||||
debug_assert!(var == 1, "p6 {}", var);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue