1 // aux-build:proc_macro_with_span.rs
3 #![feature(custom_inner_attributes)]
4 #![warn(clippy::uninlined_format_args)]
5 #![allow(named_arguments_used_positionally, unused_imports, unused_macros, unused_variables)]
6 #![allow(clippy::eq_op, clippy::format_in_format_args, clippy::print_literal)]
8 extern crate proc_macro_with_span;
9 use proc_macro_with_span::with_span;
11 macro_rules! no_param_str {
17 macro_rules! my_println {
23 macro_rules! my_println_args {
25 println!("foo: {}", format_args!($($args),*))
29 fn tester(fn_arg: i32) {
32 let local_opt: Option<i32> = Some(3);
37 // make sure this file hasn't been corrupted with tabs converted to spaces
38 // let _ = ' '; // <- this is a single tab character
39 let _: &[u8; 3] = b" "; // <- <tab><space><tab>
41 println!("val='{}'", local_i32);
42 println!("val='{ }'", local_i32); // 3 spaces
43 println!("val='{ }'", local_i32); // tab
44 println!("val='{ }'", local_i32); // space+tab
45 println!("val='{ }'", local_i32); // tab+space
51 println!("{}", local_i32);
52 println!("{}", fn_arg);
53 println!("{:?}", local_i32);
54 println!("{:#?}", local_i32);
55 println!("{:4}", local_i32);
56 println!("{:04}", local_i32);
57 println!("{:<3}", local_i32);
58 println!("{:#010x}", local_i32);
59 println!("{:.1}", local_f64);
60 println!("Hello {} is {:.*}", "x", local_i32, local_f64);
61 println!("Hello {} is {:.*}", local_i32, 5, local_f64);
62 println!("Hello {} is {2:.*}", local_i32, 5, local_f64);
63 println!("{} {}", local_i32, local_f64);
64 println!("{}, {}", local_i32, local_opt.unwrap());
66 println!("{}", v = val);
67 println!("{} {1}", local_i32, 42);
68 println!("val='{\t }'", local_i32);
69 println!("val='{\n }'", local_i32);
70 println!("val='{local_i32}'", local_i32 = local_i32);
71 println!("val='{local_i32}'", local_i32 = fn_arg);
72 println!("{0}", local_i32);
73 println!("{0:?}", local_i32);
74 println!("{0:#?}", local_i32);
75 println!("{0:04}", local_i32);
76 println!("{0:<3}", local_i32);
77 println!("{0:#010x}", local_i32);
78 println!("{0:.1}", local_f64);
79 println!("{0} {0}", local_i32);
80 println!("{1} {} {0} {}", local_i32, local_f64);
81 println!("{0} {1}", local_i32, local_f64);
82 println!("{1} {0}", local_i32, local_f64);
83 println!("{1} {0} {1} {0}", local_i32, local_f64);
84 println!("{1} {0}", "str", local_i32);
85 println!("{v}", v = local_i32);
86 println!("{local_i32:0$}", width);
87 println!("{local_i32:w$}", w = width);
88 println!("{local_i32:.0$}", prec);
89 println!("{local_i32:.p$}", p = prec);
90 println!("{:0$}", v = val);
91 println!("{0:0$}", v = val);
92 println!("{:0$.0$}", v = val);
93 println!("{0:0$.0$}", v = val);
94 println!("{0:0$.v$}", v = val);
95 println!("{0:v$.0$}", v = val);
96 println!("{v:0$.0$}", v = val);
97 println!("{v:v$.0$}", v = val);
98 println!("{v:0$.v$}", v = val);
99 println!("{v:v$.v$}", v = val);
100 println!("{:0$}", width);
101 println!("{:1$}", local_i32, width);
102 println!("{:w$}", w = width);
103 println!("{:w$}", local_i32, w = width);
104 println!("{:.0$}", prec);
105 println!("{:.1$}", local_i32, prec);
106 println!("{:.p$}", p = prec);
107 println!("{:.p$}", local_i32, p = prec);
108 println!("{:0$.1$}", width, prec);
109 println!("{:0$.w$}", width, w = prec);
110 println!("{:1$.2$}", local_f64, width, prec);
111 println!("{:1$.2$} {0} {1} {2}", local_f64, width, prec);
113 "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}",
114 local_i32, width, prec,
117 "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$} {3}",
123 println!("Width = {}, value with width = {:0$}", local_i32, local_f64);
124 println!("{:w$.p$}", local_i32, w = width, p = prec);
125 println!("{:w$.p$}", w = width, p = prec);
126 println!("{}", format!("{}", local_i32));
127 my_println!("{}", local_i32);
128 my_println_args!("{}", local_i32);
130 // these should NOT be modified by the lint
131 println!(concat!("nope ", "{}"), local_i32);
132 println!("val='{local_i32}'");
133 println!("val='{local_i32 }'");
134 println!("val='{local_i32 }'"); // with tab
135 println!("val='{local_i32\n}'");
136 println!("{}", usize::MAX);
137 println!("{}", local_opt.unwrap());
142 println!(no_param_str!(), local_i32);
146 // comment with a comma , in it
149 println!("{}", /* comment with a comma , in it */ val);
151 println!(with_span!("{0} {1}" "{1} {0}"), local_i32, local_f64);
152 println!("{}", with_span!(span val));
155 panic!("p1 {}", local_i32);
158 panic!("p2 {0}", local_i32);
161 panic!("p3 {local_i32}", local_i32 = local_i32);
164 panic!("p4 {local_i32}");
173 #![clippy::msrv = "1.57"]
175 println!("don't expand='{}'", local_i32);
179 #![clippy::msrv = "1.58"]
181 println!("expand='{}'", local_i32);