about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkraktus <kraktus@users.noreply.github.com>2022-09-18 20:41:41 +0200
committerkraktus <kraktus@users.noreply.github.com>2022-09-18 20:41:41 +0200
commitd1dbdcf332e1a91666999d25ee6a0900512dda82 (patch)
treeacb5fe54d6095c29aaca809467c442d749aaaee8
parente120fb10c60a27670c72e7ec99e93d16c045f493 (diff)
downloadrust-d1dbdcf332e1a91666999d25ee6a0900512dda82.tar.gz
rust-d1dbdcf332e1a91666999d25ee6a0900512dda82.zip
refactor `needless_return`
-rw-r--r--clippy_lints/src/returns.rs111
1 files changed, 47 insertions, 64 deletions
diff --git a/clippy_lints/src/returns.rs b/clippy_lints/src/returns.rs
index 91553240e3c..63c8811f62d 100644
--- a/clippy_lints/src/returns.rs
+++ b/clippy_lints/src/returns.rs
@@ -72,6 +72,28 @@ enum RetReplacement {
     Unit,
 }
 
+impl RetReplacement {
+    fn sugg_help(&self) -> &'static str {
+        match *self {
+            Self::Empty => "remove `return`",
+            Self::Block => "replace `return` with an empty block",
+            Self::Unit => "replace `return` with a unit value",
+
+        }
+    }
+}
+
+impl ToString for RetReplacement {
+    fn to_string(&self) -> String {
+        match *self {
+            Self::Empty => "",
+            Self::Block => "{}",
+            Self::Unit => "()",
+        }
+        .to_string()
+    }
+}
+
 declare_lint_pass!(Return => [LET_AND_RETURN, NEEDLESS_RETURN]);
 
 impl<'tcx> LateLintPass<'tcx> for Return {
@@ -221,74 +243,35 @@ fn emit_return_lint(
     if ret_span.from_expansion() {
         return;
     }
-    match inner_span {
-        Some(inner_span) => {
-            let mut applicability = Applicability::MachineApplicable;
-            span_lint_hir_and_then(
-                cx,
-                NEEDLESS_RETURN,
-                emission_place,
-                ret_span,
-                "unneeded `return` statement",
-                |diag| {
-                    let (snippet, _) = snippet_with_context(cx, inner_span, ret_span.ctxt(), "..", &mut applicability);
-                    diag.span_suggestion(ret_span, "remove `return`", snippet, applicability);
-                },
-            );
-        },
-        None => match replacement {
-            RetReplacement::Empty => {
-                span_lint_hir_and_then(
-                    cx,
-                    NEEDLESS_RETURN,
-                    emission_place,
-                    ret_span,
-                    "unneeded `return` statement",
-                    |diag| {
-                        diag.span_suggestion(
-                            ret_span,
-                            "remove `return`",
-                            String::new(),
-                            Applicability::MachineApplicable,
-                        );
-                    },
-                );
-            },
-            RetReplacement::Block => {
-                span_lint_hir_and_then(
-                    cx,
-                    NEEDLESS_RETURN,
-                    emission_place,
-                    ret_span,
-                    "unneeded `return` statement",
-                    |diag| {
-                        diag.span_suggestion(
-                            ret_span,
-                            "replace `return` with an empty block",
-                            "{}".to_string(),
-                            Applicability::MachineApplicable,
-                        );
-                    },
-                );
+    if let Some(inner_span) = inner_span {
+        let mut applicability = Applicability::MachineApplicable;
+        span_lint_hir_and_then(
+            cx,
+            NEEDLESS_RETURN,
+            emission_place,
+            ret_span,
+            "unneeded `return` statement",
+            |diag| {
+                let (snippet, _) = snippet_with_context(cx, inner_span, ret_span.ctxt(), "..", &mut applicability);
+                diag.span_suggestion(ret_span, "remove `return`", snippet, applicability);
             },
-            RetReplacement::Unit => {
-                span_lint_hir_and_then(
-                    cx,
-                    NEEDLESS_RETURN,
-                    emission_place,
+        );
+    } else {
+        span_lint_hir_and_then(
+            cx,
+            NEEDLESS_RETURN,
+            emission_place,
+            ret_span,
+            "unneeded `return` statement",
+            |diag| {
+                diag.span_suggestion(
                     ret_span,
-                    "unneeded `return` statement",
-                    |diag| {
-                        diag.span_suggestion(
-                            ret_span,
-                            "replace `return` with a unit value",
-                            "()".to_string(),
-                            Applicability::MachineApplicable,
-                        );
-                    },
+                    replacement.sugg_help(),
+                    replacement.to_string(),
+                    Applicability::MachineApplicable,
                 );
             },
-        },
+        )
     }
 }