mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-17 02:08:28 +00:00
5a71bbdf3f
Implement https://github.com/rust-lang/rust-clippy/issues/8368 - a new lint to inline format arguments such as `print!("{}", var)` into `print!("{var}")`. code | suggestion | comment ---|---|--- `print!("{}", var)` | `print!("{var}")` | simple variables `print!("{0}", var)` | `print!("{var}")` | positional variables `print!("{v}", v=var)` | `print!("{var}")` | named variables `print!("{0} {0}", var)` | `print!("{var} {var}")` | aliased variables `print!("{0:1$}", var, width)` | `print!("{var:width$}")` | width support `print!("{0:.1$}", var, prec)` | `print!("{var:.prec$}")` | precision support `print!("{:.*}", prec, var)` | `print!("{var:.prec$}")` | asterisk support code | suggestion | comment ---|---|--- `print!("{0}={1}", var, 1+2)` | `print!("{var}={0}", 1+2)` | Format string uses an indexed argument that cannot be inlined. Supporting this case requires re-indexing of the format string. changelog: [`uninlined_format_args`]: A new lint to inline format arguments, i.e. `print!("{}", var)` into `print!("{var}")`
168 lines
4.9 KiB
Rust
168 lines
4.9 KiB
Rust
// run-rustfix
|
|
|
|
#![allow(clippy::eq_op)]
|
|
#![allow(clippy::format_in_format_args)]
|
|
#![allow(clippy::print_literal)]
|
|
#![allow(named_arguments_used_positionally)]
|
|
#![allow(unused_variables, unused_imports, unused_macros)]
|
|
#![warn(clippy::uninlined_format_args)]
|
|
#![feature(custom_inner_attributes)]
|
|
|
|
macro_rules! no_param_str {
|
|
() => {
|
|
"{}"
|
|
};
|
|
}
|
|
|
|
macro_rules! pass_through {
|
|
($expr:expr) => {
|
|
$expr
|
|
};
|
|
}
|
|
|
|
macro_rules! my_println {
|
|
($($args:tt),*) => {{
|
|
println!($($args),*)
|
|
}};
|
|
}
|
|
|
|
macro_rules! my_println_args {
|
|
($($args:tt),*) => {{
|
|
println!("foo: {}", format_args!($($args),*))
|
|
}};
|
|
}
|
|
|
|
fn tester(fn_arg: i32) {
|
|
let local_i32 = 1;
|
|
let local_f64 = 2.0;
|
|
let local_opt: Option<i32> = Some(3);
|
|
let width = 4;
|
|
let prec = 5;
|
|
let val = 6;
|
|
|
|
// make sure this file hasn't been corrupted with tabs converted to spaces
|
|
// let _ = ' '; // <- this is a single tab character
|
|
let _: &[u8; 3] = b" "; // <- <tab><space><tab>
|
|
|
|
println!("val='{local_i32}'");
|
|
println!("val='{local_i32}'"); // 3 spaces
|
|
println!("val='{local_i32}'"); // tab
|
|
println!("val='{local_i32}'"); // space+tab
|
|
println!("val='{local_i32}'"); // tab+space
|
|
println!(
|
|
"val='{local_i32}'"
|
|
);
|
|
println!("{local_i32}");
|
|
println!("{fn_arg}");
|
|
println!("{local_i32:?}");
|
|
println!("{local_i32:#?}");
|
|
println!("{local_i32:4}");
|
|
println!("{local_i32:04}");
|
|
println!("{local_i32:<3}");
|
|
println!("{local_i32:#010x}");
|
|
println!("{local_f64:.1}");
|
|
println!("Hello {} is {local_f64:.local_i32$}", "x");
|
|
println!("Hello {local_i32} is {local_f64:.*}", 5);
|
|
println!("Hello {local_i32} is {local_f64:.*}", 5);
|
|
println!("{local_i32} {local_f64}");
|
|
println!("{local_i32}, {}", local_opt.unwrap());
|
|
println!("{val}");
|
|
println!("{val}");
|
|
println!("{} {1}", local_i32, 42);
|
|
println!("val='{local_i32}'");
|
|
println!("val='{local_i32}'");
|
|
println!("val='{local_i32}'");
|
|
println!("val='{fn_arg}'");
|
|
println!("{local_i32}");
|
|
println!("{local_i32:?}");
|
|
println!("{local_i32:#?}");
|
|
println!("{local_i32:04}");
|
|
println!("{local_i32:<3}");
|
|
println!("{local_i32:#010x}");
|
|
println!("{local_f64:.1}");
|
|
println!("{local_i32} {local_i32}");
|
|
println!("{local_f64} {local_i32} {local_i32} {local_f64}");
|
|
println!("{local_i32} {local_f64}");
|
|
println!("{local_f64} {local_i32}");
|
|
println!("{local_f64} {local_i32} {local_f64} {local_i32}");
|
|
println!("{1} {0}", "str", local_i32);
|
|
println!("{local_i32}");
|
|
println!("{local_i32:width$}");
|
|
println!("{local_i32:width$}");
|
|
println!("{local_i32:.prec$}");
|
|
println!("{local_i32:.prec$}");
|
|
println!("{val:val$}");
|
|
println!("{val:val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{val:val$.val$}");
|
|
println!("{width:width$}");
|
|
println!("{local_i32:width$}");
|
|
println!("{width:width$}");
|
|
println!("{local_i32:width$}");
|
|
println!("{prec:.prec$}");
|
|
println!("{local_i32:.prec$}");
|
|
println!("{prec:.prec$}");
|
|
println!("{local_i32:.prec$}");
|
|
println!("{width:width$.prec$}");
|
|
println!("{width:width$.prec$}");
|
|
println!("{local_f64:width$.prec$}");
|
|
println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
|
|
println!(
|
|
"{local_i32:width$.prec$} {local_i32:prec$.width$} {width:local_i32$.prec$} {width:prec$.local_i32$} {prec:local_i32$.width$} {prec:width$.local_i32$}",
|
|
);
|
|
println!(
|
|
"{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$} {3}",
|
|
local_i32,
|
|
width,
|
|
prec,
|
|
1 + 2
|
|
);
|
|
println!("Width = {local_i32}, value with width = {local_f64:local_i32$}");
|
|
println!("{local_i32:width$.prec$}");
|
|
println!("{width:width$.prec$}");
|
|
println!("{}", format!("{local_i32}"));
|
|
my_println!("{}", local_i32);
|
|
my_println_args!("{}", local_i32);
|
|
|
|
// these should NOT be modified by the lint
|
|
println!(concat!("nope ", "{}"), local_i32);
|
|
println!("val='{local_i32}'");
|
|
println!("val='{local_i32 }'");
|
|
println!("val='{local_i32 }'"); // with tab
|
|
println!("val='{local_i32\n}'");
|
|
println!("{}", usize::MAX);
|
|
println!("{}", local_opt.unwrap());
|
|
println!(
|
|
"val='{local_i32
|
|
}'"
|
|
);
|
|
println!(no_param_str!(), local_i32);
|
|
|
|
// FIXME: bugs!
|
|
// println!(pass_through!("foo={local_i32}"), local_i32 = local_i32);
|
|
// println!(pass_through!("foo={}"), local_i32);
|
|
// println!(indoc!("foo={}"), local_i32);
|
|
// printdoc!("foo={}", local_i32);
|
|
}
|
|
|
|
fn main() {
|
|
tester(42);
|
|
}
|
|
|
|
fn _under_msrv() {
|
|
#![clippy::msrv = "1.57"]
|
|
let local_i32 = 1;
|
|
println!("don't expand='{}'", local_i32);
|
|
}
|
|
|
|
fn _meets_msrv() {
|
|
#![clippy::msrv = "1.58"]
|
|
let local_i32 = 1;
|
|
println!("expand='{local_i32}'");
|
|
}
|