unnecessary_wraps: do not include the whole body in the lint span (#14777)
Using the function declaration, by stripping the body, is enough to convey the lint message. changelog: [`unnecessary_wraps`]: do not include the whole body in the lint span Closes rust-lang/rust-clippy#14773
This commit is contained in:
commit
5239b7fa2c
2 changed files with 30 additions and 58 deletions
|
|
@ -1,3 +1,5 @@
|
|||
use std::borrow::Cow;
|
||||
|
||||
use clippy_config::Conf;
|
||||
use clippy_utils::diagnostics::span_lint_and_then;
|
||||
use clippy_utils::source::snippet;
|
||||
|
|
@ -78,7 +80,7 @@ impl<'tcx> LateLintPass<'tcx> for UnnecessaryWraps {
|
|||
fn_kind: FnKind<'tcx>,
|
||||
fn_decl: &FnDecl<'tcx>,
|
||||
body: &Body<'tcx>,
|
||||
span: Span,
|
||||
_span: Span,
|
||||
def_id: LocalDefId,
|
||||
) {
|
||||
// Abort if public function/method or closure.
|
||||
|
|
@ -147,19 +149,22 @@ impl<'tcx> LateLintPass<'tcx> for UnnecessaryWraps {
|
|||
"remove the return type...".to_string(),
|
||||
// FIXME: we should instead get the span including the `->` and suggest an
|
||||
// empty string for this case.
|
||||
"()".to_string(),
|
||||
"...and then remove returned values",
|
||||
Cow::Borrowed("()"),
|
||||
Cow::Borrowed("...and then remove returned values"),
|
||||
)
|
||||
} else {
|
||||
let wrapper = if lang_item == OptionSome { "Some" } else { "Ok" };
|
||||
(
|
||||
format!("this function's return value is unnecessarily wrapped by `{return_type_label}`"),
|
||||
format!("remove `{return_type_label}` from the return type..."),
|
||||
inner_type.to_string(),
|
||||
"...and then change returning expressions",
|
||||
Cow::Owned(inner_type.to_string()),
|
||||
Cow::Owned(format!(
|
||||
"...and then remove the surrounding `{wrapper}()` from returning expressions"
|
||||
)),
|
||||
)
|
||||
};
|
||||
|
||||
span_lint_and_then(cx, UNNECESSARY_WRAPS, span, lint_msg, |diag| {
|
||||
span_lint_and_then(cx, UNNECESSARY_WRAPS, cx.tcx.def_span(def_id), lint_msg, |diag| {
|
||||
diag.span_suggestion(
|
||||
fn_decl.output.span(),
|
||||
return_type_sugg_msg,
|
||||
|
|
|
|||
|
|
@ -1,13 +1,8 @@
|
|||
error: this function's return value is unnecessarily wrapped by `Option`
|
||||
--> tests/ui/unnecessary_wraps.rs:9:1
|
||||
|
|
||||
LL | / fn func1(a: bool, b: bool) -> Option<i32> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | if a && b {
|
||||
... |
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | fn func1(a: bool, b: bool) -> Option<i32> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::unnecessary-wraps` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_wraps)]`
|
||||
|
|
@ -16,7 +11,7 @@ help: remove `Option` from the return type...
|
|||
LL - fn func1(a: bool, b: bool) -> Option<i32> {
|
||||
LL + fn func1(a: bool, b: bool) -> i32 {
|
||||
|
|
||||
help: ...and then change returning expressions
|
||||
help: ...and then remove the surrounding `Some()` from returning expressions
|
||||
|
|
||||
LL ~ return 42;
|
||||
LL | }
|
||||
|
|
@ -30,21 +25,15 @@ LL ~ return 1337;
|
|||
error: this function's return value is unnecessarily wrapped by `Option`
|
||||
--> tests/ui/unnecessary_wraps.rs:24:1
|
||||
|
|
||||
LL | / fn func2(a: bool, b: bool) -> Option<i32> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | if a && b {
|
||||
... |
|
||||
LL | | if a { Some(20) } else { Some(30) }
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | fn func2(a: bool, b: bool) -> Option<i32> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: remove `Option` from the return type...
|
||||
|
|
||||
LL - fn func2(a: bool, b: bool) -> Option<i32> {
|
||||
LL + fn func2(a: bool, b: bool) -> i32 {
|
||||
|
|
||||
help: ...and then change returning expressions
|
||||
help: ...and then remove the surrounding `Some()` from returning expressions
|
||||
|
|
||||
LL ~ return 10;
|
||||
LL | }
|
||||
|
|
@ -54,19 +43,15 @@ LL ~ if a { 20 } else { 30 }
|
|||
error: this function's return value is unnecessarily wrapped by `Option`
|
||||
--> tests/ui/unnecessary_wraps.rs:44:1
|
||||
|
|
||||
LL | / fn func5() -> Option<i32> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | Some(1)
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | fn func5() -> Option<i32> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: remove `Option` from the return type...
|
||||
|
|
||||
LL - fn func5() -> Option<i32> {
|
||||
LL + fn func5() -> i32 {
|
||||
|
|
||||
help: ...and then change returning expressions
|
||||
help: ...and then remove the surrounding `Some()` from returning expressions
|
||||
|
|
||||
LL - Some(1)
|
||||
LL + 1
|
||||
|
|
@ -75,19 +60,15 @@ LL + 1
|
|||
error: this function's return value is unnecessarily wrapped by `Result`
|
||||
--> tests/ui/unnecessary_wraps.rs:56:1
|
||||
|
|
||||
LL | / fn func7() -> Result<i32, ()> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | Ok(1)
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | fn func7() -> Result<i32, ()> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: remove `Result` from the return type...
|
||||
|
|
||||
LL - fn func7() -> Result<i32, ()> {
|
||||
LL + fn func7() -> i32 {
|
||||
|
|
||||
help: ...and then change returning expressions
|
||||
help: ...and then remove the surrounding `Ok()` from returning expressions
|
||||
|
|
||||
LL - Ok(1)
|
||||
LL + 1
|
||||
|
|
@ -96,19 +77,15 @@ LL + 1
|
|||
error: this function's return value is unnecessarily wrapped by `Option`
|
||||
--> tests/ui/unnecessary_wraps.rs:86:5
|
||||
|
|
||||
LL | / fn func12() -> Option<i32> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | Some(1)
|
||||
LL | | }
|
||||
| |_____^
|
||||
LL | fn func12() -> Option<i32> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: remove `Option` from the return type...
|
||||
|
|
||||
LL - fn func12() -> Option<i32> {
|
||||
LL + fn func12() -> i32 {
|
||||
|
|
||||
help: ...and then change returning expressions
|
||||
help: ...and then remove the surrounding `Some()` from returning expressions
|
||||
|
|
||||
LL - Some(1)
|
||||
LL + 1
|
||||
|
|
@ -117,13 +94,8 @@ LL + 1
|
|||
error: this function's return value is unnecessary
|
||||
--> tests/ui/unnecessary_wraps.rs:115:1
|
||||
|
|
||||
LL | / fn issue_6640_1(a: bool, b: bool) -> Option<()> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | if a && b {
|
||||
... |
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | fn issue_6640_1(a: bool, b: bool) -> Option<()> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: remove the return type...
|
||||
|
|
||||
|
|
@ -144,13 +116,8 @@ LL ~ return ;
|
|||
error: this function's return value is unnecessary
|
||||
--> tests/ui/unnecessary_wraps.rs:130:1
|
||||
|
|
||||
LL | / fn issue_6640_2(a: bool, b: bool) -> Result<(), i32> {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | if a && b {
|
||||
... |
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | fn issue_6640_2(a: bool, b: bool) -> Result<(), i32> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: remove the return type...
|
||||
|
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue