diff options
| author | kraktus <kraktus@users.noreply.github.com> | 2022-09-18 20:41:41 +0200 |
|---|---|---|
| committer | kraktus <kraktus@users.noreply.github.com> | 2022-09-18 20:41:41 +0200 |
| commit | d1dbdcf332e1a91666999d25ee6a0900512dda82 (patch) | |
| tree | acb5fe54d6095c29aaca809467c442d749aaaee8 | |
| parent | e120fb10c60a27670c72e7ec99e93d16c045f493 (diff) | |
| download | rust-d1dbdcf332e1a91666999d25ee6a0900512dda82.tar.gz rust-d1dbdcf332e1a91666999d25ee6a0900512dda82.zip | |
refactor `needless_return`
| -rw-r--r-- | clippy_lints/src/returns.rs | 111 |
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, ); }, - }, + ) } } |
