Skip to content

Commit

Permalink
Auto merge of #7955 - dswij:let-else-early-return, r=giraffate
Browse files Browse the repository at this point in the history
Fix `semicolon_if_nothing_returned` FP on `let-else` stmts

closes #7912

`semicolon_if_nothing_returned` now additionally checks if the statements ends in `;` , this will also prevent `let-else` statements to be linted.

changelog: fix [`semicolon_if_nothing_returned`] FP  firing on `let-else`
  • Loading branch information
bors committed Nov 10, 2021
2 parents 93f13d5 + a003ca6 commit 2e17035
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
2 changes: 1 addition & 1 deletion clippy_lints/src/semicolon_if_nothing_returned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ impl LateLintPass<'_> for SemicolonIfNothingReturned {
let t_expr = cx.typeck_results().expr_ty(expr);
if t_expr.is_unit();
if let snippet = snippet_with_macro_callsite(cx, expr.span, "}");
if !snippet.ends_with('}');
if !snippet.ends_with('}') && !snippet.ends_with(';');
if cx.sess().source_map().is_multiline(block.span);
then {
// filter out the desugared `for` loop
Expand Down
10 changes: 10 additions & 0 deletions tests/ui/semicolon_if_nothing_returned.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#![warn(clippy::semicolon_if_nothing_returned)]
#![allow(clippy::redundant_closure)]
#![feature(label_break_value)]
#![feature(let_else)]

fn get_unit() {}

Expand Down Expand Up @@ -110,3 +111,12 @@ fn macro_with_semicolon() {
}
repro!();
}

fn function_returning_option() -> Option<i32> {
Some(1)
}

// No warning
fn let_else_stmts() {
let Some(x) = function_returning_option() else { return; };
}
10 changes: 5 additions & 5 deletions tests/ui/semicolon_if_nothing_returned.stderr
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:9:5
--> $DIR/semicolon_if_nothing_returned.rs:10:5
|
LL | println!("Hello")
| ^^^^^^^^^^^^^^^^^ help: add a `;` here: `println!("Hello");`
|
= note: `-D clippy::semicolon-if-nothing-returned` implied by `-D warnings`

error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:13:5
--> $DIR/semicolon_if_nothing_returned.rs:14:5
|
LL | get_unit()
| ^^^^^^^^^^ help: add a `;` here: `get_unit();`

error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:18:5
--> $DIR/semicolon_if_nothing_returned.rs:19:5
|
LL | y = x + 1
| ^^^^^^^^^ help: add a `;` here: `y = x + 1;`

error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:24:9
--> $DIR/semicolon_if_nothing_returned.rs:25:9
|
LL | hello()
| ^^^^^^^ help: add a `;` here: `hello();`

error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:35:9
--> $DIR/semicolon_if_nothing_returned.rs:36:9
|
LL | ptr::drop_in_place(s.as_mut_ptr())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: add a `;` here: `ptr::drop_in_place(s.as_mut_ptr());`
Expand Down

0 comments on commit 2e17035

Please sign in to comment.