* [PATCH 2/2] rust: allow `clippy::collapsible_if` globally
2026-04-26 14:42 [PATCH 1/2] rust: allow `clippy::collapsible_match` globally Miguel Ojeda
@ 2026-04-26 14:42 ` Miguel Ojeda
2026-04-27 13:21 ` Gary Guo
2026-04-27 13:20 ` [PATCH 1/2] rust: allow `clippy::collapsible_match` globally Gary Guo
2026-04-30 21:22 ` Miguel Ojeda
2 siblings, 1 reply; 5+ messages in thread
From: Miguel Ojeda @ 2026-04-26 14:42 UTC (permalink / raw)
To: Miguel Ojeda, Greg Kroah-Hartman, Arve Hjønnevåg,
Todd Kjos, Christian Brauner, Carlos Llamas, Alice Ryhl,
Nathan Chancellor, Nicolas Schier
Cc: Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Trevor Gross, Danilo Krummrich, rust-for-linux,
linux-kernel, linux-kbuild, stable
Similar to `clippy::collapsible_match` (globally allowed in the previous
commit), the `clippy::collapsible_if` lint [1] can make code harder to
read in certain cases.
Thus just let developers decide on their own.
In addition, remove the existing `expect` we had.
Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
Suggested-by: Gary Guo <gary@garyguo.net>
Link: https://lore.kernel.org/rust-for-linux/DGROP5CHU1QZ.1OKJRAUZXE9WC@garyguo.net/
Link: https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [1]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
Makefile | 1 +
drivers/android/binder/range_alloc/array.rs | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index e2a810bc4409..d0a515b661a0 100644
--- a/Makefile
+++ b/Makefile
@@ -486,6 +486,7 @@ export rust_common_flags := --edition=2021 \
-Wclippy::as_ptr_cast_mut \
-Wclippy::as_underscore \
-Wclippy::cast_lossless \
+ -Aclippy::collapsible_if \
-Aclippy::collapsible_match \
-Wclippy::ignored_unit_patterns \
-Aclippy::incompatible_msrv \
diff --git a/drivers/android/binder/range_alloc/array.rs b/drivers/android/binder/range_alloc/array.rs
index ada1d1b4302e..081d19b09d4b 100644
--- a/drivers/android/binder/range_alloc/array.rs
+++ b/drivers/android/binder/range_alloc/array.rs
@@ -204,7 +204,6 @@ pub(crate) fn reservation_abort(&mut self, offset: usize) -> Result<FreedRange>
// caller will mark them as unused, which means that they can be freed if the system comes
// under memory pressure.
let mut freed_range = FreedRange::interior_pages(offset, size);
- #[expect(clippy::collapsible_if)] // reads better like this
if offset % PAGE_SIZE != 0 {
if i == 0 || self.ranges[i - 1].endpoint() <= (offset & PAGE_MASK) {
freed_range.start_page_idx -= 1;
--
2.53.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH 2/2] rust: allow `clippy::collapsible_if` globally
2026-04-26 14:42 ` [PATCH 2/2] rust: allow `clippy::collapsible_if` globally Miguel Ojeda
@ 2026-04-27 13:21 ` Gary Guo
0 siblings, 0 replies; 5+ messages in thread
From: Gary Guo @ 2026-04-27 13:21 UTC (permalink / raw)
To: Miguel Ojeda, Greg Kroah-Hartman, Arve Hjønnevåg,
Todd Kjos, Christian Brauner, Carlos Llamas, Alice Ryhl,
Nathan Chancellor, Nicolas Schier
Cc: Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Trevor Gross, Danilo Krummrich, rust-for-linux,
linux-kernel, linux-kbuild, stable
On Sun Apr 26, 2026 at 3:42 PM BST, Miguel Ojeda wrote:
> Similar to `clippy::collapsible_match` (globally allowed in the previous
> commit), the `clippy::collapsible_if` lint [1] can make code harder to
> read in certain cases.
>
> Thus just let developers decide on their own.
>
> In addition, remove the existing `expect` we had.
>
> Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
> Suggested-by: Gary Guo <gary@garyguo.net>
> Link: https://lore.kernel.org/rust-for-linux/DGROP5CHU1QZ.1OKJRAUZXE9WC@garyguo.net/
> Link: https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [1]
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Gary Guo <gary@garyguo.net>
> ---
> Makefile | 1 +
> drivers/android/binder/range_alloc/array.rs | 1 -
> 2 files changed, 1 insertion(+), 1 deletion(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] rust: allow `clippy::collapsible_match` globally
2026-04-26 14:42 [PATCH 1/2] rust: allow `clippy::collapsible_match` globally Miguel Ojeda
2026-04-26 14:42 ` [PATCH 2/2] rust: allow `clippy::collapsible_if` globally Miguel Ojeda
@ 2026-04-27 13:20 ` Gary Guo
2026-04-30 21:22 ` Miguel Ojeda
2 siblings, 0 replies; 5+ messages in thread
From: Gary Guo @ 2026-04-27 13:20 UTC (permalink / raw)
To: Miguel Ojeda, Greg Kroah-Hartman, Arve Hjønnevåg,
Todd Kjos, Christian Brauner, Carlos Llamas, Alice Ryhl,
Nathan Chancellor, Nicolas Schier
Cc: Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Trevor Gross, Danilo Krummrich, rust-for-linux,
linux-kernel, linux-kbuild, stable
On Sun Apr 26, 2026 at 3:42 PM BST, Miguel Ojeda wrote:
> The `clippy::collapsible_match` lint [1] can make code harder to read
> in certain cases [2], e.g.
>
> CLIPPY P rust/libmacros.so - due to command line change
> warning: this `if` can be collapsed into the outer `match`
> --> rust/pin-init/internal/src/helpers.rs:91:17
> |
> 91 | / if nesting == 1 {
> 92 | | impl_generics.push(tt.clone());
> 93 | | impl_generics.push(tt);
> 94 | | skip_until_comma = false;
> 95 | | }
> | |_________________^
> |
> = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match
> = note: `-W clippy::collapsible-match` implied by `-W clippy::all`
> = help: to override `-W clippy::all` add `#[allow(clippy::collapsible_match)]`
> help: collapse nested if block
> |
> 90 ~ TokenTree::Punct(p) if skip_until_comma && p.as_char() == ','
> 91 ~ && nesting == 1 => {
> 92 | impl_generics.push(tt.clone());
> 93 | impl_generics.push(tt);
> 94 | skip_until_comma = false;
> 95 ~ }
> |
>
> The lint does not have much upside -- when the suggestion may be a good
> one, it would still read fine when nested anyway. And it is the kind of
> lint that may easily bias people to just apply the suggestion instead
> of allowing it.
It's also just wrong.
pattern => {
if x {
...
}
}
is not equal to
pattern if x => { ... }
because the former prevents other arms later (e.g. a `_`) from being to act
while the latter doesn't.
See https://github.com/rust-lang/rust-clippy/pull/16878
>
> Thus just let developers decide on their own.
>
> Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
> Link: https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [1]
> Link: https://lore.kernel.org/rust-for-linux/CANiq72nWYJna_hdFxjQCQZK6yJBrr1Mb86iKavivV0U0BgufeA@mail.gmail.com/ [2]
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Gary Guo <gary@garyguo.net>
Best,
Gary
> ---
> Makefile | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Makefile b/Makefile
> index 54e1ae602000..e2a810bc4409 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -486,6 +486,7 @@ export rust_common_flags := --edition=2021 \
> -Wclippy::as_ptr_cast_mut \
> -Wclippy::as_underscore \
> -Wclippy::cast_lossless \
> + -Aclippy::collapsible_match \
> -Wclippy::ignored_unit_patterns \
> -Aclippy::incompatible_msrv \
> -Wclippy::mut_mut \
>
> base-commit: 897d54018cc9aa97fd1529ca08a53b429d05a566
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 1/2] rust: allow `clippy::collapsible_match` globally
2026-04-26 14:42 [PATCH 1/2] rust: allow `clippy::collapsible_match` globally Miguel Ojeda
2026-04-26 14:42 ` [PATCH 2/2] rust: allow `clippy::collapsible_if` globally Miguel Ojeda
2026-04-27 13:20 ` [PATCH 1/2] rust: allow `clippy::collapsible_match` globally Gary Guo
@ 2026-04-30 21:22 ` Miguel Ojeda
2 siblings, 0 replies; 5+ messages in thread
From: Miguel Ojeda @ 2026-04-30 21:22 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Christian Brauner, Carlos Llamas, Alice Ryhl, Nathan Chancellor,
Nicolas Schier, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Trevor Gross, Danilo Krummrich,
rust-for-linux, linux-kernel, linux-kbuild, stable
On Sun, Apr 26, 2026 at 4:42 PM Miguel Ojeda <ojeda@kernel.org> wrote:
>
> The `clippy::collapsible_match` lint [1] can make code harder to read
> in certain cases [2], e.g.
>
> CLIPPY P rust/libmacros.so - due to command line change
> warning: this `if` can be collapsed into the outer `match`
> --> rust/pin-init/internal/src/helpers.rs:91:17
> |
> 91 | / if nesting == 1 {
> 92 | | impl_generics.push(tt.clone());
> 93 | | impl_generics.push(tt);
> 94 | | skip_until_comma = false;
> 95 | | }
> | |_________________^
> |
> = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match
> = note: `-W clippy::collapsible-match` implied by `-W clippy::all`
> = help: to override `-W clippy::all` add `#[allow(clippy::collapsible_match)]`
> help: collapse nested if block
> |
> 90 ~ TokenTree::Punct(p) if skip_until_comma && p.as_char() == ','
> 91 ~ && nesting == 1 => {
> 92 | impl_generics.push(tt.clone());
> 93 | impl_generics.push(tt);
> 94 | skip_until_comma = false;
> 95 ~ }
> |
>
> The lint does not have much upside -- when the suggestion may be a good
> one, it would still read fine when nested anyway. And it is the kind of
> lint that may easily bias people to just apply the suggestion instead
> of allowing it.
>
> Thus just let developers decide on their own.
>
> Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
> Link: https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [1]
> Link: https://lore.kernel.org/rust-for-linux/CANiq72nWYJna_hdFxjQCQZK6yJBrr1Mb86iKavivV0U0BgufeA@mail.gmail.com/ [2]
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Applied (both patches) to `rust-fixes` -- thanks!
[ In addition, as Gary points out [3], the suggestion is also wrong [4] and
in the process of being fixed [5], possibly for Rust 1.97.0:
Link: https://lore.kernel.org/rust-for-linux/DI3YV94TH9I3.1SOHW51552497@garyguo.net/
[3]
Link: https://github.com/rust-lang/rust-clippy/issues/16875 [4]
Link: https://github.com/rust-lang/rust-clippy/pull/16878 [5]
- Miguel ]
Ideally, we would have an `Acked-by` on the second one from Binder
maintainers, but it is trivial.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 5+ messages in thread