new uninlined_format_args lint to inline explicit arguments
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}")`
This commit is contained in:
parent
57c9daa09b
commit
5a71bbdf3f
15 changed files with 1451 additions and 29 deletions
36
src/docs/uninlined_format_args.txt
Normal file
36
src/docs/uninlined_format_args.txt
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
### What it does
|
||||
Detect when a variable is not inlined in a format string,
|
||||
and suggests to inline it.
|
||||
|
||||
### Why is this bad?
|
||||
Non-inlined code is slightly more difficult to read and understand,
|
||||
as it requires arguments to be matched against the format string.
|
||||
The inlined syntax, where allowed, is simpler.
|
||||
|
||||
### Example
|
||||
```
|
||||
format!("{}", var);
|
||||
format!("{v:?}", v = var);
|
||||
format!("{0} {0}", var);
|
||||
format!("{0:1$}", var, width);
|
||||
format!("{:.*}", prec, var);
|
||||
```
|
||||
Use instead:
|
||||
```
|
||||
format!("{var}");
|
||||
format!("{var:?}");
|
||||
format!("{var} {var}");
|
||||
format!("{var:width$}");
|
||||
format!("{var:.prec$}");
|
||||
```
|
||||
|
||||
### Known Problems
|
||||
|
||||
There may be a false positive if the format string is expanded from certain proc macros:
|
||||
|
||||
```
|
||||
println!(indoc!("{}"), var);
|
||||
```
|
||||
|
||||
If a format string contains a numbered argument that cannot be inlined
|
||||
nothing will be suggested, e.g. `println!("{0}={1}", var, 1+2)`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue