summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/uninlined_format_args.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:20:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:20:39 +0000
commit1376c5a617be5c25655d0d7cb63e3beaa5a6e026 (patch)
tree3bb8d61aee02bc7a15eab3f36e3b921afc2075d0 /src/tools/clippy/tests/ui/uninlined_format_args.rs
parentReleasing progress-linux version 1.69.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.tar.xz
rustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.zip
Merging upstream version 1.70.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/tools/clippy/tests/ui/uninlined_format_args.rs')
-rw-r--r--src/tools/clippy/tests/ui/uninlined_format_args.rs92
1 files changed, 88 insertions, 4 deletions
diff --git a/src/tools/clippy/tests/ui/uninlined_format_args.rs b/src/tools/clippy/tests/ui/uninlined_format_args.rs
index cf0ea5be4..b153ef256 100644
--- a/src/tools/clippy/tests/ui/uninlined_format_args.rs
+++ b/src/tools/clippy/tests/ui/uninlined_format_args.rs
@@ -1,11 +1,11 @@
-// aux-build:proc_macro_with_span.rs
+// aux-build:proc_macros.rs
// run-rustfix
#![warn(clippy::uninlined_format_args)]
-#![allow(named_arguments_used_positionally, unused_imports, unused_macros, unused_variables)]
+#![allow(named_arguments_used_positionally, unused)]
#![allow(clippy::eq_op, clippy::format_in_format_args, clippy::print_literal)]
-extern crate proc_macro_with_span;
-use proc_macro_with_span::with_span;
+extern crate proc_macros;
+use proc_macros::with_span;
macro_rules! no_param_str {
() => {
@@ -183,3 +183,87 @@ fn _meets_msrv() {
fn _do_not_fire() {
println!("{:?}", None::<()>);
}
+
+macro_rules! _internal {
+ ($($args:tt)*) => {
+ println!("{}", format_args!($($args)*))
+ };
+}
+
+macro_rules! my_println2 {
+ ($target:expr, $($args:tt)+) => {{
+ if $target {
+ _internal!($($args)+)
+ }
+ }};
+}
+
+macro_rules! my_println2_args {
+ ($target:expr, $($args:tt)+) => {{
+ if $target {
+ _internal!("foo: {}", format_args!($($args)+))
+ }
+ }};
+}
+
+macro_rules! my_concat {
+ ($fmt:literal $(, $e:expr)*) => {
+ println!(concat!("ERROR: ", $fmt), $($e,)*)
+ }
+}
+
+macro_rules! my_good_macro {
+ ($fmt:literal $(, $e:expr)* $(,)?) => {
+ println!($fmt $(, $e)*)
+ }
+}
+
+macro_rules! my_bad_macro {
+ ($fmt:literal, $($e:expr),*) => {
+ println!($fmt, $($e,)*)
+ }
+}
+
+macro_rules! my_bad_macro2 {
+ ($fmt:literal) => {
+ let s = $fmt.clone();
+ println!("{}", s);
+ };
+ ($fmt:literal, $($e:expr)+) => {
+ println!($fmt, $($e,)*)
+ };
+}
+
+// This abomination was suggested by @Alexendoo, may the Rust gods have mercy on their soul...
+// https://github.com/rust-lang/rust-clippy/pull/9948#issuecomment-1327965962
+macro_rules! used_twice {
+ (
+ large = $large:literal,
+ small = $small:literal,
+ $val:expr,
+ ) => {
+ if $val < 5 {
+ println!($small, $val);
+ } else {
+ println!($large, $val);
+ }
+ };
+}
+
+fn tester2() {
+ let local_i32 = 1;
+ my_println2_args!(true, "{}", local_i32);
+ my_println2!(true, "{}", local_i32);
+ my_concat!("{}", local_i32);
+ my_good_macro!("{}", local_i32);
+ my_good_macro!("{}", local_i32,);
+
+ // FIXME: Broken false positives, currently unhandled
+ my_bad_macro!("{}", local_i32);
+ my_bad_macro2!("{}", local_i32);
+ used_twice! {
+ large = "large value: {}",
+ small = "small value: {}",
+ local_i32,
+ };
+}