Skip to content

Rename grammar rule TypeParamBounds to just Bounds#2258

Merged
ehuss merged 1 commit intorust-lang:masterfrom
fmease:rn-type-param-bounds
May 6, 2026
Merged

Rename grammar rule TypeParamBounds to just Bounds#2258
ehuss merged 1 commit intorust-lang:masterfrom
fmease:rn-type-param-bounds

Conversation

@fmease
Copy link
Copy Markdown
Member

@fmease fmease commented May 5, 2026

I take issue with the name of grammar rule TypeParamBounds. Bounds aren't inherently tied to type parameters, they can perfectly exist without them. This name stems from an ancient time when where-clauses didn't exist yet and bounds could only be put on type parameters. Today, that is no longer true.

Consider the following program which contains bounds that aren't associated with type parameters in any way:

fn f0() where i32: Copy {}
fn f1() where [&'static str; 10]: std::fmt::Debug {}
fn f2<const N: usize>() where [String; N]: Copy {}
fn f3<'a>() where &'a (): Sized {}

Bounds can be placed on any type. I'd also be fine with renaming it to TypeBounds, just anything but TypeParamBounds :)

@rustbot rustbot added the S-waiting-on-review Status: The marked PR is awaiting review from a maintainer label May 5, 2026
@ehuss
Copy link
Copy Markdown
Contributor

ehuss commented May 5, 2026

Sounds reasonable to me.

Can you also update the sentence in paths.type.intro that says "type parameter bounds" and replace that with something else ("type bounds" maybe?) if that makes sense.

@fmease fmease force-pushed the rn-type-param-bounds branch from 02a79dd to cbe9a8a Compare May 6, 2026 12:34
@fmease
Copy link
Copy Markdown
Member Author

fmease commented May 6, 2026

I've gone ahead and removed the mention entirely:

-Type paths are used within type definitions, trait bounds, type parameter bounds, and qualified paths.
+Type paths are used within type definitions, trait bounds, and qualified paths.

That's because it was redundant anyway. Bound (formerly TypeParamBound) is defined as Lifetime | TraitBound | UseBound but TraitBound is already listed in that sentence and obviously Lifetime and UseBound don't contain TypePaths.

@fmease
Copy link
Copy Markdown
Member Author

fmease commented May 6, 2026

I've also taken the liberty to rename trait-bounds.md to bounds.md since it actually describes all three kinds of bounds: Trait bounds, lifetime bounds (outlives-bounds) and use-bounds (precise capturing).

Feel free to drop that commit if you'd like to see that split off into a separate PR.

Edit: Dropped again since I forgot about URL stability and since I can't be bothered to add redirects (if you even can; I only know about the JS-driven URL fragment redirects); the Book and the rustc book both reference trait-bounds.md.

@fmease fmease force-pushed the rn-type-param-bounds branch from cbe9a8a to d6f4cc4 Compare May 6, 2026 12:38
Copy link
Copy Markdown
Contributor

@ehuss ehuss left a comment

Choose a reason for hiding this comment

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

@ehuss ehuss added this pull request to the merge queue May 6, 2026
Merged via the queue into rust-lang:master with commit cf0e391 May 6, 2026
6 checks passed
@rustbot rustbot removed the S-waiting-on-review Status: The marked PR is awaiting review from a maintainer label May 6, 2026
@fmease fmease deleted the rn-type-param-bounds branch May 6, 2026 13:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants