diff --git a/clippy_lints/src/methods/append_instead_of_extend.rs b/clippy_lints/src/methods/append_instead_of_extend.rs index 2711f1ac42b4..ff3900c04704 100644 --- a/clippy_lints/src/methods/append_instead_of_extend.rs +++ b/clippy_lints/src/methods/append_instead_of_extend.rs @@ -16,10 +16,10 @@ pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, recv: &Expr<'_>, arg: //check source object if let ExprKind::MethodCall(src_method, _, [drain_vec, drain_arg], _) = &arg.kind; if src_method.ident.as_str() == "drain"; - let src_ty = cx.typeck_results().expr_ty(&drain_vec).peel_refs(); + let src_ty = cx.typeck_results().expr_ty(drain_vec).peel_refs(); if is_type_diagnostic_item(cx, src_ty, sym::vec_type); //check drain range - let src_ty_range = cx.typeck_results().expr_ty(&drain_arg).peel_refs(); + let src_ty_range = cx.typeck_results().expr_ty(drain_arg).peel_refs(); if is_type_lang_item(cx, src_ty_range, LangItem::RangeFull); let mut applicability = Applicability::MachineApplicable; then { diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs index 3aad1b83d46a..20d8187d0ed7 100644 --- a/clippy_lints/src/methods/mod.rs +++ b/clippy_lints/src/methods/mod.rs @@ -1057,7 +1057,7 @@ declare_clippy_lint! { declare_clippy_lint! { /// **What it does:** Checks for occurrences where one vector gets extended instead of append /// - /// **Why is this bad?** Using `append` instead of `extend` is more precise and faster + /// **Why is this bad?** Using `append` instead of `extend` is more concise and faster /// /// **Known problems:** None. /// @@ -1075,7 +1075,7 @@ declare_clippy_lint! { /// ``` pub APPEND_INSTEAD_OF_EXTEND, perf, - "default lint description" + "using vec.append(&mut vec) to move the full range of a vecor to another" } declare_clippy_lint! { diff --git a/tests/ui/append_instead_of_extend.fixed b/tests/ui/append_instead_of_extend.fixed index 072dbc93d274..a0d2e2df6440 100644 --- a/tests/ui/append_instead_of_extend.fixed +++ b/tests/ui/append_instead_of_extend.fixed @@ -13,6 +13,11 @@ fn main() { vec4.append(&mut vec3); + let mut vec10 = return_vector(); + let mut vec11: std::vec::Vec = Vec::new(); + + vec11.append(&mut vec10); + //won't get linted it dosen't move the entire content of a vec into another let mut test1 = vec![0u8, 10]; let mut test2: std::vec::Vec = Vec::new(); @@ -24,16 +29,29 @@ fn main() { vec3.append(&mut vec7); - - let mut vec5 = vec![0u8; 1024]; let mut vec6: std::vec::Vec = Vec::new(); vec5.extend(vec6.drain(..4)); + let mut vec8 = return_vector(); + let mut vec9: std::vec::Vec = Vec::new(); + + vec8.append(&mut vec9); + //won't get linted because it is not a vec let mut heap = BinaryHeap::from(vec![1, 3]); let mut heap2 = BinaryHeap::from(vec![]); heap2.extend(heap.drain()) } + +fn return_vector() -> Vec { + let mut new_vector = vec![]; + + for i in 1..10 { + new_vector.push(i) + } + + new_vector +} diff --git a/tests/ui/append_instead_of_extend.rs b/tests/ui/append_instead_of_extend.rs index 568e06513eb8..3b84d934b884 100644 --- a/tests/ui/append_instead_of_extend.rs +++ b/tests/ui/append_instead_of_extend.rs @@ -13,6 +13,11 @@ fn main() { vec4.extend(vec3.drain(..)); + let mut vec10 = return_vector(); + let mut vec11: std::vec::Vec = Vec::new(); + + vec11.extend(vec10.drain(..)); + //won't get linted it dosen't move the entire content of a vec into another let mut test1 = vec![0u8, 10]; let mut test2: std::vec::Vec = Vec::new(); @@ -24,16 +29,29 @@ fn main() { vec3.append(&mut vec7); - - let mut vec5 = vec![0u8; 1024]; let mut vec6: std::vec::Vec = Vec::new(); vec5.extend(vec6.drain(..4)); + let mut vec8 = return_vector(); + let mut vec9: std::vec::Vec = Vec::new(); + + vec8.append(&mut vec9); + //won't get linted because it is not a vec let mut heap = BinaryHeap::from(vec![1, 3]); let mut heap2 = BinaryHeap::from(vec![]); heap2.extend(heap.drain()) } + +fn return_vector() -> Vec { + let mut new_vector = vec![]; + + for i in 1..10 { + new_vector.push(i) + } + + new_vector +} diff --git a/tests/ui/append_instead_of_extend.stderr b/tests/ui/append_instead_of_extend.stderr index 9c1c9bab96a7..8b1ce55e9055 100644 --- a/tests/ui/append_instead_of_extend.stderr +++ b/tests/ui/append_instead_of_extend.stderr @@ -12,5 +12,11 @@ error: use of `extend` instead of `append` for adding the full range of a second LL | vec4.extend(vec3.drain(..)); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `vec4.append(&mut vec3)` -error: aborting due to 2 previous errors +error: use of `extend` instead of `append` for adding the full range of a second vector + --> $DIR/append_instead_of_extend.rs:19:5 + | +LL | vec11.extend(vec10.drain(..)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `vec11.append(&mut vec10)` + +error: aborting due to 3 previous errors