- fn emit_return_lint(&mut self, cx: &EarlyContext<'_>, ret_span: Span, inner_span: Span) {
- if in_external_macro(cx.sess(), inner_span) || in_macro_or_desugar(inner_span) {
- return;
+ fn emit_return_lint(cx: &EarlyContext<'_>, ret_span: Span, inner_span: Option<Span>, replacement: RetReplacement) {
+ match inner_span {
+ Some(inner_span) => {
+ if in_external_macro(cx.sess(), inner_span) || inner_span.from_expansion() {
+ return;
+ }
+
+ span_lint_and_then(cx, NEEDLESS_RETURN, ret_span, "unneeded return statement", |db| {
+ if let Some(snippet) = snippet_opt(cx, inner_span) {
+ db.span_suggestion(ret_span, "remove `return`", snippet, Applicability::MachineApplicable);
+ }
+ })
+ },
+ None => match replacement {
+ RetReplacement::Empty => {
+ span_lint_and_then(cx, NEEDLESS_RETURN, ret_span, "unneeded return statement", |db| {
+ db.span_suggestion(
+ ret_span,
+ "remove `return`",
+ String::new(),
+ Applicability::MachineApplicable,
+ );
+ });
+ },
+ RetReplacement::Block => {
+ span_lint_and_then(cx, NEEDLESS_RETURN, ret_span, "unneeded return statement", |db| {
+ db.span_suggestion(
+ ret_span,
+ "replace `return` with an empty block",
+ "{}".to_string(),
+ Applicability::MachineApplicable,
+ );
+ });
+ },
+ },