about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilipp Hansch <dev@phansch.net>2018-12-06 14:13:20 +0100
committerGitHub <noreply@github.com>2018-12-06 14:13:20 +0100
commitc4ef06a9b6ab1eecac106bf2d72c95209687d57a (patch)
tree1f9542850f16ac096cd7056945e1f12c3fd6be0f
parent0fb30218d522d7661d7e4ea46bf8864a99143982 (diff)
parenta4ec7be06fc3406bca536340a4073a9159d36e45 (diff)
downloadrust-c4ef06a9b6ab1eecac106bf2d72c95209687d57a.tar.gz
rust-c4ef06a9b6ab1eecac106bf2d72c95209687d57a.zip
Merge pull request #3497 from daxpedda/master
Fix bug in `implicit_return`.
-rw-r--r--clippy_lints/src/implicit_return.rs9
-rw-r--r--tests/ui/implicit_return.stderr8
2 files changed, 9 insertions, 8 deletions
diff --git a/clippy_lints/src/implicit_return.rs b/clippy_lints/src/implicit_return.rs
index 664f182c533..07a849469fd 100644
--- a/clippy_lints/src/implicit_return.rs
+++ b/clippy_lints/src/implicit_return.rs
@@ -47,7 +47,8 @@ pub struct Pass;
 impl Pass {
     fn expr_match(cx: &LateContext<'_, '_>, expr: &rustc::hir::Expr) {
         match &expr.node {
-            ExprKind::Block(block, ..) => {
+            // loops could be using `break` instead of `return`
+            ExprKind::Block(block, ..) | ExprKind::Loop(block, ..) => {
                 if let Some(expr) = &block.expr {
                     Self::expr_match(cx, expr);
                 }
@@ -85,12 +86,6 @@ impl Pass {
                     Self::expr_match(cx, &arm.body);
                 }
             },
-            // loops could be using `break` instead of `return`
-            ExprKind::Loop(block, ..) => {
-                if let Some(expr) = &block.expr {
-                    Self::expr_match(cx, expr);
-                }
-            },
             // skip if it already has a return statement
             ExprKind::Ret(..) => (),
             // everything else is missing `return`
diff --git a/tests/ui/implicit_return.stderr b/tests/ui/implicit_return.stderr
index bba8d942e27..6f4fe12757a 100644
--- a/tests/ui/implicit_return.stderr
+++ b/tests/ui/implicit_return.stderr
@@ -31,6 +31,12 @@ error: missing return statement
    |             ^^^^ help: add `return` as shown: `return true`
 
 error: missing return statement
+  --> $DIR/implicit_return.rs:46:9
+   |
+46 |         break true;
+   |         ^^^^^^^^^^ help: change `break` to `return` as shown: `return true`
+
+error: missing return statement
   --> $DIR/implicit_return.rs:52:9
    |
 52 |         true
@@ -42,5 +48,5 @@ error: missing return statement
 54 |     let _ = || true;
    |                ^^^^ help: add `return` as shown: `return true`
 
-error: aborting due to 7 previous errors
+error: aborting due to 8 previous errors