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:
Alejandra González 2025-05-16 14:24:58 +00:00 committed by GitHub
commit 5239b7fa2c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 58 deletions

View file

@ -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,