Skip to content

Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups #145474

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 19, 2025

Conversation

fmease
Copy link
Member

@fmease fmease commented Aug 15, 2025

Fixes #145470.

First commit fixes the issue, second one performs some desperately needed cleanups.

The fix shouldn't be a breaking change because IINM the parser always ensures that all brackets are balanced (via a buffer of brackets). Meaning even though we used to accept (use<> as a valid precise capturing list, it was guaranteed that we would fail in the end.

@rustbot
Copy link
Collaborator

rustbot commented Aug 15, 2025

r? @fee1-dead

rustbot has assigned @fee1-dead.
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

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 15, 2025
@fmease fmease changed the title Properly recover from parenthesized use-bounds (precise capturing) plus small cleanups Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups Aug 15, 2025
let hi = self.prev_token.span;
let mut diag = self
.dcx()
.struct_span_err(lo.to(hi), "precise capturing lists may not be parenthesized");
Copy link
Member Author

@fmease fmease Aug 15, 2025

Choose a reason for hiding this comment

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

First time that the term "precise capturing list" is used (in the compiler). In the AST validator, we emit diagnostics mentioning "precise capturing syntax" but "[…] syntax may not be parenthesized" feels super off to me (mixing of abstraction levels) but I'm L2, so.

The Reference and the AST use "use-bounds" essentially but the problem with that is the fact that later compiler stages (and the release blog post, GH issues & other documents) all use "precise capturing" when referring to this feature (in general or from a semantic standpoint specifically), so I was hesitant to deviate too far from this generally accepted terminology in user-facing output.

(Re. the phrasing "[…] not supported" for such things, I really don't like it; it should either be "not supported yet" + actual official proposal or it's plainly ungrammatical, no in-between.)

@fmease fmease force-pushed the paren-use-bounds-fix branch 2 times, most recently from 58928f4 to ca5569e Compare August 15, 2025 23:24
@fmease fmease force-pushed the paren-use-bounds-fix branch from ca5569e to f8f7c27 Compare August 16, 2025 14:16
@fee1-dead
Copy link
Member

nice

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Aug 18, 2025

📌 Commit f8f7c27 has been approved by fee1-dead

It is now in the queue for this repository.

@bors bors 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 Aug 18, 2025
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 18, 2025
…1-dead

Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups

Fixes rust-lang#145470.

First commit fixes the issue, second one performs some desperately needed cleanups.

The fix shouldn't be a breaking change because IINM the parser always ensures that all brackets are balanced (via a buffer of brackets). Meaning even though we used to accept `(use<>` as a valid precise capturing list, it was guaranteed that we would fail in the end.
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 18, 2025
…1-dead

Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups

Fixes rust-lang#145470.

First commit fixes the issue, second one performs some desperately needed cleanups.

The fix shouldn't be a breaking change because IINM the parser always ensures that all brackets are balanced (via a buffer of brackets). Meaning even though we used to accept `(use<>` as a valid precise capturing list, it was guaranteed that we would fail in the end.
bors added a commit that referenced this pull request Aug 19, 2025
Rollup of 33 pull requests

Successful merges:

 - #139345 (Extend `QueryStability` to handle `IntoIterator` implementations)
 - #140740 (Add `-Zindirect-branch-cs-prefix`)
 - #142079 (nll-relate: improve hr opaque types support)
 - #142938 (implement std::fs::set_permissions_nofollow on unix)
 - #144767 (Correct some grammar in integer documentation)
 - #144906 (Require approval from t-infra instead of t-release on tier bumps)
 - #144983 (Rehome 37 `tests/ui/issues/` tests to other subdirectories under `tests/ui/`)
 - #145025 (run spellcheck as a tidy extra check in ci)
 - #145166 (suggest using `pub(crate)` for E0364)
 - #145255 (dec2flt: Provide more valid inputs examples)
 - #145306 (Add tracing to various miscellaneous functions)
 - #145336 (Hide docs for `core::unicode`)
 - #145429 (Couple of codegen_fn_attrs improvements)
 - #145452 (Do not strip binaries in bootstrap everytime if they are unchanged)
 - #145464 (Stabilize `const_pathbuf_osstring_new` feature)
 - #145474 (Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups)
 - #145486 (Fix `unicode_data.rs` mention message)
 - #145493 (remove `should_render` in `PrintAttribute` derive)
 - #145505 (Simplify span caches)
 - #145510 (Visit and print async_fut local for async drop.)
 - #145511 (Rust build fails on OpenBSD after using file_lock feature)
 - #145532 (resolve: debug for block module)
 - #145533 (Reorder `lto` options from most to least optimizing)
 - #145537 (Do not consider a `T: !Sized` candidate to satisfy a `T: !MetaSized` obligation.)
 - #145538 (bufreader::Buffer::backshift: don't move the uninit bytes)
 - #145542 (triagebot: Don't warn no-mentions on subtree updates)
 - #145549 (Update rust maintainers in openharmony.md)
 - #145550 (Avoid using `()` in `derive(From)` output.)
 - #145556 (Allow stability attributes on extern crates)
 - #145560 (Remove unused `PartialOrd`/`Ord` from bootstrap)
 - #145568 (ignore frontmatters in `TokenStream::new`)
 - #145571 (remove myself from some adhoc-groups and pings)
 - #145576 (Add change tracker entry for `--timings`)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit that referenced this pull request Aug 19, 2025
Rollup of 15 pull requests

Successful merges:

 - #145338 (actually provide the correct args to coroutine witnesses)
 - #145429 (Couple of codegen_fn_attrs improvements)
 - #145452 (Do not strip binaries in bootstrap everytime if they are unchanged)
 - #145464 (Stabilize `const_pathbuf_osstring_new` feature)
 - #145474 (Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups)
 - #145486 (Fix `unicode_data.rs` mention message)
 - #145490 (Trace some basic I/O operations in bootstrap)
 - #145493 (remove `should_render` in `PrintAttribute` derive)
 - #145500 (Port must_use to the new target checking)
 - #145505 (Simplify span caches)
 - #145510 (Visit and print async_fut local for async drop.)
 - #145511 (Rust build fails on OpenBSD after using file_lock feature)
 - #145532 (resolve: debug for block module)
 - #145533 (Reorder `lto` options from most to least optimizing)
 - #145537 (Do not consider a `T: !Sized` candidate to satisfy a `T: !MetaSized` obligation.)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit b638266 into rust-lang:master Aug 19, 2025
10 checks passed
@rustbot rustbot added this to the 1.91.0 milestone Aug 19, 2025
rust-timer added a commit that referenced this pull request Aug 19, 2025
Rollup merge of #145474 - fmease:paren-use-bounds-fix, r=fee1-dead

Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups

Fixes #145470.

First commit fixes the issue, second one performs some desperately needed cleanups.

The fix shouldn't be a breaking change because IINM the parser always ensures that all brackets are balanced (via a buffer of brackets). Meaning even though we used to accept `(use<>` as a valid precise capturing list, it was guaranteed that we would fail in the end.
@fmease fmease deleted the paren-use-bounds-fix branch August 19, 2025 23:15
github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Aug 20, 2025
Rollup of 15 pull requests

Successful merges:

 - rust-lang/rust#145338 (actually provide the correct args to coroutine witnesses)
 - rust-lang/rust#145429 (Couple of codegen_fn_attrs improvements)
 - rust-lang/rust#145452 (Do not strip binaries in bootstrap everytime if they are unchanged)
 - rust-lang/rust#145464 (Stabilize `const_pathbuf_osstring_new` feature)
 - rust-lang/rust#145474 (Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups)
 - rust-lang/rust#145486 (Fix `unicode_data.rs` mention message)
 - rust-lang/rust#145490 (Trace some basic I/O operations in bootstrap)
 - rust-lang/rust#145493 (remove `should_render` in `PrintAttribute` derive)
 - rust-lang/rust#145500 (Port must_use to the new target checking)
 - rust-lang/rust#145505 (Simplify span caches)
 - rust-lang/rust#145510 (Visit and print async_fut local for async drop.)
 - rust-lang/rust#145511 (Rust build fails on OpenBSD after using file_lock feature)
 - rust-lang/rust#145532 (resolve: debug for block module)
 - rust-lang/rust#145533 (Reorder `lto` options from most to least optimizing)
 - rust-lang/rust#145537 (Do not consider a `T: !Sized` candidate to satisfy a `T: !MetaSized` obligation.)

r? `@ghost`
`@rustbot` modify labels: rollup
github-actions bot pushed a commit to model-checking/verify-rust-std that referenced this pull request Aug 20, 2025
Rollup of 15 pull requests

Successful merges:

 - rust-lang#145338 (actually provide the correct args to coroutine witnesses)
 - rust-lang#145429 (Couple of codegen_fn_attrs improvements)
 - rust-lang#145452 (Do not strip binaries in bootstrap everytime if they are unchanged)
 - rust-lang#145464 (Stabilize `const_pathbuf_osstring_new` feature)
 - rust-lang#145474 (Properly recover from parenthesized use-bounds (precise capturing lists) plus small cleanups)
 - rust-lang#145486 (Fix `unicode_data.rs` mention message)
 - rust-lang#145490 (Trace some basic I/O operations in bootstrap)
 - rust-lang#145493 (remove `should_render` in `PrintAttribute` derive)
 - rust-lang#145500 (Port must_use to the new target checking)
 - rust-lang#145505 (Simplify span caches)
 - rust-lang#145510 (Visit and print async_fut local for async drop.)
 - rust-lang#145511 (Rust build fails on OpenBSD after using file_lock feature)
 - rust-lang#145532 (resolve: debug for block module)
 - rust-lang#145533 (Reorder `lto` options from most to least optimizing)
 - rust-lang#145537 (Do not consider a `T: !Sized` candidate to satisfy a `T: !MetaSized` obligation.)

r? `@ghost`
`@rustbot` modify labels: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

(use<> forgets to look for )
4 participants