refactor needless_return

This commit is contained in:
kraktus 2022-09-18 20:41:41 +02:00
parent e120fb10c6
commit d1dbdcf332

View File

@ -72,6 +72,28 @@ enum RetReplacement {
Unit, 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]); declare_lint_pass!(Return => [LET_AND_RETURN, NEEDLESS_RETURN]);
impl<'tcx> LateLintPass<'tcx> for Return { impl<'tcx> LateLintPass<'tcx> for Return {
@ -221,8 +243,7 @@ fn emit_return_lint(
if ret_span.from_expansion() { if ret_span.from_expansion() {
return; return;
} }
match inner_span { if let Some(inner_span) = inner_span {
Some(inner_span) => {
let mut applicability = Applicability::MachineApplicable; let mut applicability = Applicability::MachineApplicable;
span_lint_hir_and_then( span_lint_hir_and_then(
cx, cx,
@ -235,9 +256,7 @@ fn emit_return_lint(
diag.span_suggestion(ret_span, "remove `return`", snippet, applicability); diag.span_suggestion(ret_span, "remove `return`", snippet, applicability);
}, },
); );
}, } else {
None => match replacement {
RetReplacement::Empty => {
span_lint_hir_and_then( span_lint_hir_and_then(
cx, cx,
NEEDLESS_RETURN, NEEDLESS_RETURN,
@ -247,48 +266,12 @@ fn emit_return_lint(
|diag| { |diag| {
diag.span_suggestion( diag.span_suggestion(
ret_span, ret_span,
"remove `return`", replacement.sugg_help(),
String::new(), replacement.to_string(),
Applicability::MachineApplicable, 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,
);
},
);
},
RetReplacement::Unit => {
span_lint_hir_and_then(
cx,
NEEDLESS_RETURN,
emission_place,
ret_span,
"unneeded `return` statement",
|diag| {
diag.span_suggestion(
ret_span,
"replace `return` with a unit value",
"()".to_string(),
Applicability::MachineApplicable,
);
},
);
},
},
} }
} }