Auto merge of #4137 - euclio:let-return, r=oli-obk
tweak `let_and_return` diagnostic changelog: `let_and_return`: label the unnecessary let binding and convert the note to a structured suggestion
This commit is contained in:
commit
7b501f0f6a
3 changed files with 43 additions and 23 deletions
|
@ -7,7 +7,7 @@ use syntax::source_map::Span;
|
||||||
use syntax::visit::FnKind;
|
use syntax::visit::FnKind;
|
||||||
use syntax_pos::BytePos;
|
use syntax_pos::BytePos;
|
||||||
|
|
||||||
use crate::utils::{in_macro_or_desugar, match_path_ast, snippet_opt, span_lint_and_then, span_note_and_lint};
|
use crate::utils::{in_macro_or_desugar, match_path_ast, snippet_opt, span_lint_and_then};
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// **What it does:** Checks for return statements at the end of a block.
|
/// **What it does:** Checks for return statements at the end of a block.
|
||||||
|
@ -164,13 +164,28 @@ impl Return {
|
||||||
if match_path_ast(path, &[&*ident.name.as_str()]);
|
if match_path_ast(path, &[&*ident.name.as_str()]);
|
||||||
if !in_external_macro(cx.sess(), initexpr.span);
|
if !in_external_macro(cx.sess(), initexpr.span);
|
||||||
then {
|
then {
|
||||||
span_note_and_lint(cx,
|
span_lint_and_then(
|
||||||
|
cx,
|
||||||
LET_AND_RETURN,
|
LET_AND_RETURN,
|
||||||
retexpr.span,
|
retexpr.span,
|
||||||
"returning the result of a let binding from a block. \
|
"returning the result of a let binding from a block",
|
||||||
Consider returning the expression directly.",
|
|err| {
|
||||||
initexpr.span,
|
err.span_label(local.span, "unnecessary let binding");
|
||||||
"this expression can be directly returned");
|
|
||||||
|
if let Some(snippet) = snippet_opt(cx, initexpr.span) {
|
||||||
|
err.multipart_suggestion(
|
||||||
|
"return the expression directly",
|
||||||
|
vec![
|
||||||
|
(local.span, String::new()),
|
||||||
|
(retexpr.span, snippet),
|
||||||
|
],
|
||||||
|
Applicability::MachineApplicable,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
err.span_help(initexpr.span, "this expression can be directly returned");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
error: returning the result of a let binding from a block. Consider returning the expression directly.
|
error: returning the result of a let binding from a block
|
||||||
--> $DIR/matches.rs:9:13
|
--> $DIR/matches.rs:9:13
|
||||||
|
|
|
|
||||||
|
LL | let x = 3;
|
||||||
|
| ---------- unnecessary let binding
|
||||||
LL | x
|
LL | x
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::let-and-return` implied by `-D warnings`
|
= note: `-D clippy::let-and-return` implied by `-D warnings`
|
||||||
note: this expression can be directly returned
|
help: return the expression directly
|
||||||
--> $DIR/matches.rs:8:21
|
|
|
||||||
|
LL |
|
||||||
|
LL | 3
|
||||||
|
|
|
|
||||||
LL | let x = 3;
|
|
||||||
| ^
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,30 @@
|
||||||
error: returning the result of a let binding from a block. Consider returning the expression directly.
|
error: returning the result of a let binding from a block
|
||||||
--> $DIR/let_return.rs:7:5
|
--> $DIR/let_return.rs:7:5
|
||||||
|
|
|
|
||||||
|
LL | let x = 5;
|
||||||
|
| ---------- unnecessary let binding
|
||||||
LL | x
|
LL | x
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::let-and-return` implied by `-D warnings`
|
= note: `-D clippy::let-and-return` implied by `-D warnings`
|
||||||
note: this expression can be directly returned
|
help: return the expression directly
|
||||||
--> $DIR/let_return.rs:6:13
|
|
|
||||||
|
LL |
|
||||||
|
LL | 5
|
||||||
|
|
|
|
||||||
LL | let x = 5;
|
|
||||||
| ^
|
|
||||||
|
|
||||||
error: returning the result of a let binding from a block. Consider returning the expression directly.
|
error: returning the result of a let binding from a block
|
||||||
--> $DIR/let_return.rs:13:9
|
--> $DIR/let_return.rs:13:9
|
||||||
|
|
|
|
||||||
|
LL | let x = 5;
|
||||||
|
| ---------- unnecessary let binding
|
||||||
LL | x
|
LL | x
|
||||||
| ^
|
| ^
|
||||||
|
help: return the expression directly
|
||||||
|
|
|
|
||||||
note: this expression can be directly returned
|
LL |
|
||||||
--> $DIR/let_return.rs:12:17
|
LL | 5
|
||||||
|
|
|
|
||||||
LL | let x = 5;
|
|
||||||
| ^
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue