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}");
53 println!("{local_i32:?}");
54 println!("{local_i32:#?}");
55 println!("{local_i32:4}");
56 println!("{local_i32:04}");
57 println!("{local_i32:<3}");
58 println!("{local_i32:#010x}");
59 println!("{local_f64:.1}");
60 println!("Hello {} is {local_f64:.local_i32$}", "x");
61 println!("Hello {local_i32} is {local_f64:.*}", 5);
62 println!("Hello {local_i32} is {local_f64:.*}", 5);
63 println!("{local_i32} {local_f64}");
64 println!("{local_i32}, {}", local_opt.unwrap());
67 println!("{} {1}", local_i32, 42);
68 println!("val='{local_i32}'");
69 println!("val='{local_i32}'");
70 println!("val='{local_i32}'");
71 println!("val='{fn_arg}'");
72 println!("{local_i32}");
73 println!("{local_i32:?}");
74 println!("{local_i32:#?}");
75 println!("{local_i32:04}");
76 println!("{local_i32:<3}");
77 println!("{local_i32:#010x}");
78 println!("{local_f64:.1}");
79 println!("{local_i32} {local_i32}");
80 println!("{local_f64} {local_i32} {local_i32} {local_f64}");
81 println!("{local_i32} {local_f64}");
82 println!("{local_f64} {local_i32}");
83 println!("{local_f64} {local_i32} {local_f64} {local_i32}");
84 println!("{1} {0}", "str", local_i32);
85 println!("{local_i32}");
86 println!("{local_i32:width$}");
87 println!("{local_i32:width$}");
88 println!("{local_i32:.prec$}");
89 println!("{local_i32:.prec$}");
90 println!("{val:val$}");
91 println!("{val:val$}");
92 println!("{val:val$.val$}");
93 println!("{val:val$.val$}");
94 println!("{val:val$.val$}");
95 println!("{val:val$.val$}");
96 println!("{val:val$.val$}");
97 println!("{val:val$.val$}");
98 println!("{val:val$.val$}");
99 println!("{val:val$.val$}");
100 println!("{width:width$}");
101 println!("{local_i32:width$}");
102 println!("{width:width$}");
103 println!("{local_i32:width$}");
104 println!("{prec:.prec$}");
105 println!("{local_i32:.prec$}");
106 println!("{prec:.prec$}");
107 println!("{local_i32:.prec$}");
108 println!("{width:width$.prec$}");
109 println!("{width:width$.prec$}");
110 println!("{local_f64:width$.prec$}");
111 println!("{local_f64:width$.prec$} {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 = {local_i32}, value with width = {local_f64:local_i32$}");
124 println!("{local_i32:width$.prec$}");
125 println!("{width:width$.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
151 println!(with_span!("{0} {1}" "{1} {0}"), local_i32, local_f64);
152 println!("{}", with_span!(span val));
160 #![clippy::msrv = "1.57"]
162 println!("don't expand='{}'", local_i32);
166 #![clippy::msrv = "1.58"]
168 println!("expand='{local_i32}'");