Skip to contentSkip to conversation

rust: disable `clippy::needless_continue`

PATCH Applied Miguel Ojeda 3 participants 3 messages Apr 3, 2025 – Apr 14, 2025

Subsystems (2)
lore
Share & tools
lore

Miguel Ojeda

author maintainer
#0 lore raw

PATCH 1/1 rust: disable `clippy::needless_continue`

Starting with Rust 1.86.0, Clippy's needless_continue lint complains about the last statement of a loop [1], including cases like:

    while ... {
        match ... {
            ... if ... => {
                ...
                return ...;
            }
            _ => continue,
        }
    }

as well as nested matches in a loop.

One solution is changing continue for () [2], but arguably using continue shows the intent better when it is alone in an arm like that.

Moreover, I am not sure we want to force people to try to find other ways to write the code either, in cases when that applies.

In addition, the help text does not really apply in the new cases the lint has introduced, e.g. here one cannot simply "drop" the expression:

warning: this continue expression is redundant
--> rust/macros/helpers.rs:85:18
|
85 | _ => continue,
| ^^^^^^^^
|
= help: consider dropping the continue expression
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_continue
= note: requested on the command line with -W clippy::needless-continue

The examples in the documentation do not show a case like this, either, so the second "help" line does not help.

In addition, locally disabling the lint is not possible with expect, since the behavior differs across versions. Using allow would be possible, but, even then, an extra line just for this is a bit too much, especially if there are other ways to satisfy the lint.

Finally, the lint is still in the "pedantic" category and disabled by default by Clippy.

Thus disable the lint, at least for the time being.

Feedback was submitted to upstream Clippy, in case this can be improved or perhaps the lint split into several [3].

---
 Makefile | 1 -
 1 file changed, 1 deletion(-)
Makefile +0 -1
index d138b17b8840..2c33d25c505c 100644
@@ -480,7 +480,6 @@ export rust_common_flags := --edition=2021 \
 			    -Wclippy::ignored_unit_patterns \
 			    -Wclippy::mut_mut \
 			    -Wclippy::needless_bitwise_bool \
-			    -Wclippy::needless_continue \
 			    -Aclippy::needless_lifetimes \
 			    -Wclippy::no_mangle_with_rust_abi \
 			    -Wclippy::undocumented_unsafe_blocks \

base-commit: a2cc6ff5ec8f91bc463fd3b0c26b61166a07eb11

Signature · 1 line
2.49.0
Applied
#1 lore raw
Quoted 2 lines · Miguel Ojeda

Thus disable the lint, at least for the time being.

Applied to rust-fixes -- thanks for the feedback in the other thread everyone! Tags still welcome for a day or two.

Cc: [email protected] # Needed in 6.12.y and later (Rust is
pinned in older LTSs).

Note that we don't have any cases before 6.15, but I added Cc: stable since I assume we may in the future, and it is easier to just have the same set everywhere.

Cheers,
Miguel

reviewer Reviewed-by on v1 1/1
#2 lore raw
In reply to Miguel Ojeda
Quoted 47 lines · Miguel Ojeda

Starting with Rust 1.86.0, Clippy's needless_continue lint complains about the last statement of a loop [1], including cases like:

    while ... {
        match ... {
            ... if ... => {
                ...
                return ...;
            }
            _ => continue,
        }
    }

as well as nested matches in a loop.

One solution is changing continue for () [2], but arguably using continue shows the intent better when it is alone in an arm like that.

Moreover, I am not sure we want to force people to try to find other ways to write the code either, in cases when that applies.

In addition, the help text does not really apply in the new cases the lint has introduced, e.g. here one cannot simply "drop" the expression:

warning: this continue expression is redundant
--> rust/macros/helpers.rs:85:18
|
85 | _ => continue,
| ^^^^^^^^
|
= help: consider dropping the continue expression
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_continue
= note: requested on the command line with -W clippy::needless-continue

The examples in the documentation do not show a case like this, either, so the second "help" line does not help.

In addition, locally disabling the lint is not possible with expect, since the behavior differs across versions. Using allow would be possible, but, even then, an extra line just for this is a bit too much, especially if there are other ways to satisfy the lint.

Finally, the lint is still in the "pedantic" category and disabled by default by Clippy.

Thus disable the lint, at least for the time being.

Quoted 7 lines

Feedback was submitted to upstream Clippy, in case this can be improved or perhaps the lint split into several [3].