about summary refs log tree commit diff
diff options
context:
space:
mode:
authorShotaro Yamada <sinkuu@sinkuu.xyz>2018-12-11 23:21:25 +0900
committerShotaro Yamada <yamada@ccs.ee.tut.ac.jp>2018-12-12 17:41:51 +0900
commit28635ff04be246a0e2d5bcec25b229f17b4f5974 (patch)
treee806b18d95bba0c4c96ca7195f3eda99a3f0e5b4
parent05d07155b72d39d447bff1f5c1e8fb13a1eecd31 (diff)
downloadrust-28635ff04be246a0e2d5bcec25b229f17b4f5974.tar.gz
rust-28635ff04be246a0e2d5bcec25b229f17b4f5974.zip
question_mark: Lint only early returns
-rw-r--r--clippy_lints/src/question_mark.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/clippy_lints/src/question_mark.rs b/clippy_lints/src/question_mark.rs
index 21f22f151dd..61178ccdd56 100644
--- a/clippy_lints/src/question_mark.rs
+++ b/clippy_lints/src/question_mark.rs
@@ -133,9 +133,13 @@ impl Pass {
             }
         }
 
-        // Check if the block has an implicit return expression
-        if let Some(ref ret_expr) = block.expr {
-            return Some(ret_expr.clone());
+        // Check for `return` without a semicolon.
+        if_chain! {
+            if block.stmts.len() == 0;
+            if let Some(ExprKind::Ret(Some(ret_expr))) = block.expr.as_ref().map(|e| &e.node);
+            then {
+                return Some(ret_expr.clone());
+            }
         }
 
         None