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
49 println!("{local_i32}");
51 println!("{local_i32:?}");
52 println!("{local_i32:#?}");
53 println!("{local_i32:4}");
54 println!("{local_i32:04}");
55 println!("{local_i32:<3}");
56 println!("{local_i32:#010x}");
57 println!("{local_f64:.1}");
58 println!("Hello {} is {local_f64:.local_i32$}", "x");
59 println!("Hello {local_i32} is {local_f64:.*}", 5);
60 println!("Hello {local_i32} is {local_f64:.*}", 5);
61 println!("{local_i32} {local_f64}");
62 println!("{local_i32}, {}", local_opt.unwrap());
65 println!("{} {1}", local_i32, 42);
66 println!("val='{local_i32}'");
67 println!("val='{local_i32}'");
68 println!("val='{local_i32}'");
69 println!("val='{fn_arg}'");
70 println!("{local_i32}");
71 println!("{local_i32:?}");
72 println!("{local_i32:#?}");
73 println!("{local_i32:04}");
74 println!("{local_i32:<3}");
75 println!("{local_i32:#010x}");
76 println!("{local_f64:.1}");
77 println!("{local_i32} {local_i32}");
78 println!("{local_f64} {local_i32} {local_i32} {local_f64}");
79 println!("{local_i32} {local_f64}");
80 println!("{local_f64} {local_i32}");
81 println!("{local_f64} {local_i32} {local_f64} {local_i32}");
82 println!("{1} {0}", "str", local_i32);
83 println!("{local_i32}");
84 println!("{local_i32:width$}");
85 println!("{local_i32:width$}");
86 println!("{local_i32:.prec$}");
87 println!("{local_i32:.prec$}");
88 println!("{val:val$}");
89 println!("{val:val$}");
90 println!("{val:val$.val$}");
91 println!("{val: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!("{width:width$}");
99 println!("{local_i32:width$}");
100 println!("{width:width$}");
101 println!("{local_i32:width$}");
102 println!("{prec:.prec$}");
103 println!("{local_i32:.prec$}");
104 println!("{prec:.prec$}");
105 println!("{local_i32:.prec$}");
106 println!("{width:width$.prec$}");
107 println!("{width:width$.prec$}");
108 println!("{local_f64:width$.prec$}");
109 println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
111 "{local_i32:width$.prec$} {local_i32:prec$.width$} {width:local_i32$.prec$} {width:prec$.local_i32$} {prec:local_i32$.width$} {prec:width$.local_i32$}",
114 "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$} {3}",
120 println!("Width = {local_i32}, value with width = {local_f64:local_i32$}");
121 println!("{local_i32:width$.prec$}");
122 println!("{width:width$.prec$}");
123 println!("{}", format!("{local_i32}"));
124 my_println!("{}", local_i32);
125 my_println_args!("{}", local_i32);
127 // these should NOT be modified by the lint
128 println!(concat!("nope ", "{}"), local_i32);
129 println!("val='{local_i32}'");
130 println!("val='{local_i32 }'");
131 println!("val='{local_i32 }'"); // with tab
132 println!("val='{local_i32\n}'");
133 println!("{}", usize::MAX);
134 println!("{}", local_opt.unwrap());
139 println!(no_param_str!(), local_i32);
146 println!(with_span!("{0} {1}" "{1} {0}"), local_i32, local_f64);
147 println!("{}", with_span!(span val));
150 panic!("p1 {local_i32}");
153 panic!("p2 {local_i32}");
156 panic!("p3 {local_i32}");
159 panic!("p4 {local_i32}");
168 #![clippy::msrv = "1.57"]
170 println!("don't expand='{}'", local_i32);
174 #![clippy::msrv = "1.58"]
176 println!("expand='{local_i32}'");