Implement the toolchain side of proposal #7254, removing the `:!` binding syntax for generic and template parameters in favor of the keywords `generic`, `template`, and `runtime` plus contextual defaults for phase. For valid programs this is semantics-preserving: each binding resolves to the same phase, and produces the same SemIR, as it did under `:!`/`:`. The parser derives a binding's phase from its syntactic context plus any explicit phase keyword; new diagnostics and error recovery for misused keywords are described below. Implementation details for each component: - Lexer: remove the `:!` (`ColonExclaim`) token, move its virtual parse-node budget onto `:`, and add the `generic` and `runtime` keywords. - Parser: thread a `BindingContext` (`ExplicitParam`, `DeducedParam`, or `CompileTimeEntityParam`) from declaration introducers down through parameter lists to each binding pattern, using a one-token lookahead to distinguish a name-qualifier parameter list from a declaration's own final list. Parameters of a compile-time entity (`class`, `interface`, `constraint`, `choice`, `alias`, `export`, `namespace`) and deduced `[]` parameters default to checked generic; explicit function parameters and local bindings default to runtime. `HandleBindingPattern` resolves the phase from that context plus the keyword: a `generic` keyword needs no node of its own (the phase is carried by the binding's node kind), while a `runtime` keyword is preserved as a `RuntimeBindingName` node so `check` can name it in a diagnostic. A phase keyword that is merely redundant with the contextual default is diagnosed here, without invalidating the parse tree. - Check: a phase keyword that is invalid for its context (for example `runtime` on a checked-generic parameter) is diagnosed here, and recovers by building an error binding that still introduces the name so that later uses of it do not produce cascading errors. The removed `:!` syntax is now rejected as an ordinary parse error. The `form`/`:?`/`->?` ("extended types") portion of proposal #7254 is left for a separate change. Assisted-by: Claude Code
Textmate Language Definition
This directory contains a TextMate bundle which can be used in various editors such as TextMate, Atom, or the IntelliJ family for syntax highlighting of Carbon source files.
If you are using TextMate, see the documentation on
how to install TextMate bundles.
Clone the repository with Git and symlink/copy the utils/textmate directory to
any of the paths TextMate will search through (you can find these paths in the
TextMate documentation above).
IntelliJ
If you are using IntelliJ or a IntelliJ Platform product, you can find
documentation on
how to install TextMate bundles in IntelliJ.
Clone the repository with Git and open the utils/textmate directory inside the
IntelliJ TextMate Bundle window.
Atom
If you are using Atom, you can convert the bundle to an Atom-compatible one. See the Atom documentation on how to do that.
Other
For other editors that support TextMate bundles you can consult your editors documentation to see how to use the bundle.