mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Split lint suggestion into two
This commit is contained in:
parent
a433d4690e
commit
cdb72df6f9
@ -68,10 +68,10 @@ impl<'tcx> LateLintPass<'tcx> for UnnecessaryWrap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let path = if is_type_diagnostic_item(cx, return_ty(cx, hir_id), sym!(option_type)) {
|
let (return_type, path) = if is_type_diagnostic_item(cx, return_ty(cx, hir_id), sym!(option_type)) {
|
||||||
&paths::OPTION_SOME
|
("Option", &paths::OPTION_SOME)
|
||||||
} else if is_type_diagnostic_item(cx, return_ty(cx, hir_id), sym!(result_type)) {
|
} else if is_type_diagnostic_item(cx, return_ty(cx, hir_id), sym!(result_type)) {
|
||||||
&paths::RESULT_OK
|
("Result", &paths::RESULT_OK)
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
@ -98,23 +98,26 @@ impl<'tcx> LateLintPass<'tcx> for UnnecessaryWrap {
|
|||||||
UNNECESSARY_WRAP,
|
UNNECESSARY_WRAP,
|
||||||
span,
|
span,
|
||||||
"this function returns unnecessarily wrapping data",
|
"this function returns unnecessarily wrapping data",
|
||||||
move |diag| {
|
|diag| {
|
||||||
|
let inner_ty = return_ty(cx, hir_id)
|
||||||
|
.walk()
|
||||||
|
.skip(1) // skip `std::option::Option` or `std::result::Result`
|
||||||
|
.take(1) // take the first outermost inner type
|
||||||
|
.filter_map(|inner| match inner.unpack() {
|
||||||
|
GenericArgKind::Type(inner_ty) => Some(inner_ty.to_string()),
|
||||||
|
_ => None,
|
||||||
|
});
|
||||||
|
inner_ty.for_each(|inner_ty| {
|
||||||
|
diag.span_suggestion(
|
||||||
|
fn_decl.output.span(),
|
||||||
|
format!("remove `{}` from the return type...", return_type).as_str(),
|
||||||
|
inner_ty,
|
||||||
|
Applicability::MachineApplicable,
|
||||||
|
);
|
||||||
|
});
|
||||||
diag.multipart_suggestion(
|
diag.multipart_suggestion(
|
||||||
"factor this out to",
|
"...and change the returning expressions",
|
||||||
suggs
|
suggs,
|
||||||
.into_iter()
|
|
||||||
.chain({
|
|
||||||
let inner_ty = return_ty(cx, hir_id)
|
|
||||||
.walk()
|
|
||||||
.skip(1) // skip `std::option::Option` or `std::result::Result`
|
|
||||||
.take(1) // take the first outermost inner type
|
|
||||||
.filter_map(|inner| match inner.unpack() {
|
|
||||||
GenericArgKind::Type(inner_ty) => Some(inner_ty.to_string()),
|
|
||||||
_ => None,
|
|
||||||
});
|
|
||||||
inner_ty.map(|inner_ty| (fn_decl.output.span(), inner_ty))
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -11,14 +11,18 @@ LL | | }
|
|||||||
| |_^
|
| |_^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::unnecessary-wrap` implied by `-D warnings`
|
= note: `-D clippy::unnecessary-wrap` implied by `-D warnings`
|
||||||
help: factor this out to
|
help: remove `Option` from the return type...
|
||||||
|
|
|
|
||||||
LL | fn func1(a: bool, b: bool) -> i32 {
|
LL | fn func1(a: bool, b: bool) -> i32 {
|
||||||
LL | if a && b {
|
| ^^^
|
||||||
|
help: ...and change the returning expressions
|
||||||
|
|
|
||||||
LL | return 42;
|
LL | return 42;
|
||||||
LL | }
|
LL | }
|
||||||
LL | if a {
|
LL | if a {
|
||||||
LL | Some(-1);
|
LL | Some(-1);
|
||||||
|
LL | 2
|
||||||
|
LL | } else {
|
||||||
...
|
...
|
||||||
|
|
||||||
error: this function returns unnecessarily wrapping data
|
error: this function returns unnecessarily wrapping data
|
||||||
@ -29,9 +33,12 @@ LL | | Some(1)
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_^
|
| |_^
|
||||||
|
|
|
|
||||||
help: factor this out to
|
help: remove `Option` from the return type...
|
||||||
|
|
|
|
||||||
LL | fn func4() -> i32 {
|
LL | fn func4() -> i32 {
|
||||||
|
| ^^^
|
||||||
|
help: ...and change the returning expressions
|
||||||
|
|
|
||||||
LL | 1
|
LL | 1
|
||||||
|
|
|
|
||||||
|
|
||||||
@ -43,9 +50,12 @@ LL | | Ok(1)
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_^
|
| |_^
|
||||||
|
|
|
|
||||||
help: factor this out to
|
help: remove `Result` from the return type...
|
||||||
|
|
|
|
||||||
LL | fn func6() -> i32 {
|
LL | fn func6() -> i32 {
|
||||||
|
| ^^^
|
||||||
|
help: ...and change the returning expressions
|
||||||
|
|
|
||||||
LL | 1
|
LL | 1
|
||||||
|
|
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user