From b4549c50b599929ec47ff4e9d880c27654342bb9 Mon Sep 17 00:00:00 2001 From: y21 <30553356+y21@users.noreply.github.com> Date: Mon, 3 Jul 2023 18:13:01 +0200 Subject: [PATCH] [`useless_vec`]: add more tests for macro combinations --- clippy_lints/src/vec.rs | 4 ++++ tests/ui/vec.fixed | 29 +++++++++++++++++++++++++++++ tests/ui/vec.rs | 29 +++++++++++++++++++++++++++++ tests/ui/vec.stderr | 18 +++++++++++++++--- 4 files changed, 77 insertions(+), 3 deletions(-) diff --git a/clippy_lints/src/vec.rs b/clippy_lints/src/vec.rs index ca0daa9eceec..6a96114ae769 100644 --- a/clippy_lints/src/vec.rs +++ b/clippy_lints/src/vec.rs @@ -154,6 +154,10 @@ impl UselessVec { span: Span, suggest_slice: SuggestedType, ) { + if span.from_expansion() { + return; + } + let mut applicability = Applicability::MachineApplicable; let snippet = match *vec_args { diff --git a/tests/ui/vec.fixed b/tests/ui/vec.fixed index 14ab8bd8897e..7a7d0026f797 100644 --- a/tests/ui/vec.fixed +++ b/tests/ui/vec.fixed @@ -124,6 +124,35 @@ fn issue11075() { for _string in [repro!(true), repro!(null)] { unimplemented!(); } + + macro_rules! in_macro { + ($e:expr, $vec:expr, $vec2:expr) => {{ + vec![1; 2].fill(3); + vec![1, 2].fill(3); + for _ in vec![1, 2] {} + for _ in vec![1; 2] {} + for _ in vec![$e, $e] {} + for _ in vec![$e; 2] {} + for _ in $vec {} + for _ in $vec2 {} + }}; + } + + in_macro!(1, [1, 2], [1; 2]); + + macro_rules! from_macro { + () => { + vec![1, 2, 3] + }; + } + macro_rules! from_macro_repeat { + () => { + vec![1; 3] + }; + } + + for _ in from_macro!() {} + for _ in from_macro_repeat!() {} } #[clippy::msrv = "1.53"] diff --git a/tests/ui/vec.rs b/tests/ui/vec.rs index e57cb4374e38..cbe7685b4533 100644 --- a/tests/ui/vec.rs +++ b/tests/ui/vec.rs @@ -124,6 +124,35 @@ fn issue11075() { for _string in vec![repro!(true), repro!(null)] { unimplemented!(); } + + macro_rules! in_macro { + ($e:expr, $vec:expr, $vec2:expr) => {{ + vec![1; 2].fill(3); + vec![1, 2].fill(3); + for _ in vec![1, 2] {} + for _ in vec![1; 2] {} + for _ in vec![$e, $e] {} + for _ in vec![$e; 2] {} + for _ in $vec {} + for _ in $vec2 {} + }}; + } + + in_macro!(1, vec![1, 2], vec![1; 2]); + + macro_rules! from_macro { + () => { + vec![1, 2, 3] + }; + } + macro_rules! from_macro_repeat { + () => { + vec![1; 3] + }; + } + + for _ in from_macro!() {} + for _ in from_macro_repeat!() {} } #[clippy::msrv = "1.53"] diff --git a/tests/ui/vec.stderr b/tests/ui/vec.stderr index 1b82d5cbea88..8f6d2a1df803 100644 --- a/tests/ui/vec.stderr +++ b/tests/ui/vec.stderr @@ -91,16 +91,28 @@ LL | for _string in vec![repro!(true), repro!(null)] { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[repro!(true), repro!(null)]` error: useless use of `vec!` - --> $DIR/vec.rs:131:14 + --> $DIR/vec.rs:141:18 + | +LL | in_macro!(1, vec![1, 2], vec![1; 2]); + | ^^^^^^^^^^ help: you can use an array directly: `[1, 2]` + +error: useless use of `vec!` + --> $DIR/vec.rs:141:30 + | +LL | in_macro!(1, vec![1, 2], vec![1; 2]); + | ^^^^^^^^^^ help: you can use an array directly: `[1; 2]` + +error: useless use of `vec!` + --> $DIR/vec.rs:160:14 | LL | for a in vec![1, 2, 3] { | ^^^^^^^^^^^^^ help: you can use an array directly: `[1, 2, 3]` error: useless use of `vec!` - --> $DIR/vec.rs:135:14 + --> $DIR/vec.rs:164:14 | LL | for a in vec![String::new(), String::new()] { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[String::new(), String::new()]` -error: aborting due to 17 previous errors +error: aborting due to 19 previous errors