]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/uninlined_format_args.rs
Rollup merge of #104967 - willcrichton:fix-scrape-examples, r=notriddle
[rust.git] / src / tools / clippy / tests / ui / uninlined_format_args.rs
1 // aux-build:proc_macro_with_span.rs
2 // run-rustfix
3 #![warn(clippy::uninlined_format_args)]
4 #![allow(named_arguments_used_positionally, unused_imports, unused_macros, unused_variables)]
5 #![allow(clippy::eq_op, clippy::format_in_format_args, clippy::print_literal)]
6
7 extern crate proc_macro_with_span;
8 use proc_macro_with_span::with_span;
9
10 macro_rules! no_param_str {
11     () => {
12         "{}"
13     };
14 }
15
16 macro_rules! my_println {
17    ($($args:tt),*) => {{
18         println!($($args),*)
19     }};
20 }
21
22 macro_rules! my_println_args {
23     ($($args:tt),*) => {{
24         println!("foo: {}", format_args!($($args),*))
25     }};
26 }
27
28 fn tester(fn_arg: i32) {
29     let local_i32 = 1;
30     let local_f64 = 2.0;
31     let local_opt: Option<i32> = Some(3);
32     let width = 4;
33     let prec = 5;
34     let val = 6;
35
36     // make sure this file hasn't been corrupted with tabs converted to spaces
37     // let _ = '        ';  // <- this is a single tab character
38     let _: &[u8; 3] = b"                "; // <- <tab><space><tab>
39
40     println!("val='{}'", local_i32);
41     println!("val='{   }'", local_i32); // 3 spaces
42     println!("val='{    }'", local_i32); // tab
43     println!("val='{    }'", local_i32); // space+tab
44     println!("val='{     }'", local_i32); // tab+space
45     println!(
46         "val='{
47     }'",
48         local_i32
49     );
50     println!("{}", local_i32);
51     println!("{}", fn_arg);
52     println!("{:?}", local_i32);
53     println!("{:#?}", local_i32);
54     println!("{:4}", local_i32);
55     println!("{:04}", local_i32);
56     println!("{:<3}", local_i32);
57     println!("{:#010x}", local_i32);
58     println!("{:.1}", local_f64);
59     println!("Hello {} is {:.*}", "x", local_i32, local_f64);
60     println!("Hello {} is {:.*}", local_i32, 5, local_f64);
61     println!("Hello {} is {2:.*}", local_i32, 5, local_f64);
62     println!("{} {}", local_i32, local_f64);
63     println!("{}, {}", local_i32, local_opt.unwrap());
64     println!("{}", val);
65     println!("{}", v = val);
66     println!("{} {1}", local_i32, 42);
67     println!("val='{\t }'", local_i32);
68     println!("val='{\n }'", local_i32);
69     println!("val='{local_i32}'", local_i32 = local_i32);
70     println!("val='{local_i32}'", local_i32 = fn_arg);
71     println!("{0}", local_i32);
72     println!("{0:?}", local_i32);
73     println!("{0:#?}", local_i32);
74     println!("{0:04}", local_i32);
75     println!("{0:<3}", local_i32);
76     println!("{0:#010x}", local_i32);
77     println!("{0:.1}", local_f64);
78     println!("{0} {0}", local_i32);
79     println!("{1} {} {0} {}", local_i32, local_f64);
80     println!("{0} {1}", local_i32, local_f64);
81     println!("{1} {0}", local_i32, local_f64);
82     println!("{1} {0} {1} {0}", local_i32, local_f64);
83     println!("{1} {0}", "str", local_i32);
84     println!("{v}", v = local_i32);
85     println!("{local_i32:0$}", width);
86     println!("{local_i32:w$}", w = width);
87     println!("{local_i32:.0$}", prec);
88     println!("{local_i32:.p$}", p = prec);
89     println!("{:0$}", v = val);
90     println!("{0:0$}", v = val);
91     println!("{:0$.0$}", v = val);
92     println!("{0:0$.0$}", v = val);
93     println!("{0:0$.v$}", v = val);
94     println!("{0:v$.0$}", v = val);
95     println!("{v:0$.0$}", v = val);
96     println!("{v:v$.0$}", v = val);
97     println!("{v:0$.v$}", v = val);
98     println!("{v:v$.v$}", v = val);
99     println!("{:0$}", width);
100     println!("{:1$}", local_i32, width);
101     println!("{:w$}", w = width);
102     println!("{:w$}", local_i32, w = width);
103     println!("{:.0$}", prec);
104     println!("{:.1$}", local_i32, prec);
105     println!("{:.p$}", p = prec);
106     println!("{:.p$}", local_i32, p = prec);
107     println!("{:0$.1$}", width, prec);
108     println!("{:0$.w$}", width, w = prec);
109     println!("{:1$.2$}", local_f64, width, prec);
110     println!("{:1$.2$} {0} {1} {2}", local_f64, width, prec);
111     println!(
112         "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}",
113         local_i32, width, prec,
114     );
115     println!(
116         "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$} {3}",
117         local_i32,
118         width,
119         prec,
120         1 + 2
121     );
122     println!("Width = {}, value with width = {:0$}", local_i32, local_f64);
123     println!("{:w$.p$}", local_i32, w = width, p = prec);
124     println!("{:w$.p$}", w = width, p = prec);
125     println!("{}", format!("{}", local_i32));
126     my_println!("{}", local_i32);
127     my_println_args!("{}", local_i32);
128
129     // these should NOT be modified by the lint
130     println!(concat!("nope ", "{}"), local_i32);
131     println!("val='{local_i32}'");
132     println!("val='{local_i32 }'");
133     println!("val='{local_i32   }'"); // with tab
134     println!("val='{local_i32\n}'");
135     println!("{}", usize::MAX);
136     println!("{}", local_opt.unwrap());
137     println!(
138         "val='{local_i32
139     }'"
140     );
141     println!(no_param_str!(), local_i32);
142
143     println!(
144         "{}",
145         // comment with a comma , in it
146         val,
147     );
148     println!("{}", /* comment with a comma , in it */ val);
149
150     println!(with_span!("{0} {1}" "{1} {0}"), local_i32, local_f64);
151     println!("{}", with_span!(span val));
152
153     if local_i32 > 0 {
154         panic!("p1 {}", local_i32);
155     }
156     if local_i32 > 0 {
157         panic!("p2 {0}", local_i32);
158     }
159     if local_i32 > 0 {
160         panic!("p3 {local_i32}", local_i32 = local_i32);
161     }
162     if local_i32 > 0 {
163         panic!("p4 {local_i32}");
164     }
165 }
166
167 fn main() {
168     tester(42);
169 }
170
171 #[clippy::msrv = "1.57"]
172 fn _under_msrv() {
173     let local_i32 = 1;
174     println!("don't expand='{}'", local_i32);
175 }
176
177 #[clippy::msrv = "1.58"]
178 fn _meets_msrv() {
179     let local_i32 = 1;
180     println!("expand='{}'", local_i32);
181 }