mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
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
1001 lines
23 KiB
Plaintext
1001 lines
23 KiB
Plaintext
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<!--
|
|
Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
Exceptions. See /LICENSE for license information.
|
|
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
-->
|
|
|
|
<!--
|
|
THIS FILE IS AUTOGENERATED FROM carbon.tmLanguage.json. DO NOT EDIT.
|
|
-->
|
|
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>$schema</key>
|
|
<string>https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json</string>
|
|
<key>fileTypes</key>
|
|
<array>
|
|
<string>carbon</string>
|
|
</array>
|
|
<key>foldingStartMarker</key>
|
|
<string>\{\s*$</string>
|
|
<key>foldingStopMarker</key>
|
|
<string>^\s*\}</string>
|
|
<key>name</key>
|
|
<string>carbon</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#comments</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#cpp-inline</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#strings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#types</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#functions</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#variables</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#operators</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#special-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#introducer-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#modifier-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#misc-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#self-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#underscore</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#true-false</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#type-literals</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#numbers</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#parameter-bindings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#customs</string>
|
|
</dict>
|
|
</array>
|
|
<key>repository</key>
|
|
<dict>
|
|
<key>comments</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>^\s*(?=//\s).*$</string>
|
|
<key>name</key>
|
|
<string>comment.line.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>^\s*//@dump-sem-ir-(begin|end)\s*$</string>
|
|
<key>name</key>
|
|
<string>comment.line.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>^\s*//@include-in-dumps\s*$</string>
|
|
<key>name</key>
|
|
<string>comment.line.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>common</key>
|
|
<dict>
|
|
<key>comments</key>
|
|
<array>
|
|
<string>For including comments, operators, keywords, literals, and language constants </string>
|
|
<string>in other rules that use begin/end. This way we do not accidentally override their </string>
|
|
<string>highlighting in complex rules.</string>
|
|
</array>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#comments</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#strings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#operators</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#special-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#introducer-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#modifier-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#misc-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#self-keywords</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#true-false</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#type-literals</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#numbers</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>cpp-inline</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\b(import)\b\s+\b(Cpp)\b\s+\b(inline)\b\s*(''')([^\s'#]*\n)?</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>support.type.property-name.carbon</string>
|
|
</dict>
|
|
<key>3</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>4</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.triple.carbon</string>
|
|
</dict>
|
|
<key>5</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>constant.character.escape.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>C++ inline import (triple-quoted)</string>
|
|
<key>contentName</key>
|
|
<string>meta.embedded.block.cpp</string>
|
|
<key>end</key>
|
|
<string>(''')\s*(;)</string>
|
|
<key>endCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.triple.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>punctuation.terminator.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>source.cpp</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\b(import)\b\s+\b(Cpp)\b\s+\b(inline)\b\s*(")</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>support.type.property-name.carbon</string>
|
|
</dict>
|
|
<key>3</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>4</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.double.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>C++ inline import (double-quoted)</string>
|
|
<key>contentName</key>
|
|
<string>meta.embedded.inline.cpp</string>
|
|
<key>end</key>
|
|
<string>(")\s*(;)</string>
|
|
<key>endCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.double.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>punctuation.terminator.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>source.cpp</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\b(inline)\b\s+\b(Cpp)\b\s*(''')([^\s'#]*\n)?</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>support.type.property-name.carbon</string>
|
|
</dict>
|
|
<key>3</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.triple.carbon</string>
|
|
</dict>
|
|
<key>4</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>constant.character.escape.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>C++ inline block (triple-quoted)</string>
|
|
<key>contentName</key>
|
|
<string>meta.embedded.block.cpp</string>
|
|
<key>end</key>
|
|
<string>(''')\s*(;)</string>
|
|
<key>endCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.triple.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>punctuation.terminator.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>source.cpp</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\b(inline)\b\s+\b(Cpp)\b\s*(")</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>support.type.property-name.carbon</string>
|
|
</dict>
|
|
<key>3</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.double.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>C++ inline block (double-quoted)</string>
|
|
<key>contentName</key>
|
|
<string>meta.embedded.inline.cpp</string>
|
|
<key>end</key>
|
|
<string>(")\s*(;)</string>
|
|
<key>endCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>string.quoted.double.carbon</string>
|
|
</dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>punctuation.terminator.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>source.cpp</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>customs</key>
|
|
<dict>
|
|
<key>comment</key>
|
|
<string>For rules that should be checked last.</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>(?<=\bpackage\s)\w+</string>
|
|
<key>name</key>
|
|
<string>support.class.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>(?<=\bCore\s)\w+</string>
|
|
<key>name</key>
|
|
<string>support.class.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>(?<=\bimport\s)\w+</string>
|
|
<key>name</key>
|
|
<string>support.type.property-name.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>comment</key>
|
|
<string>Matches function calls.</string>
|
|
<key>match</key>
|
|
<string>\b\w+\s*\(</string>
|
|
<key>name</key>
|
|
<string>support.function.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>comment</key>
|
|
<string>Matches unidentified words as variables.</string>
|
|
<key>match</key>
|
|
<string>\b\w+\b</string>
|
|
<key>name</key>
|
|
<string>support.variable.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>functions</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>meta.function.carbon</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\bfn\b</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>0</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>Matches function declarations.</string>
|
|
<key>end</key>
|
|
<string>(?=[\[\(])</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.function.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>introducer-keywords</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(adapt|alias|choice|class|constraint|fn|import|inline|interface|let|library|namespace|var)\b</string>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(base)\b(?!\s*class\b)</string>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(export)\b(?!\s*import\b)</string>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(impl)\b(?!\s*(fn|library|package)\b)</string>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(package)\b(?!\.)</string>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>misc-keywords</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(auto|destructor|forall|friend|observe|override|require)\b</string>
|
|
<key>name</key>
|
|
<string>keyword.other.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>(?<=\.)\b(base)\b</string>
|
|
<key>name</key>
|
|
<string>keyword.other.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>modifier-keywords</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(abstract|const|extend|extern|final|private|protected|static|virtual)\b</string>
|
|
<key>name</key>
|
|
<string>storage.modifier.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(base)\b(?=\s*class\b)</string>
|
|
<key>name</key>
|
|
<string>storage.modifier.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(default)\b(?!\s*=>)</string>
|
|
<key>name</key>
|
|
<string>storage.modifier.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(export)\b(?=\s*import\b)</string>
|
|
<key>name</key>
|
|
<string>storage.modifier.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(impl)\b(?=\s*(fn|library|package)\b)</string>
|
|
<key>name</key>
|
|
<string>storage.modifier.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>numbers</key>
|
|
<dict>
|
|
<key>comment</key>
|
|
<string>Invalid formats are also highlighted. Language server handles error highlighting</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>0x[_0-9a-fA-F]*(\.[_0-9a-fA-F]+(p[-+]?[0-9]+)?)?</string>
|
|
<key>name</key>
|
|
<string>constant.numeric.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>0b[_01]*</string>
|
|
<key>name</key>
|
|
<string>constant.numeric.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>[0-9][_0-9]*(\.[_0-9]+(e[-+]?[0-9]+)?)?</string>
|
|
<key>name</key>
|
|
<string>constant.numeric.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>operators</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(>>=|<=>|<<=|\&=|==|!=|>=|>>|<=|<<|-=|->|--|%=|\|=|\+=|\+\+|/=|\*=|\&|\^|=|>|<|-|%|\.|\||\+|/|\*)\b</string>
|
|
<key>name</key>
|
|
<string>keyword.operator.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(and|as|generic|impls|in|like|not|or|partial|ref|runtime|template|where)\b</string>
|
|
<key>name</key>
|
|
<string>keyword.control.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>parameter-bindings</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>captures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>support.variable.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>Matches parameter bindings.</string>
|
|
<key>match</key>
|
|
<string>\b(\w+)\s*(?=:)</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>self-keywords</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(self|Self)\b</string>
|
|
<key>name</key>
|
|
<string>variable.language.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>special-keywords</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(break|case|continue|else|if|for|match|return|returned|then|while)\b</string>
|
|
<key>name</key>
|
|
<string>keyword.control.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(default)\b(?=\s*=>)</string>
|
|
<key>name</key>
|
|
<string>keyword.control.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>string_escapes</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\\([tnr'"0\0]|x[0-9A-F]{2}|u\{[0-9A-F]{4,}\})</string>
|
|
<key>name</key>
|
|
<string>constant.character.escape.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>strings</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>'''([^\s'#]*\n)?</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>1</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>constant.character.escape.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>end</key>
|
|
<string>'''</string>
|
|
<key>name</key>
|
|
<string>string.quoted.triple.carbon</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#string_escapes</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>"</string>
|
|
<key>end</key>
|
|
<string>"</string>
|
|
<key>name</key>
|
|
<string>string.quoted.double.carbon</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#string_escapes</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>true-false</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(true|false)\b</string>
|
|
<key>name</key>
|
|
<string>constant.language.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>type-literals</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(array|bool|char|str|type)\b</string>
|
|
<key>name</key>
|
|
<string>constant.language.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>comment</key>
|
|
<string>Match common numeric type literals. Language server should highlight other valid literals.</string>
|
|
<key>match</key>
|
|
<string>\b[iuf](8|16|32|64|128)\b</string>
|
|
<key>name</key>
|
|
<string>constant.language.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>types</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>meta.type.carbon</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\b((adapt|alias|class|constraint|interface|impl)|(as|impls))\b</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>2</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
<key>3</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>keyword.control.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>Matches type, constraint, and implementation declarations, and explicit casts.</string>
|
|
<key>end</key>
|
|
<string>(?=[;{])</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#parameter-bindings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.type.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>:</string>
|
|
<key>comment</key>
|
|
<string>Matches types in bindings.</string>
|
|
<key>end</key>
|
|
<string>(?=([;{=]|->|in|where))</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#variables</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#parameter-bindings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.type.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>-></string>
|
|
<key>comment</key>
|
|
<string>Matches function return types.</string>
|
|
<key>end</key>
|
|
<string>(?=([;{]|=>))</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.type.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\bwhere\b</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>0</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>keyword.control.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>Matches types in where clause.</string>
|
|
<key>end</key>
|
|
<string>(?=[;{])</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#variables</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#parameter-bindings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.type.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\bchoice\b</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>0</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>Matches choices.</string>
|
|
<key>end</key>
|
|
<string>(?=[;}])</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#variables</string>
|
|
</dict>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#parameter-bindings</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.type.carbon</string>
|
|
</dict>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\{</string>
|
|
<key>comment</key>
|
|
<string>Matches the choice values.</string>
|
|
<key>end</key>
|
|
<string>(?=})</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>variable.other.enummember.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>underscore</key>
|
|
<dict>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\b(_)\b</string>
|
|
<key>name</key>
|
|
<string>variable.language.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<key>variables</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>meta.variable.carbon</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>begin</key>
|
|
<string>\b(var|let)\b</string>
|
|
<key>beginCaptures</key>
|
|
<dict>
|
|
<key>0</key>
|
|
<dict>
|
|
<key>name</key>
|
|
<string>storage.type.carbon</string>
|
|
</dict>
|
|
</dict>
|
|
<key>comment</key>
|
|
<string>Matches variable declarations.</string>
|
|
<key>end</key>
|
|
<string>(?=:)</string>
|
|
<key>patterns</key>
|
|
<array>
|
|
<dict>
|
|
<key>include</key>
|
|
<string>#common</string>
|
|
</dict>
|
|
<dict>
|
|
<key>match</key>
|
|
<string>\w+</string>
|
|
<key>name</key>
|
|
<string>support.variable.carbon</string>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
</dict>
|
|
<key>scopeName</key>
|
|
<string>source.carbon</string>
|
|
<key>uuid</key>
|
|
<string>4568a54d-9a79-41ac-a36b-05916252763b</string>
|
|
</dict>
|
|
</plist>
|