about summary refs log tree commit diff
path: root/clippy_lints
diff options
context:
space:
mode:
authorvalentine-mario <valentine13400@gmail.com>2021-08-05 16:15:44 +0100
committervalentine-mario <valentine13400@gmail.com>2021-08-05 16:15:44 +0100
commit8a4ffb881d989be8e5bbbfa45cd5aa971a6179f2 (patch)
tree7cd9e4843ade52a69307160ffa9f2cb34b062eda /clippy_lints
parent2dbf0c138de34d7805b9291705f2e2361324f219 (diff)
downloadrust-8a4ffb881d989be8e5bbbfa45cd5aa971a6179f2.tar.gz
rust-8a4ffb881d989be8e5bbbfa45cd5aa971a6179f2.zip
fixed bug that had to deal with mut and non mut suggestion
Diffstat (limited to 'clippy_lints')
-rw-r--r--clippy_lints/src/methods/extend_with_drain.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/clippy_lints/src/methods/extend_with_drain.rs b/clippy_lints/src/methods/extend_with_drain.rs
index 57e10ce42f8..8829b8c5f4d 100644
--- a/clippy_lints/src/methods/extend_with_drain.rs
+++ b/clippy_lints/src/methods/extend_with_drain.rs
@@ -16,7 +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";
-        if let src_ty = cx.typeck_results().expr_ty(drain_vec).peel_refs();
+        let src_ty = cx.typeck_results().expr_ty(drain_vec);
+        //check if actual src type is mutable for code suggestion
+        let immutable = src_ty.is_mutable_ptr();
+        let src_ty = src_ty.peel_refs();
         if is_type_diagnostic_item(cx, src_ty, sym::vec_type);
         //check drain range
         if let src_ty_range = cx.typeck_results().expr_ty(drain_arg).peel_refs();
@@ -30,8 +33,9 @@ pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, recv: &Expr<'_>, arg:
                 "use of `extend` instead of `append` for adding the full range of a second vector",
                 "try this",
                 format!(
-                    "{}.append(&mut {})",
+                    "{}.append({}{})",
                     snippet_with_applicability(cx, recv.span, "..", &mut applicability),
+                    if immutable { "" } else { "&mut " },
                     snippet_with_applicability(cx, drain_vec.span, "..", &mut applicability)
                 ),
                 applicability,