But do not display the code suggestion which can be sometimes completely broken (fortunately when applied it's valid)
use clippy_utils::ty::{implements_trait, is_type_diagnostic_item};
use if_chain::if_chain;
use itertools::Itertools;
-use rustc_errors::Applicability;
+use rustc_errors::{
+ Applicability,
+ SuggestionStyle::{CompletelyHidden, ShowCode},
+};
use rustc_hir::{Expr, ExprKind, HirId, QPath};
use rustc_lint::{LateContext, LateLintPass, LintContext};
use rustc_middle::ty::adjustment::{Adjust, Adjustment};
return;
}
- // Temporarily ignore multiline spans: https://github.com/rust-lang/rust/pull/102729#discussion_r988704308
- if fixes.iter().any(|(span, _)| cx.sess().source_map().is_multiline(*span)) {
- return;
- }
+ // multiline span display suggestion is sometimes broken: https://github.com/rust-lang/rust/pull/102729#discussion_r988704308
+ // in those cases, make the code suggestion hidden
+ let multiline_fix = fixes.iter().any(|(span, _)| cx.sess().source_map().is_multiline(*span));
span_lint_and_then(
cx,
call_site,
"variables can be used directly in the `format!` string",
|diag| {
- diag.multipart_suggestion("change this to", fixes, Applicability::MachineApplicable);
+ diag.multipart_suggestion_with_style(
+ "change this to",
+ fixes,
+ Applicability::MachineApplicable,
+ if multiline_fix { CompletelyHidden } else { ShowCode },
+ );
},
);
}
println!("val='{local_i32}'"); // space+tab
println!("val='{local_i32}'"); // tab+space
println!(
- "val='{
- }'",
- local_i32
+ "val='{local_i32}'"
);
println!("{local_i32}");
println!("{fn_arg}");
println!("{local_f64:width$.prec$}");
println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
println!(
- "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}",
- local_i32, width, prec,
+ "{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}",
println!(no_param_str!(), local_i32);
println!(
- "{}",
- // comment with a comma , in it
- val,
+ "{val}",
);
println!("{val}");
LL + println!("val='{local_i32}'"); // tab+space
|
+error: variables can be used directly in the `format!` string
+ --> $DIR/uninlined_format_args.rs:46:5
+ |
+LL | / println!(
+LL | | "val='{
+LL | | }'",
+LL | | local_i32
+LL | | );
+ | |_____^
+
error: variables can be used directly in the `format!` string
--> $DIR/uninlined_format_args.rs:51:5
|
LL + println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
|
+error: variables can be used directly in the `format!` string
+ --> $DIR/uninlined_format_args.rs:112:5
+ |
+LL | / println!(
+LL | | "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}",
+LL | | local_i32, width, prec,
+LL | | );
+ | |_____^
+
error: variables can be used directly in the `format!` string
--> $DIR/uninlined_format_args.rs:123:5
|
LL + println!("{}", format!("{local_i32}"));
|
+error: variables can be used directly in the `format!` string
+ --> $DIR/uninlined_format_args.rs:144:5
+ |
+LL | / println!(
+LL | | "{}",
+LL | | // comment with a comma , in it
+LL | | val,
+LL | | );
+ | |_____^
+
error: variables can be used directly in the `format!` string
--> $DIR/uninlined_format_args.rs:149:5
|
LL + println!("expand='{local_i32}'");
|
-error: aborting due to 73 previous errors
+error: aborting due to 76 previous errors