about summary refs log tree commit diff
diff options
context:
space:
mode:
authorroife <roifewu@gmail.com>2024-02-03 00:50:20 +0800
committerroife <roifewu@gmail.com>2024-02-03 00:50:20 +0800
commit015ac1095417a61f293ca46b7f320ac935176c83 (patch)
tree8b8f319558db89141f4d7195782bb3a0adab619f
parente83c7d49dbc18112bfaa7197a87145a99a9570fc (diff)
downloadrust-015ac1095417a61f293ca46b7f320ac935176c83.tar.gz
rust-015ac1095417a61f293ca46b7f320ac935176c83.zip
Refactor machine_applicable_sugg in unnecessary_fallible_conversions
-rw-r--r--clippy_lints/src/methods/unnecessary_fallible_conversions.rs41
1 files changed, 24 insertions, 17 deletions
diff --git a/clippy_lints/src/methods/unnecessary_fallible_conversions.rs b/clippy_lints/src/methods/unnecessary_fallible_conversions.rs
index 42ad700a574..72bd8f7e000 100644
--- a/clippy_lints/src/methods/unnecessary_fallible_conversions.rs
+++ b/clippy_lints/src/methods/unnecessary_fallible_conversions.rs
@@ -34,6 +34,7 @@ impl FunctionKind {
         if parent_unwrap_call.is_none() {
             return Applicability::Unspecified;
         }
+
         match &self {
             FunctionKind::TryFromFunction(None) | FunctionKind::TryIntoFunction(None) => Applicability::Unspecified,
             _ => Applicability::MachineApplicable,
@@ -41,30 +42,36 @@ impl FunctionKind {
     }
 
     fn default_sugg(&self, primary_span: Span) -> Vec<(Span, String)> {
-        match *self {
-            FunctionKind::TryFromFunction(_) => vec![(primary_span, String::from("From::from"))],
-            FunctionKind::TryIntoFunction(_) => vec![(primary_span, String::from("Into::into"))],
-            FunctionKind::TryIntoMethod => vec![(primary_span, String::from("into"))],
-        }
+        let replacement = match *self {
+            FunctionKind::TryFromFunction(_) => "From::from",
+            FunctionKind::TryIntoFunction(_) => "Into::into",
+            FunctionKind::TryIntoMethod => "into",
+        };
+
+        vec![(primary_span, String::from(replacement))]
     }
 
     fn machine_applicable_sugg(&self, primary_span: Span, unwrap_span: Span) -> Vec<(Span, String)> {
+        use FunctionKind::*;
+        use SpansKind::*;
+
+        let (trait_name, fn_name) = {
+            let (a, b) = match self {
+                TryFromFunction(_) => ("From", "from"),
+                TryIntoFunction(_) | TryIntoMethod => ("Into", "into"),
+            };
+            (a.to_string(), b.to_string())
+        };
+
         let mut sugg = match *self {
-            FunctionKind::TryFromFunction(Some(spans)) => match spans {
-                SpansKind::TraitFn { trait_span, fn_span } => {
-                    vec![(trait_span, String::from("From")), (fn_span, String::from("from"))]
-                },
-                SpansKind::Fn { fn_span } => vec![(fn_span, String::from("from"))],
+            TryFromFunction(Some(spans)) | TryIntoFunction(Some(spans)) => match spans {
+                TraitFn { trait_span, fn_span } => vec![(trait_span, trait_name), (fn_span, fn_name)],
+                Fn { fn_span } => vec![(fn_span, fn_name)],
             },
-            FunctionKind::TryIntoFunction(Some(spans)) => match spans {
-                SpansKind::TraitFn { trait_span, fn_span } => {
-                    vec![(trait_span, String::from("Into")), (fn_span, String::from("into"))]
-                },
-                SpansKind::Fn { fn_span } => vec![(fn_span, String::from("into"))],
-            },
-            FunctionKind::TryIntoMethod => vec![(primary_span, String::from("into"))],
+            TryIntoMethod => vec![(primary_span, fn_name)],
             _ => unreachable!(),
         };
+
         sugg.push((unwrap_span, String::new()));
         sugg
     }