Skip to content

rustfmt: Discover modules via cfg_select! - #158372

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
mkroening:rustfmt-cfg_select-modules
Jul 24, 2026
Merged

rustfmt: Discover modules via cfg_select!#158372
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
mkroening:rustfmt-cfg_select-modules

Conversation

@mkroening

@mkroening mkroening commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

View all comments

This PR renames all occurrences of cfg_match! in rustfmt to cfg_select!. This makes the module file detection logic from rust-lang/rustfmt#6522 kick in for cfg_select! instead of cfg_match!, which no longer exists.

This PR performs no other adjustments to the logic to be as small as possible.

I am opening this PR in this repo since that is also the target for the more comprehensive #154202, which covers more than merely detecting other files through cfg_select!.

Closes #158371.

CC: @ytmimi, @CAD97

@rustbot

rustbot commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

rustfmt is developed in its own repository. If possible, consider making this change to rust-lang/rustfmt instead.

cc @rust-lang/rustfmt

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-rustfmt Relevant to the rustfmt team, which will review and decide on the PR/issue. labels Jun 24, 2026
@rustbot

rustbot commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

r? @ytmimi

rustbot has assigned @ytmimi.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: rustfmt, rustfmt-contributors
  • rustfmt, rustfmt-contributors expanded to 6 candidates
  • Random selection from jieyouxu, ytmimi

@tgross35

Copy link
Copy Markdown
Member

@rustbot label +beta-nominated

cfg_select has already been stable for a few releases so there's a bit of a gap here. Since the only change is a renaming, it seems potentially feasible to backport.

@rustbot rustbot added the beta-nominated Nominated for backporting to the compiler in the beta channel. label Jun 24, 2026
Comment thread src/tools/rustfmt/tests/target/cfg_select/lib.rs
@ytmimi

ytmimi commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Overall I think this is a good change, and although it would technically be breaking since we'd end up formatting modules listed inside the cfg_select! there is some president with let-else, which was mentioned in an earlier comment. I think as long as we mention this change in the release notes we should be fine, and I'm sure users would welcome this fix. I'm at work right now, but will review this today when I have some free time.

@ytmimi ytmimi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there are still a few references to the old cfg_match! that we should change. Once that's done and we figure out how we'll disclose this breaking change you can r=me.

I think it's fine to get this out before cfg_select! formatting lands since I agree that the impact of entire modules being left unformatted is larger than what will change once we start formatting cfg_select! calls.

View changes since this review

Comment thread src/tools/rustfmt/src/modules/visitor.rs Outdated
Comment thread src/tools/rustfmt/src/modules/visitor.rs Outdated
@mkroening
mkroening force-pushed the rustfmt-cfg_select-modules branch from 3ba2282 to a71b047 Compare June 26, 2026 09:43
@rust-log-analyzer

This comment has been minimized.

@mkroening
mkroening force-pushed the rustfmt-cfg_select-modules branch from a71b047 to 4e98db3 Compare June 26, 2026 13:45
@mkroening
mkroening force-pushed the rustfmt-cfg_select-modules branch from 4e98db3 to facc787 Compare June 26, 2026 13:48
@cuviper

cuviper commented Jun 29, 2026

Copy link
Copy Markdown
Member

(As T-release) Please note that it's getting late for 1.97-beta backports -- ideally this should be merged and labeled beta-accepted before Friday, but at that point we won't have much meaningful beta testing time left either. Maybe it would be better to just let it ride the normal release train?

@jieyouxu

Copy link
Copy Markdown
Member

At that point, probably yeah.

@mkroening

Copy link
Copy Markdown
Contributor Author

I think the changes themselves should be fine now.

Once we figure out how we'll disclose this breaking change you can r=me.

Is there any way I can help with that? Should I write something for the release notes or do something else?

@tgross35 tgross35 added the relnotes Marks issues that should be documented in the release notes of the next release. label Jul 20, 2026
@tgross35

Copy link
Copy Markdown
Member

@jieyouxu would you be willing to merge this one since Yacin approved?

Once we figure out how we'll disclose this breaking change you can r=me.

Is there any way I can help with that? Should I write something for the release notes or do something else?

I added the relnotes label, you can add something to #159615.

@jieyouxu jieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, since the cfg_match -> cfg_select renames are now also done, and we have an associated relnotes issue...
@bors r=ytmimi,jieyouxu

View changes since this review

@rust-bors

rust-bors Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

📌 Commit facc787 has been approved by ytmimi,jieyouxu

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 24, 2026
rust-bors Bot pushed a commit that referenced this pull request Jul 24, 2026
Rollup of 14 pull requests

Successful merges:

 - #159765 (Avoid spurious rebuilds of JSON docs in bootstrap)
 - #159781 (Update bootstrap to use -Zembed-metadata=no instead of -Zno-embed-metadata)
 - #158362 (trait solver: account for universes from replace_bound_vars)
 - #158372 (rustfmt: Discover modules via `cfg_select!`)
 - #159173 (Add allowed list check on EII implementations attributes)
 - #159718 (Make `DocLinkResMap` an `FxIndexMap`)
 - #159722 ( [rustdoc] Retrieve `cfg_attr` information for derived impls for `doc_cfg` feature)
 - #159731 (std: Implement futex on wasip3 targets, update target spec)
 - #159755 (Improve consistency of attribute error messages)
 - #155795 (constify `vec![1, 2, 3]` macro)
 - #157776 (ci: Enable autodiff tests on x86_64 linux)
 - #158766 (Promote riscv64-unknown-linux-musl to tier 2 with host tools)
 - #159271 (str: add ASCII fast path to word_to_titlecase)
 - #159667 (Make some parser structured suggestions verbose and tweak their wording)
@rust-bors
rust-bors Bot merged commit 7a183d7 into rust-lang:main Jul 24, 2026
13 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Jul 24, 2026
rust-timer added a commit that referenced this pull request Jul 24, 2026
Rollup merge of #158372 - mkroening:rustfmt-cfg_select-modules, r=ytmimi,jieyouxu

rustfmt: Discover modules via `cfg_select!`

This PR renames all occurrences of `cfg_match!` in rustfmt to `cfg_select!`. This makes the module file detection logic from rust-lang/rustfmt#6522 kick in for `cfg_select!` instead of `cfg_match!`, which no longer exists.

This PR performs no other adjustments to the logic to be as small as possible.

I am opening this PR in this repo since that is also the target for the more comprehensive #154202, which covers more than merely detecting other files through `cfg_select!`.

Closes #158371.

CC: @ytmimi, @CAD97
@mkroening
mkroening deleted the rustfmt-cfg_select-modules branch July 24, 2026 11:58
github-actions Bot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Jul 25, 2026
Rollup of 14 pull requests

Successful merges:

 - rust-lang/rust#159765 (Avoid spurious rebuilds of JSON docs in bootstrap)
 - rust-lang/rust#159781 (Update bootstrap to use -Zembed-metadata=no instead of -Zno-embed-metadata)
 - rust-lang/rust#158362 (trait solver: account for universes from replace_bound_vars)
 - rust-lang/rust#158372 (rustfmt: Discover modules via `cfg_select!`)
 - rust-lang/rust#159173 (Add allowed list check on EII implementations attributes)
 - rust-lang/rust#159718 (Make `DocLinkResMap` an `FxIndexMap`)
 - rust-lang/rust#159722 ( [rustdoc] Retrieve `cfg_attr` information for derived impls for `doc_cfg` feature)
 - rust-lang/rust#159731 (std: Implement futex on wasip3 targets, update target spec)
 - rust-lang/rust#159755 (Improve consistency of attribute error messages)
 - rust-lang/rust#155795 (constify `vec![1, 2, 3]` macro)
 - rust-lang/rust#157776 (ci: Enable autodiff tests on x86_64 linux)
 - rust-lang/rust#158766 (Promote riscv64-unknown-linux-musl to tier 2 with host tools)
 - rust-lang/rust#159271 (str: add ASCII fast path to word_to_titlecase)
 - rust-lang/rust#159667 (Make some parser structured suggestions verbose and tweak their wording)
@jieyouxu

Copy link
Copy Markdown
Member

Marking this as beta-approved as per discussions in #t-rustfmt > cfg_select PR @ 💬.

@rustbot label: +beta-accepted

@rustbot rustbot added the beta-accepted Accepted for backporting to the compiler in the beta channel. label Jul 31, 2026
@cuviper cuviper mentioned this pull request Aug 7, 2026
@cuviper cuviper modified the milestones: 1.99.0, 1.98.0 Aug 7, 2026
@cuviper cuviper removed the beta-nominated Nominated for backporting to the compiler in the beta channel. label Aug 7, 2026
rust-bors Bot pushed a commit that referenced this pull request Aug 7, 2026
[beta] backports

- rustfmt: Discover modules via `cfg_select!` #158372
- Rename splat to avoid stable name collisions #159817
- Rename `#[unroll]` => `#[rustc_unroll]` to mitigate nameres ambiguity #160211
- [beta-1.98] Update cargo submodule #160596

r? me
rust-bors Bot pushed a commit that referenced this pull request Aug 9, 2026
[beta] backports

- rustfmt: Discover modules via `cfg_select!` #158372
- Rename splat to avoid stable name collisions #159817
- Rename `#[unroll]` => `#[rustc_unroll]` to mitigate nameres ambiguity #160211
- [beta-1.98] Update cargo submodule #160596

r? me
rust-bors Bot pushed a commit that referenced this pull request Aug 9, 2026
[beta] backports



- rustfmt: Discover modules via `cfg_select!` #158372
- Rename splat to avoid stable name collisions #159817
- Rename `#[unroll]` => `#[rustc_unroll]` to mitigate nameres ambiguity #160211
- [beta-1.98] Update cargo submodule #160596

r? me
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
Rollup of 14 pull requests

Successful merges:

 - rust-lang/rust#159765 (Avoid spurious rebuilds of JSON docs in bootstrap)
 - rust-lang/rust#159781 (Update bootstrap to use -Zembed-metadata=no instead of -Zno-embed-metadata)
 - rust-lang/rust#158362 (trait solver: account for universes from replace_bound_vars)
 - rust-lang/rust#158372 (rustfmt: Discover modules via `cfg_select!`)
 - rust-lang/rust#159173 (Add allowed list check on EII implementations attributes)
 - rust-lang/rust#159718 (Make `DocLinkResMap` an `FxIndexMap`)
 - rust-lang/rust#159722 ( [rustdoc] Retrieve `cfg_attr` information for derived impls for `doc_cfg` feature)
 - rust-lang/rust#159731 (std: Implement futex on wasip3 targets, update target spec)
 - rust-lang/rust#159755 (Improve consistency of attribute error messages)
 - rust-lang/rust#155795 (constify `vec![1, 2, 3]` macro)
 - rust-lang/rust#157776 (ci: Enable autodiff tests on x86_64 linux)
 - rust-lang/rust#158766 (Promote riscv64-unknown-linux-musl to tier 2 with host tools)
 - rust-lang/rust#159271 (str: add ASCII fast path to word_to_titlecase)
 - rust-lang/rust#159667 (Make some parser structured suggestions verbose and tweak their wording)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 21, 2026
This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [rust](https://github.com/rust-lang/rust) | tools | minor | `1.97.1` → `1.98.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>rust-lang/rust (rust)</summary>

### [`v1.98.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1980-2026-08-20)

[Compare Source](rust-lang/rust@1.97.1...1.98.0)

\==========================

<a id="1.98.0-Language"></a>

## Language

- [Allow shortening lifetime of `&mut` when unsize-coercing, even in an invariant position.](rust-lang/rust#149219) For example, you can now coerce a `Cell<&'long mut i32>` to a `Cell<&'short mut dyn Send>`. Such shortenings were already previously allowed when coercing a `&mut` to a `&`, or coercing a `&` to a `&`.
- [Add deny-by-default `invalid_runtime_symbol_definitions` lint and warn-by-default `suspicious_runtime_symbol_definitions` lint](rust-lang/rust#155521)
  - The lints currently specifically targets `core` runtime symbols like `memcmp`, `memset`, `strlen`, ... and is planned to be expanded in the next few releases.
- [Add warn-by-default `c_void_returns` lint to check `core::ffi::c_void` as a return type](rust-lang/rust#156379)

<a id="1.98.0-Platform-Support"></a>

## Platform Support

- [Add `powerpc64-unknown-linux-gnuelfv2` as Tier 3](rust-lang/rust#144220)
- [Add `aarch64-unknown-linux-pauthtest` as Tier 3 target](rust-lang/rust#155722)
- [Promote `thumbv7a-none-eabi` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7a-none-eabihf` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabi` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabihf` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv8r-none-eabihf` to Tier 2](rust-lang/rust#155763)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

<a id="1.98.0-Libraries"></a>

## Libraries

- [Change `Location<'_>` lifetime to `'static` in `Panic[Hook]Info`](rust-lang/rust#146561)
- [Document panic in `RangeInclusive::from(legacy::RangeInclusive)`](rust-lang/rust#155421)
- [Document that `ManuallyDrop`'s `Box` interaction has been fixed](rust-lang/rust#155750)
- [Stabilize LoongArch CRC Intrinsics](rust-lang/rust#156908)
- [The `derive` macro is available at `{core,std}::derive`.](rust-lang/rust#154645) This was previously [unintentionally stabilized in 1.96](rust-lang/rust#159856), but is now [explicitly accepted](rust-lang/rust#154645) as a stabilized API.
  - Please note that the MSRV for `{core,std}::derive` will be 1.96, and not 1.98.

<a id="1.98.0-Stabilized-APIs"></a>

## Stabilized APIs

- [`str::substr_range`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.substr_range)
- [`[T]::subslice_range`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.subslice_range)
- [`core::fmt::NumBuffer`](https://doc.rust-lang.org/stable/core/fmt/struct.NumBuffer.html)
- [`<{integer}>::format_into`](https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into)
- [`Send/Sync for std::process::CommandArgs`](https://doc.rust-lang.org/stable/std/process/struct.CommandArgs.html#impl-Send-for-CommandArgs%3C'a%3E)
- [`{fN}::algebraic_add`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_add)
- [`{fN}::algebraic_sub`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_sub)
- [`{fN}::algebraic_mul`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_mul)
- [`{fN}::algebraic_div`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_div)
- [`{fN}::algebraic_rem`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_rem)
- [`NonZero<{integer}>::from_str_radix`](https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#method.from_str_radix-4)
- [`String::from_utf16le`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le)
- [`String::from_utf16le_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le_lossy)
- [`String::from_utf16be`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be)
- [`String::from_utf16be_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be_lossy)
- [`[T]::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.strip_circumfix)
- [`str::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.strip_circumfix)
- [`Atomic<T>::from_mut`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut)
- [`Atomic<T>::get_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.get_mut_slice)
- [`Atomic<T>::from_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut_slice)
- [`std::range::legacy`](https://doc.rust-lang.org/stable/std/range/legacy/index.html)

<a id="1.98.0-Compatibility-Notes"></a>

## Compatibility Notes

- [If fully elided, lifetime bounds of trait object types may now resolve differently or even get rejected in very specific niche scenarios](rust-lang/rust#129543)
- [Error in more cases of ambiguous imports](rust-lang/rust#145108)
- [Switch the destructors implementation for thread locals on Windows to use Fiber Local Storage (FLS)](rust-lang/rust#148799)
- [Convert some cases of the `ambiguous_glob_imports` lint into a hard error](rust-lang/rust#149195)
- [Where-bounds of the form `Type = Type` and `Type == Type` are no longer syntactically allowed](rust-lang/rust#153513)
- [Ensure Send/Sync is not implemented for std::env::Vars{,Os}](rust-lang/rust#155153)
- [Fix that in some attributes, arguments were not properly rejected](rust-lang/rust#155193)
- [`repr(transparent)` is now more strict about which fields have "trivial" layout and hence can be ignored: `repr(C)` types, types with private fields, and `#[non_exhaustive]` types are no longer considered "trivial"](rust-lang/rust#155299)
- [Correctly check whether types have equal size in `transmute()` when some `repr` attributes are involved.](rust-lang/rust#155418)
- [More characters are escaped when printing strings and chars](rust-lang/rust#155527)
- [Implement fast path for `derive(PartialOrd)` when deriving `Ord`](rust-lang/rust#155598)
  This can break crates in practice where a type's PartialOrd and Ord impls were inconsistent with each other.
- [Add temporary scope to `assert_eq` and `assert_ne`](rust-lang/rust#155739)
- Closed a hole in the pattern matching [structural equality](https://doc.rust-lang.org/reference/patterns.html#constant-patterns) check, preventing cases where a match of a constant would be allowed, despite disagreeing with a manually written `PartialEq` implementation, when a `derive(PartialEq)` implementation for that type also exists.
- [On Emscripten the WASM exception handling ABI is now unconditionally used](rust-lang/rust#156928) The `-Zemscripten-wasm-eh=false` flag to switch back to JS exceptions has been removed.
- [The UNSAFE\_CODE lint is now consistently emitted for all unsafe attributes](rust-lang/rust#157201)
- [Solaris: remove `File::lock` implementation, it has the wrong semantics (return "unsupported" instead)](rust-lang/rust#157509)
- [Windows-gnu targets now specify baseline tools versions](rust-lang/rust#158020)
- [rustfmt now discovers module files that are defined in `cfg_select!`](rust-lang/rust#158372)
  This may cause more code to be formatted which was previously ignored.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

beta-accepted Accepted for backporting to the compiler in the beta channel. relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-rustfmt Relevant to the rustfmt team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

rustfmt does not discover modules through cfg_select!

9 participants