Auto merge of #13464 - y21:issue13458, r=flip1995
Don't warn on proc macro generated code in `needless_return` Fixes #13458 Fixes #13457 Fixes #13467 Fixes #13479 Fixes #13481 Fixes #13526 Fixes #13486 The fix is unfortunately a little more convoluted than just simply adding a `is_from_proc_macro`. That check *does* fix the issue, however it also introduces a bunch of false negatives in the tests, specifically when the returned expression is in a different syntax context, e.g. `return format!(..)`. The proc macro check builds up a start and end pattern based on the HIR nodes and compares it to a snippet of the span, however that would currently fail for `return format!(..)` because we would have the patterns `("return", <something inside of the format macro>)`, which doesn't compare equal. So we now return an empty string pattern for when it's in a different syntax context. "Hide whitespace" helps a bit for reviewing the proc macro detection change changelog: none
This commit is contained in:
parent
df1b5d3cc2
commit
a21a9fe332
@ -407,7 +407,7 @@ fn check_final_expr<'tcx>(
|
||||
}
|
||||
}
|
||||
|
||||
if ret_span.from_expansion() {
|
||||
if ret_span.from_expansion() || is_from_proc_macro(cx, expr) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -141,62 +141,89 @@ fn path_search_pat(path: &Path<'_>) -> (Pat, Pat) {
|
||||
|
||||
/// Get the search patterns to use for the given expression
|
||||
fn expr_search_pat(tcx: TyCtxt<'_>, e: &Expr<'_>) -> (Pat, Pat) {
|
||||
match e.kind {
|
||||
ExprKind::ConstBlock(_) => (Pat::Str("const"), Pat::Str("}")),
|
||||
// Parenthesis are trimmed from the text before the search patterns are matched.
|
||||
// See: `span_matches_pat`
|
||||
ExprKind::Tup([]) => (Pat::Str(")"), Pat::Str("(")),
|
||||
ExprKind::Unary(UnOp::Deref, e) => (Pat::Str("*"), expr_search_pat(tcx, e).1),
|
||||
ExprKind::Unary(UnOp::Not, e) => (Pat::Str("!"), expr_search_pat(tcx, e).1),
|
||||
ExprKind::Unary(UnOp::Neg, e) => (Pat::Str("-"), expr_search_pat(tcx, e).1),
|
||||
ExprKind::Lit(lit) => lit_search_pat(&lit.node),
|
||||
ExprKind::Array(_) | ExprKind::Repeat(..) => (Pat::Str("["), Pat::Str("]")),
|
||||
ExprKind::Call(e, []) | ExprKind::MethodCall(_, e, [], _) => (expr_search_pat(tcx, e).0, Pat::Str("(")),
|
||||
ExprKind::Call(first, [.., last])
|
||||
| ExprKind::MethodCall(_, first, [.., last], _)
|
||||
| ExprKind::Binary(_, first, last)
|
||||
| ExprKind::Tup([first, .., last])
|
||||
| ExprKind::Assign(first, last, _)
|
||||
| ExprKind::AssignOp(_, first, last) => (expr_search_pat(tcx, first).0, expr_search_pat(tcx, last).1),
|
||||
ExprKind::Tup([e]) | ExprKind::DropTemps(e) => expr_search_pat(tcx, e),
|
||||
ExprKind::Cast(e, _) | ExprKind::Type(e, _) => (expr_search_pat(tcx, e).0, Pat::Str("")),
|
||||
ExprKind::Let(let_expr) => (Pat::Str("let"), expr_search_pat(tcx, let_expr.init).1),
|
||||
ExprKind::If(..) => (Pat::Str("if"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, Some(_), _, _) | ExprKind::Block(_, Some(_)) => (Pat::Str("'"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, None, LoopSource::Loop, _) => (Pat::Str("loop"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, None, LoopSource::While, _) => (Pat::Str("while"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, None, LoopSource::ForLoop, _) | ExprKind::Match(_, _, MatchSource::ForLoopDesugar) => {
|
||||
(Pat::Str("for"), Pat::Str("}"))
|
||||
},
|
||||
ExprKind::Match(_, _, MatchSource::Normal) => (Pat::Str("match"), Pat::Str("}")),
|
||||
ExprKind::Match(e, _, MatchSource::TryDesugar(_)) => (expr_search_pat(tcx, e).0, Pat::Str("?")),
|
||||
ExprKind::Match(e, _, MatchSource::AwaitDesugar) | ExprKind::Yield(e, YieldSource::Await { .. }) => {
|
||||
(expr_search_pat(tcx, e).0, Pat::Str("await"))
|
||||
},
|
||||
ExprKind::Closure(&Closure { body, .. }) => (Pat::Str(""), expr_search_pat(tcx, tcx.hir().body(body).value).1),
|
||||
ExprKind::Block(
|
||||
Block {
|
||||
rules: BlockCheckMode::UnsafeBlock(UnsafeSource::UserProvided),
|
||||
..
|
||||
fn expr_search_pat_inner(tcx: TyCtxt<'_>, e: &Expr<'_>, outer_span: Span) -> (Pat, Pat) {
|
||||
// The expression can have subexpressions in different contexts, in which case
|
||||
// building up a search pattern from the macro expansion would lead to false positives;
|
||||
// e.g. `return format!(..)` would be considered to be from a proc macro
|
||||
// if we build up a pattern for the macro expansion and compare it to the invocation `format!()`.
|
||||
// So instead we return an empty pattern such that `span_matches_pat` always returns true.
|
||||
if !e.span.eq_ctxt(outer_span) {
|
||||
return (Pat::Str(""), Pat::Str(""));
|
||||
}
|
||||
|
||||
match e.kind {
|
||||
ExprKind::ConstBlock(_) => (Pat::Str("const"), Pat::Str("}")),
|
||||
// Parenthesis are trimmed from the text before the search patterns are matched.
|
||||
// See: `span_matches_pat`
|
||||
ExprKind::Tup([]) => (Pat::Str(")"), Pat::Str("(")),
|
||||
ExprKind::Unary(UnOp::Deref, e) => (Pat::Str("*"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
ExprKind::Unary(UnOp::Not, e) => (Pat::Str("!"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
ExprKind::Unary(UnOp::Neg, e) => (Pat::Str("-"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
ExprKind::Lit(lit) => lit_search_pat(&lit.node),
|
||||
ExprKind::Array(_) | ExprKind::Repeat(..) => (Pat::Str("["), Pat::Str("]")),
|
||||
ExprKind::Call(e, []) | ExprKind::MethodCall(_, e, [], _) => {
|
||||
(expr_search_pat_inner(tcx, e, outer_span).0, Pat::Str("("))
|
||||
},
|
||||
None,
|
||||
) => (Pat::Str("unsafe"), Pat::Str("}")),
|
||||
ExprKind::Block(_, None) => (Pat::Str("{"), Pat::Str("}")),
|
||||
ExprKind::Field(e, name) => (expr_search_pat(tcx, e).0, Pat::Sym(name.name)),
|
||||
ExprKind::Index(e, _, _) => (expr_search_pat(tcx, e).0, Pat::Str("]")),
|
||||
ExprKind::Path(ref path) => qpath_search_pat(path),
|
||||
ExprKind::AddrOf(_, _, e) => (Pat::Str("&"), expr_search_pat(tcx, e).1),
|
||||
ExprKind::Break(Destination { label: None, .. }, None) => (Pat::Str("break"), Pat::Str("break")),
|
||||
ExprKind::Break(Destination { label: Some(name), .. }, None) => (Pat::Str("break"), Pat::Sym(name.ident.name)),
|
||||
ExprKind::Break(_, Some(e)) => (Pat::Str("break"), expr_search_pat(tcx, e).1),
|
||||
ExprKind::Continue(Destination { label: None, .. }) => (Pat::Str("continue"), Pat::Str("continue")),
|
||||
ExprKind::Continue(Destination { label: Some(name), .. }) => (Pat::Str("continue"), Pat::Sym(name.ident.name)),
|
||||
ExprKind::Ret(None) => (Pat::Str("return"), Pat::Str("return")),
|
||||
ExprKind::Ret(Some(e)) => (Pat::Str("return"), expr_search_pat(tcx, e).1),
|
||||
ExprKind::Struct(path, _, _) => (qpath_search_pat(path).0, Pat::Str("}")),
|
||||
ExprKind::Yield(e, YieldSource::Yield) => (Pat::Str("yield"), expr_search_pat(tcx, e).1),
|
||||
_ => (Pat::Str(""), Pat::Str("")),
|
||||
ExprKind::Call(first, [.., last])
|
||||
| ExprKind::MethodCall(_, first, [.., last], _)
|
||||
| ExprKind::Binary(_, first, last)
|
||||
| ExprKind::Tup([first, .., last])
|
||||
| ExprKind::Assign(first, last, _)
|
||||
| ExprKind::AssignOp(_, first, last) => (
|
||||
expr_search_pat_inner(tcx, first, outer_span).0,
|
||||
expr_search_pat_inner(tcx, last, outer_span).1,
|
||||
),
|
||||
ExprKind::Tup([e]) | ExprKind::DropTemps(e) => expr_search_pat_inner(tcx, e, outer_span),
|
||||
ExprKind::Cast(e, _) | ExprKind::Type(e, _) => (expr_search_pat_inner(tcx, e, outer_span).0, Pat::Str("")),
|
||||
ExprKind::Let(let_expr) => (Pat::Str("let"), expr_search_pat_inner(tcx, let_expr.init, outer_span).1),
|
||||
ExprKind::If(..) => (Pat::Str("if"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, Some(_), _, _) | ExprKind::Block(_, Some(_)) => (Pat::Str("'"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, None, LoopSource::Loop, _) => (Pat::Str("loop"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, None, LoopSource::While, _) => (Pat::Str("while"), Pat::Str("}")),
|
||||
ExprKind::Loop(_, None, LoopSource::ForLoop, _) | ExprKind::Match(_, _, MatchSource::ForLoopDesugar) => {
|
||||
(Pat::Str("for"), Pat::Str("}"))
|
||||
},
|
||||
ExprKind::Match(_, _, MatchSource::Normal) => (Pat::Str("match"), Pat::Str("}")),
|
||||
ExprKind::Match(e, _, MatchSource::TryDesugar(_)) => {
|
||||
(expr_search_pat_inner(tcx, e, outer_span).0, Pat::Str("?"))
|
||||
},
|
||||
ExprKind::Match(e, _, MatchSource::AwaitDesugar) | ExprKind::Yield(e, YieldSource::Await { .. }) => {
|
||||
(expr_search_pat_inner(tcx, e, outer_span).0, Pat::Str("await"))
|
||||
},
|
||||
ExprKind::Closure(&Closure { body, .. }) => (
|
||||
Pat::Str(""),
|
||||
expr_search_pat_inner(tcx, tcx.hir().body(body).value, outer_span).1,
|
||||
),
|
||||
ExprKind::Block(
|
||||
Block {
|
||||
rules: BlockCheckMode::UnsafeBlock(UnsafeSource::UserProvided),
|
||||
..
|
||||
},
|
||||
None,
|
||||
) => (Pat::Str("unsafe"), Pat::Str("}")),
|
||||
ExprKind::Block(_, None) => (Pat::Str("{"), Pat::Str("}")),
|
||||
ExprKind::Field(e, name) => (expr_search_pat_inner(tcx, e, outer_span).0, Pat::Sym(name.name)),
|
||||
ExprKind::Index(e, _, _) => (expr_search_pat_inner(tcx, e, outer_span).0, Pat::Str("]")),
|
||||
ExprKind::Path(ref path) => qpath_search_pat(path),
|
||||
ExprKind::AddrOf(_, _, e) => (Pat::Str("&"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
ExprKind::Break(Destination { label: None, .. }, None) => (Pat::Str("break"), Pat::Str("break")),
|
||||
ExprKind::Break(Destination { label: Some(name), .. }, None) => {
|
||||
(Pat::Str("break"), Pat::Sym(name.ident.name))
|
||||
},
|
||||
ExprKind::Break(_, Some(e)) => (Pat::Str("break"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
ExprKind::Continue(Destination { label: None, .. }) => (Pat::Str("continue"), Pat::Str("continue")),
|
||||
ExprKind::Continue(Destination { label: Some(name), .. }) => {
|
||||
(Pat::Str("continue"), Pat::Sym(name.ident.name))
|
||||
},
|
||||
ExprKind::Ret(None) => (Pat::Str("return"), Pat::Str("return")),
|
||||
ExprKind::Ret(Some(e)) => (Pat::Str("return"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
ExprKind::Struct(path, _, _) => (qpath_search_pat(path).0, Pat::Str("}")),
|
||||
ExprKind::Yield(e, YieldSource::Yield) => (Pat::Str("yield"), expr_search_pat_inner(tcx, e, outer_span).1),
|
||||
_ => (Pat::Str(""), Pat::Str("")),
|
||||
}
|
||||
}
|
||||
|
||||
expr_search_pat_inner(tcx, e, e.span)
|
||||
}
|
||||
|
||||
fn fn_header_search_pat(header: FnHeader) -> Pat {
|
||||
|
@ -1,5 +1,5 @@
|
||||
#![warn(clippy::dbg_macro)]
|
||||
#![allow(clippy::unnecessary_operation, clippy::no_effect)]
|
||||
#![allow(clippy::unnecessary_operation, clippy::no_effect, clippy::unit_arg)]
|
||||
|
||||
fn foo(n: u32) -> u32 {
|
||||
if let Some(n) = n.checked_sub(4) { n } else { n }
|
||||
|
@ -1,5 +1,5 @@
|
||||
#![warn(clippy::dbg_macro)]
|
||||
#![allow(clippy::unnecessary_operation, clippy::no_effect)]
|
||||
#![allow(clippy::unnecessary_operation, clippy::no_effect, clippy::unit_arg)]
|
||||
|
||||
fn foo(n: u32) -> u32 {
|
||||
if let Some(n) = dbg!(n.checked_sub(4)) { n } else { n }
|
||||
|
@ -1,3 +1,4 @@
|
||||
//@aux-build:proc_macros.rs
|
||||
#![feature(yeet_expr)]
|
||||
#![allow(unused)]
|
||||
#![allow(
|
||||
@ -9,6 +10,9 @@
|
||||
)]
|
||||
#![warn(clippy::needless_return)]
|
||||
|
||||
extern crate proc_macros;
|
||||
use proc_macros::with_span;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
macro_rules! the_answer {
|
||||
@ -359,6 +363,10 @@ fn issue12907() -> String {
|
||||
"".split("").next().unwrap().to_string()
|
||||
}
|
||||
|
||||
fn issue13458() {
|
||||
with_span!(span return);
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
fn a(x: Option<u8>) -> Option<u8> {
|
||||
|
@ -1,3 +1,4 @@
|
||||
//@aux-build:proc_macros.rs
|
||||
#![feature(yeet_expr)]
|
||||
#![allow(unused)]
|
||||
#![allow(
|
||||
@ -9,6 +10,9 @@
|
||||
)]
|
||||
#![warn(clippy::needless_return)]
|
||||
|
||||
extern crate proc_macros;
|
||||
use proc_macros::with_span;
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
macro_rules! the_answer {
|
||||
@ -369,6 +373,10 @@ fn issue12907() -> String {
|
||||
return "".split("").next().unwrap().to_string();
|
||||
}
|
||||
|
||||
fn issue13458() {
|
||||
with_span!(span return);
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
fn a(x: Option<u8>) -> Option<u8> {
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:25:5
|
||||
--> tests/ui/needless_return.rs:29:5
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -13,7 +13,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:29:5
|
||||
--> tests/ui/needless_return.rs:33:5
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -25,7 +25,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:34:5
|
||||
--> tests/ui/needless_return.rs:38:5
|
||||
|
|
||||
LL | return true;;;
|
||||
| ^^^^^^^^^^^
|
||||
@ -37,7 +37,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:39:5
|
||||
--> tests/ui/needless_return.rs:43:5
|
||||
|
|
||||
LL | return true;; ; ;
|
||||
| ^^^^^^^^^^^
|
||||
@ -49,7 +49,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:44:9
|
||||
--> tests/ui/needless_return.rs:48:9
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -61,7 +61,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:46:9
|
||||
--> tests/ui/needless_return.rs:50:9
|
||||
|
|
||||
LL | return false;
|
||||
| ^^^^^^^^^^^^
|
||||
@ -73,7 +73,7 @@ LL + false
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:52:17
|
||||
--> tests/ui/needless_return.rs:56:17
|
||||
|
|
||||
LL | true => return false,
|
||||
| ^^^^^^^^^^^^
|
||||
@ -84,7 +84,7 @@ LL | true => false,
|
||||
| ~~~~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:54:13
|
||||
--> tests/ui/needless_return.rs:58:13
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -96,7 +96,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:61:9
|
||||
--> tests/ui/needless_return.rs:65:9
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -108,7 +108,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:63:16
|
||||
--> tests/ui/needless_return.rs:67:16
|
||||
|
|
||||
LL | let _ = || return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -119,7 +119,7 @@ LL | let _ = || true;
|
||||
| ~~~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:67:5
|
||||
--> tests/ui/needless_return.rs:71:5
|
||||
|
|
||||
LL | return the_answer!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -131,7 +131,7 @@ LL + the_answer!()
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:70:21
|
||||
--> tests/ui/needless_return.rs:74:21
|
||||
|
|
||||
LL | fn test_void_fun() {
|
||||
| _____________________^
|
||||
@ -146,7 +146,7 @@ LL + fn test_void_fun() {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:75:11
|
||||
--> tests/ui/needless_return.rs:79:11
|
||||
|
|
||||
LL | if b {
|
||||
| ___________^
|
||||
@ -161,7 +161,7 @@ LL + if b {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:77:13
|
||||
--> tests/ui/needless_return.rs:81:13
|
||||
|
|
||||
LL | } else {
|
||||
| _____________^
|
||||
@ -176,7 +176,7 @@ LL + } else {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:85:14
|
||||
--> tests/ui/needless_return.rs:89:14
|
||||
|
|
||||
LL | _ => return,
|
||||
| ^^^^^^
|
||||
@ -187,7 +187,7 @@ LL | _ => (),
|
||||
| ~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:93:24
|
||||
--> tests/ui/needless_return.rs:97:24
|
||||
|
|
||||
LL | let _ = 42;
|
||||
| ________________________^
|
||||
@ -202,7 +202,7 @@ LL + let _ = 42;
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:96:14
|
||||
--> tests/ui/needless_return.rs:100:14
|
||||
|
|
||||
LL | _ => return,
|
||||
| ^^^^^^
|
||||
@ -213,7 +213,7 @@ LL | _ => (),
|
||||
| ~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:109:9
|
||||
--> tests/ui/needless_return.rs:113:9
|
||||
|
|
||||
LL | return String::from("test");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -225,7 +225,7 @@ LL + String::from("test")
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:111:9
|
||||
--> tests/ui/needless_return.rs:115:9
|
||||
|
|
||||
LL | return String::new();
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -237,7 +237,7 @@ LL + String::new()
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:133:32
|
||||
--> tests/ui/needless_return.rs:137:32
|
||||
|
|
||||
LL | bar.unwrap_or_else(|_| return)
|
||||
| ^^^^^^
|
||||
@ -248,7 +248,7 @@ LL | bar.unwrap_or_else(|_| {})
|
||||
| ~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:137:21
|
||||
--> tests/ui/needless_return.rs:141:21
|
||||
|
|
||||
LL | let _ = || {
|
||||
| _____________________^
|
||||
@ -263,7 +263,7 @@ LL + let _ = || {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:140:20
|
||||
--> tests/ui/needless_return.rs:144:20
|
||||
|
|
||||
LL | let _ = || return;
|
||||
| ^^^^^^
|
||||
@ -274,7 +274,7 @@ LL | let _ = || {};
|
||||
| ~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:146:32
|
||||
--> tests/ui/needless_return.rs:150:32
|
||||
|
|
||||
LL | res.unwrap_or_else(|_| return Foo)
|
||||
| ^^^^^^^^^^
|
||||
@ -284,18 +284,6 @@ help: remove `return`
|
||||
LL | res.unwrap_or_else(|_| Foo)
|
||||
| ~~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:155:5
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
help: remove `return`
|
||||
|
|
||||
LL - return true;
|
||||
LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:159:5
|
||||
|
|
||||
@ -309,7 +297,19 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:164:9
|
||||
--> tests/ui/needless_return.rs:163:5
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
help: remove `return`
|
||||
|
|
||||
LL - return true;
|
||||
LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:168:9
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -321,7 +321,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:166:9
|
||||
--> tests/ui/needless_return.rs:170:9
|
||||
|
|
||||
LL | return false;
|
||||
| ^^^^^^^^^^^^
|
||||
@ -333,7 +333,7 @@ LL + false
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:172:17
|
||||
--> tests/ui/needless_return.rs:176:17
|
||||
|
|
||||
LL | true => return false,
|
||||
| ^^^^^^^^^^^^
|
||||
@ -344,7 +344,7 @@ LL | true => false,
|
||||
| ~~~~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:174:13
|
||||
--> tests/ui/needless_return.rs:178:13
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -356,7 +356,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:181:9
|
||||
--> tests/ui/needless_return.rs:185:9
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -368,7 +368,7 @@ LL + true
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:183:16
|
||||
--> tests/ui/needless_return.rs:187:16
|
||||
|
|
||||
LL | let _ = || return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -379,7 +379,7 @@ LL | let _ = || true;
|
||||
| ~~~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:187:5
|
||||
--> tests/ui/needless_return.rs:191:5
|
||||
|
|
||||
LL | return the_answer!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -391,7 +391,7 @@ LL + the_answer!()
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:190:33
|
||||
--> tests/ui/needless_return.rs:194:33
|
||||
|
|
||||
LL | async fn async_test_void_fun() {
|
||||
| _________________________________^
|
||||
@ -406,7 +406,7 @@ LL + async fn async_test_void_fun() {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:195:11
|
||||
--> tests/ui/needless_return.rs:199:11
|
||||
|
|
||||
LL | if b {
|
||||
| ___________^
|
||||
@ -421,7 +421,7 @@ LL + if b {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:197:13
|
||||
--> tests/ui/needless_return.rs:201:13
|
||||
|
|
||||
LL | } else {
|
||||
| _____________^
|
||||
@ -436,7 +436,7 @@ LL + } else {
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:205:14
|
||||
--> tests/ui/needless_return.rs:209:14
|
||||
|
|
||||
LL | _ => return,
|
||||
| ^^^^^^
|
||||
@ -447,7 +447,7 @@ LL | _ => (),
|
||||
| ~~
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:218:9
|
||||
--> tests/ui/needless_return.rs:222:9
|
||||
|
|
||||
LL | return String::from("test");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -459,7 +459,7 @@ LL + String::from("test")
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:220:9
|
||||
--> tests/ui/needless_return.rs:224:9
|
||||
|
|
||||
LL | return String::new();
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -471,7 +471,7 @@ LL + String::new()
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:236:5
|
||||
--> tests/ui/needless_return.rs:240:5
|
||||
|
|
||||
LL | return format!("Hello {}", "world!");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -483,7 +483,7 @@ LL + format!("Hello {}", "world!")
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:277:9
|
||||
--> tests/ui/needless_return.rs:281:9
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
@ -497,7 +497,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:279:9
|
||||
--> tests/ui/needless_return.rs:283:9
|
||||
|
|
||||
LL | return false;
|
||||
| ^^^^^^^^^^^^
|
||||
@ -509,7 +509,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:286:13
|
||||
--> tests/ui/needless_return.rs:290:13
|
||||
|
|
||||
LL | return 10;
|
||||
| ^^^^^^^^^
|
||||
@ -524,7 +524,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:289:13
|
||||
--> tests/ui/needless_return.rs:293:13
|
||||
|
|
||||
LL | return 100;
|
||||
| ^^^^^^^^^^
|
||||
@ -537,7 +537,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:297:9
|
||||
--> tests/ui/needless_return.rs:301:9
|
||||
|
|
||||
LL | return 0;
|
||||
| ^^^^^^^^
|
||||
@ -549,7 +549,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:304:13
|
||||
--> tests/ui/needless_return.rs:308:13
|
||||
|
|
||||
LL | return *(x as *const isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -564,7 +564,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:306:13
|
||||
--> tests/ui/needless_return.rs:310:13
|
||||
|
|
||||
LL | return !*(x as *const isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -577,7 +577,7 @@ LL ~ }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:313:20
|
||||
--> tests/ui/needless_return.rs:317:20
|
||||
|
|
||||
LL | let _ = 42;
|
||||
| ____________________^
|
||||
@ -594,7 +594,7 @@ LL + let _ = 42;
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:320:20
|
||||
--> tests/ui/needless_return.rs:324:20
|
||||
|
|
||||
LL | let _ = 42; return;
|
||||
| ^^^^^^^
|
||||
@ -606,7 +606,7 @@ LL + let _ = 42;
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:332:9
|
||||
--> tests/ui/needless_return.rs:336:9
|
||||
|
|
||||
LL | return Ok(format!("ok!"));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -618,7 +618,7 @@ LL + Ok(format!("ok!"))
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:334:9
|
||||
--> tests/ui/needless_return.rs:338:9
|
||||
|
|
||||
LL | return Err(format!("err!"));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -630,7 +630,7 @@ LL + Err(format!("err!"))
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:340:9
|
||||
--> tests/ui/needless_return.rs:344:9
|
||||
|
|
||||
LL | return if true { 1 } else { 2 };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -642,7 +642,7 @@ LL + if true { 1 } else { 2 }
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:344:9
|
||||
--> tests/ui/needless_return.rs:348:9
|
||||
|
|
||||
LL | return if b1 { 0 } else { 1 } | if b2 { 2 } else { 3 } | if b3 { 4 } else { 5 };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -654,7 +654,7 @@ LL + (if b1 { 0 } else { 1 } | if b2 { 2 } else { 3 } | if b3 { 4 } else
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:365:5
|
||||
--> tests/ui/needless_return.rs:369:5
|
||||
|
|
||||
LL | return { "a".to_string() } + "b" + { "c" };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -666,7 +666,7 @@ LL + ({ "a".to_string() } + "b" + { "c" })
|
||||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:369:5
|
||||
--> tests/ui/needless_return.rs:373:5
|
||||
|
|
||||
LL | return "".split("").next().unwrap().to_string();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
Loading…
Reference in New Issue
Block a user