diff options
| author | Red Rapious <red.rapious@gmail.com> | 2023-08-22 19:36:58 +0200 |
|---|---|---|
| committer | Red Rapious <red.rapious@gmail.com> | 2023-08-22 19:36:58 +0200 |
| commit | 7977d209b27c14769c8e50b5f189cd27a716be3e (patch) | |
| tree | 648a3e7a1aab07e0c4841bb98a0b9d67b064d840 | |
| parent | df8bb47f1711d0db0dd6e9e8446b15b394721126 (diff) | |
| download | rust-7977d209b27c14769c8e50b5f189cd27a716be3e.tar.gz rust-7977d209b27c14769c8e50b5f189cd27a716be3e.zip | |
Do not lint inside macros
| -rw-r--r-- | clippy_lints/src/reserve_after_initialization.rs | 8 | ||||
| -rw-r--r-- | tests/ui/reserve_after_initialization.fixed | 28 | ||||
| -rw-r--r-- | tests/ui/reserve_after_initialization.rs | 28 | ||||
| -rw-r--r-- | tests/ui/reserve_after_initialization.stderr | 6 |
4 files changed, 28 insertions, 42 deletions
diff --git a/clippy_lints/src/reserve_after_initialization.rs b/clippy_lints/src/reserve_after_initialization.rs index 17ca9c8aab8..15f8c5da106 100644 --- a/clippy_lints/src/reserve_after_initialization.rs +++ b/clippy_lints/src/reserve_after_initialization.rs @@ -1,7 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::higher::{get_vec_init_kind, VecInitKind}; -use clippy_utils::path_to_local_id; use clippy_utils::source::snippet; +use clippy_utils::{is_from_proc_macro, path_to_local_id}; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::{BindingAnnotation, Block, Expr, ExprKind, HirId, Local, PatKind, QPath, Stmt, StmtKind}; @@ -74,8 +74,9 @@ impl<'tcx> LateLintPass<'tcx> for ReserveAfterInitialization { && let PatKind::Binding(BindingAnnotation::MUT, id, _, None) = local.pat.kind && !in_external_macro(cx.sess(), local.span) && let Some(init) = get_vec_init_kind(cx, init_expr) - && !matches!(init, VecInitKind::WithExprCapacity(_)) - && !matches!(init, VecInitKind::WithConstCapacity(_)) + && !matches!(init, VecInitKind::WithExprCapacity(_) + | VecInitKind::WithConstCapacity(_) + ) { self.searcher = Some(VecReserveSearcher { local_id: id, @@ -116,6 +117,7 @@ impl<'tcx> LateLintPass<'tcx> for ReserveAfterInitialization { if let StmtKind::Expr(expr) | StmtKind::Semi(expr) = stmt.kind && let ExprKind::MethodCall(name, self_arg, [space_hint], _) = expr.kind && path_to_local_id(self_arg, searcher.local_id) + && !is_from_proc_macro(cx, expr) && name.ident.as_str() == "reserve" { self.searcher = Some(VecReserveSearcher { diff --git a/tests/ui/reserve_after_initialization.fixed b/tests/ui/reserve_after_initialization.fixed index 5ef848ed8cf..0675277849a 100644 --- a/tests/ui/reserve_after_initialization.fixed +++ b/tests/ui/reserve_after_initialization.fixed @@ -1,6 +1,10 @@ +//@aux-build:proc_macros.rs #![warn(clippy::reserve_after_initialization)] #![no_main] +extern crate proc_macros; +use proc_macros::{external, with_span}; + // Should lint fn standard() { let mut v1: Vec<usize> = Vec::with_capacity(10); @@ -29,28 +33,16 @@ fn assign_expression() { v5 = Vec::with_capacity(10); } -/*fn in_macros() { +fn in_macros() { external! { - // Should lint - let mut v1: Vec<usize> = vec![]; - v1.reserve(10); - - // Should lint - let capacity = 10; - let mut v2: Vec<usize> = vec![]; - v2.reserve(capacity); + let mut v: Vec<usize> = vec![]; + v.reserve(10); } with_span! { span - // Should lint - let mut v1: Vec<usize> = vec![]; - v1.reserve(10); - - // Should lint - let capacity = 10; - let mut v2: Vec<usize> = vec![]; - v2.reserve(capacity); + let mut v: Vec<usize> = vec![]; + v.reserve(10); } -}*/ +} diff --git a/tests/ui/reserve_after_initialization.rs b/tests/ui/reserve_after_initialization.rs index eba7bc8dab3..b57a8e162c5 100644 --- a/tests/ui/reserve_after_initialization.rs +++ b/tests/ui/reserve_after_initialization.rs @@ -1,6 +1,10 @@ +//@aux-build:proc_macros.rs #![warn(clippy::reserve_after_initialization)] #![no_main] +extern crate proc_macros; +use proc_macros::{external, with_span}; + // Should lint fn standard() { let mut v1: Vec<usize> = vec![]; @@ -32,28 +36,16 @@ fn assign_expression() { v5.reserve(10); } -/*fn in_macros() { +fn in_macros() { external! { - // Should lint - let mut v1: Vec<usize> = vec![]; - v1.reserve(10); - - // Should lint - let capacity = 10; - let mut v2: Vec<usize> = vec![]; - v2.reserve(capacity); + let mut v: Vec<usize> = vec![]; + v.reserve(10); } with_span! { span - // Should lint - let mut v1: Vec<usize> = vec![]; - v1.reserve(10); - - // Should lint - let capacity = 10; - let mut v2: Vec<usize> = vec![]; - v2.reserve(capacity); + let mut v: Vec<usize> = vec![]; + v.reserve(10); } -}*/ +} diff --git a/tests/ui/reserve_after_initialization.stderr b/tests/ui/reserve_after_initialization.stderr index e50a8a065ba..4a6164d8ebc 100644 --- a/tests/ui/reserve_after_initialization.stderr +++ b/tests/ui/reserve_after_initialization.stderr @@ -1,5 +1,5 @@ error: call to `reserve` immediately after creation - --> $DIR/reserve_after_initialization.rs:6:5 + --> $DIR/reserve_after_initialization.rs:10:5 | LL | / let mut v1: Vec<usize> = vec![]; LL | | v1.reserve(10); @@ -8,14 +8,14 @@ LL | | v1.reserve(10); = note: `-D clippy::reserve-after-initialization` implied by `-D warnings` error: call to `reserve` immediately after creation - --> $DIR/reserve_after_initialization.rs:13:5 + --> $DIR/reserve_after_initialization.rs:17:5 | LL | / let mut v2: Vec<usize> = vec![]; LL | | v2.reserve(capacity); | |_________________________^ help: consider using `Vec::with_capacity(/* Space hint */)`: `let mut v2: Vec<usize> = Vec::with_capacity(capacity);` error: call to `reserve` immediately after creation - --> $DIR/reserve_after_initialization.rs:31:5 + --> $DIR/reserve_after_initialization.rs:35:5 | LL | / v5 = Vec::new(); LL | | v5.reserve(10); |
