Merge commit '8f1ebdd18bdecc621f16baaf779898cc08cc2766' into clippyup
This commit is contained in:
parent
d75b25faab
commit
09a554db25
@ -357,7 +357,8 @@ impl<'tcx> LateLintPass<'tcx> for Attributes {
|
|||||||
"wildcard_imports"
|
"wildcard_imports"
|
||||||
| "enum_glob_use"
|
| "enum_glob_use"
|
||||||
| "redundant_pub_crate"
|
| "redundant_pub_crate"
|
||||||
| "macro_use_imports",
|
| "macro_use_imports"
|
||||||
|
| "unsafe_removed_from_name",
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
|
@ -8,7 +8,7 @@ use if_chain::if_chain;
|
|||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::{Expr, ExprKind, HirId, QPath};
|
use rustc_hir::{Expr, ExprKind, HirId, QPath};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||||
use rustc_middle::ty::adjustment::{Adjust, Adjustment};
|
use rustc_middle::ty::adjustment::{Adjust, Adjustment};
|
||||||
use rustc_middle::ty::Ty;
|
use rustc_middle::ty::Ty;
|
||||||
use rustc_semver::RustcVersion;
|
use rustc_semver::RustcVersion;
|
||||||
@ -173,17 +173,10 @@ fn check_uninlined_args(cx: &LateContext<'_>, args: &FormatArgsExpn<'_>, call_si
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Properly ignore a rare case where the format string is wrapped in a macro.
|
// Temporarily ignore multiline spans: https://github.com/rust-lang/rust/pull/102729#discussion_r988704308
|
||||||
// Example: `format!(indoc!("{}"), foo);`
|
if fixes.iter().any(|(span, _)| cx.sess().source_map().is_multiline(*span)) {
|
||||||
// If inlined, they will cause a compilation error:
|
return;
|
||||||
// > to avoid ambiguity, `format_args!` cannot capture variables
|
}
|
||||||
// > when the format string is expanded from a macro
|
|
||||||
// @Alexendoo explanation:
|
|
||||||
// > indoc! is a proc macro that is producing a string literal with its span
|
|
||||||
// > set to its input it's not marked as from expansion, and since it's compatible
|
|
||||||
// > tokenization wise clippy_utils::is_from_proc_macro wouldn't catch it either
|
|
||||||
// This might be a relatively expensive test, so do it only we are ready to replace.
|
|
||||||
// See more examples in tests/ui/uninlined_format_args.rs
|
|
||||||
|
|
||||||
span_lint_and_then(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
|
@ -414,7 +414,7 @@ impl FormatString {
|
|||||||
|
|
||||||
struct FormatArgsValues<'tcx> {
|
struct FormatArgsValues<'tcx> {
|
||||||
/// Values passed after the format string and implicit captures. `[1, z + 2, x]` for
|
/// Values passed after the format string and implicit captures. `[1, z + 2, x]` for
|
||||||
/// `format!("{x} {} {y}", 1, z + 2)`.
|
/// `format!("{x} {} {}", 1, z + 2)`.
|
||||||
value_args: Vec<&'tcx Expr<'tcx>>,
|
value_args: Vec<&'tcx Expr<'tcx>>,
|
||||||
/// Maps an `rt::v1::Argument::position` or an `rt::v1::Count::Param` to its index in
|
/// Maps an `rt::v1::Argument::position` or an `rt::v1::Count::Param` to its index in
|
||||||
/// `value_args`
|
/// `value_args`
|
||||||
|
@ -44,7 +44,9 @@ fn tester(fn_arg: i32) {
|
|||||||
println!("val='{local_i32}'"); // space+tab
|
println!("val='{local_i32}'"); // space+tab
|
||||||
println!("val='{local_i32}'"); // tab+space
|
println!("val='{local_i32}'"); // tab+space
|
||||||
println!(
|
println!(
|
||||||
"val='{local_i32}'"
|
"val='{
|
||||||
|
}'",
|
||||||
|
local_i32
|
||||||
);
|
);
|
||||||
println!("{local_i32}");
|
println!("{local_i32}");
|
||||||
println!("{fn_arg}");
|
println!("{fn_arg}");
|
||||||
@ -108,7 +110,8 @@ fn tester(fn_arg: i32) {
|
|||||||
println!("{local_f64:width$.prec$}");
|
println!("{local_f64:width$.prec$}");
|
||||||
println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
|
println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
|
||||||
println!(
|
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$}",
|
"{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}",
|
||||||
|
local_i32, width, prec,
|
||||||
);
|
);
|
||||||
println!(
|
println!(
|
||||||
"{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$} {3}",
|
"{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$} {3}",
|
||||||
@ -139,7 +142,9 @@ fn tester(fn_arg: i32) {
|
|||||||
println!(no_param_str!(), local_i32);
|
println!(no_param_str!(), local_i32);
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"{val}",
|
"{}",
|
||||||
|
// comment with a comma , in it
|
||||||
|
val,
|
||||||
);
|
);
|
||||||
println!("{val}");
|
println!("{val}");
|
||||||
|
|
||||||
|
@ -59,22 +59,6 @@ LL - println!("val='{ }'", local_i32); // tab+space
|
|||||||
LL + println!("val='{local_i32}'"); // tab+space
|
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 | | );
|
|
||||||
| |_____^
|
|
||||||
|
|
|
||||||
help: change this to
|
|
||||||
|
|
|
||||||
LL - "val='{
|
|
||||||
LL + "val='{local_i32}'"
|
|
||||||
|
|
|
||||||
|
|
||||||
error: variables can be used directly in the `format!` string
|
error: variables can be used directly in the `format!` string
|
||||||
--> $DIR/uninlined_format_args.rs:51:5
|
--> $DIR/uninlined_format_args.rs:51:5
|
||||||
|
|
|
|
||||||
@ -783,25 +767,6 @@ LL - println!("{:1$.2$} {0} {1} {2}", local_f64, width, prec);
|
|||||||
LL + println!("{local_f64:width$.prec$} {local_f64} {width} {prec}");
|
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 | | );
|
|
||||||
| |_____^
|
|
||||||
|
|
|
||||||
help: change this to
|
|
||||||
|
|
|
||||||
LL ~ "{local_i32:width$.prec$} {local_i32:prec$.width$} {width:local_i32$.prec$} {width:prec$.local_i32$} {prec:local_i32$.width$} {prec:width$.local_i32$}", width, prec,
|
|
||||||
LL ~ "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}", width, prec,
|
|
||||||
LL ~ "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}", width, prec,
|
|
||||||
LL ~ "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}", width, prec,
|
|
||||||
LL ~ "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}", width, prec,
|
|
||||||
LL ~ "{0:1$.2$} {0:2$.1$} {1:0$.2$} {1:2$.0$} {2:0$.1$} {2:1$.0$}",
|
|
||||||
|
|
|
||||||
|
|
||||||
error: variables can be used directly in the `format!` string
|
error: variables can be used directly in the `format!` string
|
||||||
--> $DIR/uninlined_format_args.rs:123:5
|
--> $DIR/uninlined_format_args.rs:123:5
|
||||||
|
|
|
|
||||||
@ -850,22 +815,6 @@ LL - println!("{}", format!("{}", local_i32));
|
|||||||
LL + println!("{}", format!("{local_i32}"));
|
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 | | );
|
|
||||||
| |_____^
|
|
||||||
|
|
|
||||||
help: change this to
|
|
||||||
|
|
|
||||||
LL - "{}",
|
|
||||||
LL + "{val}",
|
|
||||||
|
|
|
||||||
|
|
||||||
error: variables can be used directly in the `format!` string
|
error: variables can be used directly in the `format!` string
|
||||||
--> $DIR/uninlined_format_args.rs:149:5
|
--> $DIR/uninlined_format_args.rs:149:5
|
||||||
|
|
|
|
||||||
@ -890,5 +839,5 @@ LL - println!("expand='{}'", local_i32);
|
|||||||
LL + println!("expand='{local_i32}'");
|
LL + println!("expand='{local_i32}'");
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 73 previous errors
|
error: aborting due to 70 previous errors
|
||||||
|
|
||||||
|
@ -24,4 +24,7 @@ use mod_with_some_unsafe_things::Unsafe as LieAboutModSafety;
|
|||||||
use mod_with_some_unsafe_things::Safe as IPromiseItsSafeThisTime;
|
use mod_with_some_unsafe_things::Safe as IPromiseItsSafeThisTime;
|
||||||
use mod_with_some_unsafe_things::Unsafe as SuperUnsafeModThing;
|
use mod_with_some_unsafe_things::Unsafe as SuperUnsafeModThing;
|
||||||
|
|
||||||
|
#[allow(clippy::unsafe_removed_from_name)]
|
||||||
|
use mod_with_some_unsafe_things::Unsafe as SuperSafeThing;
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user