Skip to content

Tracking issue for migrating all remaining post-expansion feature gates to pre-expansion ones #154045

@fmease

Description

@fmease

TODO(fmease): Brief introduction.

Steps

TODO(fmease): Find & link to all earlier attempts (PRs & crater runs).

  1. Find the most recent relevant crater runs and manually reaudit affected crates
    • check if at least some crates have been fixed downstream by now
  2. Collect all features where the crater run has happened a long time ago & issue a single crater run for all of them at once
  3. For all the other ones that also don't emit a pre-expansion warning yet, add warnings immediately
    • no further input from T-compiler/T-lang should be needed since it's already legitimized by MCP 535.

Affected Syntactic Constructs

  1. item modifier default (feature specialization or min_specialization for fns only)
    • we potentially want to drop this feature in favor of a different approach...
    • ...so a syntax gate would make it easier to phase out the syntax later on
    • issue a pre-expansion feature gate warning (legitimized by MCP 535)
    • turn the warning into a hard error (needs crater, T-lang FCP)
  2. trait impl modifier ! (feature negative_impls)
    • likely to be stabilized in 1–3 years, so a syntax gate isn't super pressing
    • issue a pre-expansion feature gate warning (legitimized by MCP 535)
    • turn the warning into a hard error (needs crater, T-lang FCP)
  3. expression try { … } (feature try_blocks)
    • already has a pre-expansion feature gate warning
    • incredibly likely to be stabilized this year...
    • ...so a syntax gate would be counterproductive / harmful (!)
    • turn the warning into a hard error (needs crater, T-lang FCP)
  4. pattern box $pat (feature box_patterns)
    • already has a pre-expansion feature gate warning
    • incredibly likely to be replaced with explicit or implicit deref patterns...
    • ...so a syntax gate would make it easier to phase out the syntax later on
    • turn the warning into a hard error (needs crater, T-lang FCP)
  5. pattern $patpath { box $ident }, pseudo binding mode (feature box_patterns)
    • incredibly likely to be replaced with explicit or implicit deref patterns...
    • ...so a syntax gate would make it easier to phase out the syntax later on
    • issue a pre-expansion feature gate warning (legitimized by MCP 535)
    • turn the warning into a hard error (needs crater, T-lang FCP)
  6. item trait $ident $genericparams = $bounds; (feature trait_alias)
    • already has a pre-expansion feature gate warning
    • turn the warning into a hard error (needs crater, T-lang FCP)
  7. trait item modifier auto (feature auto_traits)
    • already has a pre-expansion feature gate warning
    • turn the warning into a hard error (needs crater, T-lang FCP)
  8. (not fitting 100%) syntax impl $traitref for .. {} (early version of a now removed predecessor of feature auto_traits)
    • most recent crater run: PR RUST-121072
    • issue a pre-expansion feature gate warning (legitimized by MCP 535, maybe?)
    • reevaluate RUST-121072's crater report & send downstream patches
    • turn the warning into a hard error (needs T-lang FCP, maybe another crater run)
  9. item macro $ident$macroparams { $ttstar } (feature decl_macro)
    • already has a pre-expansion feature gate warning
    • turn the warning into a hard error (needs crater, T-lang FCP)
  10. (not fitting 100%) predicates $ty = $ty and $ty == $ty (no corresp. feature was ever added (cc RUST-22074, RUST-87471))
    • straight up hard error (crater: 0 regressions, needs T-lang FCP): PR RUST-153513

Pre-History (Incomplete)

Implementation History

Downstream Patches

Metadata

Metadata

Assignees

Labels

A-grammarArea: The grammar of RustA-parserArea: The lexing & parsing of Rust source code to an ASTC-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-langRelevant to the language team

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions