$schema https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json fileTypes carbon foldingStartMarker \{\s*$ foldingStopMarker ^\s*\} name carbon patterns include #comments include #cpp-inline include #strings include #declarations include #keywords include #literals include #numbers include #operators include #identifiers include #punctuation repository comments patterns captures 1 name punctuation.definition.comment.carbon 2 name keyword.other.directive.carbon comment Toolchain directives, which are comments the driver acts on. match (//)(@(?:dump-sem-ir-(?:begin|end)|include-in-dumps))\b.*$ name comment.line.double-slash.carbon captures 1 name punctuation.definition.comment.carbon match (//).*$ name comment.line.double-slash.carbon cpp-inline patterns begin \b(?:(import)\s+(Cpp)\s+(inline)|(inline)\s+(Cpp))\s*(''')([^\s'\"#]*) beginCaptures 1 name storage.type.carbon 2 name support.class.carbon 3 name storage.type.carbon 4 name storage.type.carbon 5 name support.class.carbon 6 name punctuation.definition.string.begin.carbon 7 name entity.name.tag.language.carbon comment Inline C++, block form. contentName meta.embedded.block.cpp end (''')\s*(;)? endCaptures 1 name punctuation.definition.string.end.carbon 2 name punctuation.terminator.carbon patterns include source.cpp begin \b(?:(import)\s+(Cpp)\s+(inline)|(inline)\s+(Cpp))\s*(") beginCaptures 1 name storage.type.carbon 2 name support.class.carbon 3 name storage.type.carbon 4 name storage.type.carbon 5 name support.class.carbon 6 name punctuation.definition.string.begin.carbon comment Inline C++, single-line form. contentName meta.embedded.inline.cpp end (")\s*(;)? endCaptures 1 name punctuation.definition.string.end.carbon 2 name punctuation.terminator.carbon patterns include source.cpp declarations patterns captures 1 name storage.type.carbon 2 name entity.name.function.carbon comment Function declarations, including lambdas with a name. match \b(fn)\s+((?:r#)?[A-Za-z_][A-Za-z0-9_]*) captures 1 name storage.type.carbon 2 name entity.name.type.carbon comment Nominal type declarations. match \b(alias|choice|class|constraint|interface)\s+((?:r#)?[A-Za-z_][A-Za-z0-9_]*) captures 1 name storage.type.carbon 2 name entity.name.namespace.carbon comment Package, namespace, and import names. `library` and `inline` are keywords that may follow `import`, not names. match \b(package|namespace|import)\s+(?!(?:library|inline)\b)((?:r#)?[A-Za-z_][A-Za-z0-9_]*) identifiers patterns captures 1 name punctuation.definition.raw-identifier.carbon 2 name entity.name.type.carbon comment Raw identifiers, which suppress keyword meaning. match \b(r#)([A-Z][A-Za-z0-9_]*) captures 1 name punctuation.definition.raw-identifier.carbon 2 name variable.other.carbon match \b(r#)([a-z_][A-Za-z0-9_]*) comment An identifier applied to an argument list is a call. match \b[A-Za-z_][A-Za-z0-9_]*(?=\s*\() name entity.name.function.carbon comment UpperCamel names a type. match \b[A-Z][A-Za-z0-9_]*\b name entity.name.type.carbon comment lower_snake names a value. match \b[a-z_][A-Za-z0-9_]*\b name variable.other.carbon keywords patterns match \b(adapt|alias|choice|class|constraint|fn|import|inline|interface|let|library|match_first|namespace|observe|require|var)\b name storage.type.carbon comment `base` introduces a base class declaration unless it modifies one. match \b(base)\b(?!\s*class\b) name storage.type.carbon match \b(export)\b(?!\s*import\b) name storage.type.carbon match \b(impl)\b(?!\s*(fn|library|package)\b) name storage.type.carbon comment `package` is an introducer unless it begins a qualified name. match \b(package)\b(?!\.) name storage.type.carbon match \b(abstract|const|eval|extend|extern|final|generic|musteval|override|partial|private|protected|ref|runtime|static|template|unsafe|unused|val|virtual)\b name storage.modifier.carbon comment `default` is a declaration modifier unless it opens a match arm. match \b(default)\b(?!\s*=>) name storage.modifier.carbon match \b(base)\b(?=\s*class\b) name storage.modifier.carbon match \b(export)\b(?=\s*import\b) name storage.modifier.carbon match \b(impl)\b(?=\s*(fn|library|package)\b) name storage.modifier.carbon match \b(break|case|continue|else|for|if|match|return|returned|then|while)\b name keyword.control.carbon comment `default` is a match arm here, and a declaration modifier elsewhere. match \b(default)\b(?=\s*=>) name keyword.control.carbon match \b(and|as|impls|in|like|not|or|where)\b name keyword.control.carbon match \b(forall|form|friend)\b name keyword.other.carbon comment `.base` names the base class subobject. match (?<=\.)\b(base)\b name keyword.other.carbon literals patterns match \b(self|Self)\b name variable.language.carbon comment The wildcard pattern. match \b(_)\b name variable.language.carbon comment Language-provided package roots. match \b(Core|Cpp)\b name support.class.carbon comment `package` as a qualified-name root names the current package. match \b(package)\b(?=\.) name variable.language.carbon match \b(true|false)\b name constant.language.carbon match \b(array|auto|bool|char|str|type)\b name support.type.builtin.carbon comment Integer and float type literals. The lexer accepts any width, so this must not be restricted to the common ones. match \b[iuf][1-9][0-9]*\b name support.type.builtin.carbon numbers patterns match \b0x[_0-9A-Fa-f]*(?:\.[_0-9A-Fa-f]*)?(?:[pP][-+]?[0-9]+)? name constant.numeric.hex.carbon match \b0o[_0-7]* name constant.numeric.octal.carbon match \b0b[_01]* name constant.numeric.binary.carbon match \b[0-9][_0-9]*(?:\.[_0-9]+)?(?:[eE][-+]?[0-9]+)? name constant.numeric.decimal.carbon comment Positional parameter, as used in lambdas. match \$[0-9]+ name variable.parameter.carbon operators patterns match (\->\?|>>=|<=>|<<=|\&=|\^=|:=|:\?|==|=>|!=|>=|>>|<=|<>|<<|<\-|\-=|\->|\-\-|%=|\|=|\+=|\+\+|/=|\*=|\~=|\&|@|\^|:|=|!|>|<|\-|%|\.|\||\+|\?|/|\*|\~|\\) name keyword.operator.carbon punctuation patterns match , name punctuation.separator.carbon match ; name punctuation.terminator.carbon string-escapes patterns match \\(?:[tnr0'\"\\]|x[0-9A-Fa-f]{2}|u\{[0-9A-Fa-f]+\}) name constant.character.escape.carbon string-escapes-1 patterns match \\#(?:[tnr0'\"\\]|x[0-9A-Fa-f]{2}|u\{[0-9A-Fa-f]+\}) name constant.character.escape.carbon string-escapes-2 patterns match \\##(?:[tnr0'\"\\]|x[0-9A-Fa-f]{2}|u\{[0-9A-Fa-f]+\}) name constant.character.escape.carbon string-escapes-raw patterns match \\#{3,}(?:[tnr0'\"\\]|x[0-9A-Fa-f]{2}|u\{[0-9A-Fa-f]+\}) name constant.character.escape.carbon strings patterns begin (#{3,})(''')([^\s'\"#]*) beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name punctuation.definition.string.begin.carbon 3 name entity.name.tag.language.carbon comment Block string literal, with an optional file type indicator, raw at `###` level. end (''')\1 endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.triple.carbon patterns include #string-escapes-raw begin (##)(''')([^\s'\"#]*) beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name punctuation.definition.string.begin.carbon 3 name entity.name.tag.language.carbon comment Block string literal, with an optional file type indicator, raw at `##` level. end ('''##) endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.triple.carbon patterns include #string-escapes-2 begin (#)(''')([^\s'\"#]*) beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name punctuation.definition.string.begin.carbon 3 name entity.name.tag.language.carbon comment Block string literal, with an optional file type indicator, raw at `#` level. end ('''#) endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.triple.carbon patterns include #string-escapes-1 begin (''')([^\s'\"#]*) beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name entity.name.tag.language.carbon comment Block string literal, with an optional file type indicator. end (''') endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.triple.carbon patterns include #string-escapes begin (""")([^\s'\"#]*) beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name entity.name.tag.language.carbon comment A `"""` block is always an error, but highlighting it as a block string keeps the rest of the file readable. end (""") endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.triple.carbon patterns include #string-escapes begin (#{3,})(") beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name punctuation.definition.string.begin.carbon comment Single-line string literal, raw at `###` level. end (")\1|$ endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.double.carbon patterns include #string-escapes-raw begin (##)(") beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name punctuation.definition.string.begin.carbon comment Single-line string literal, raw at `##` level. end ("##)|$ endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.double.carbon patterns include #string-escapes-2 begin (#)(") beginCaptures 1 name punctuation.definition.string.begin.carbon 2 name punctuation.definition.string.begin.carbon comment Single-line string literal, raw at `#` level. end ("#)|$ endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.double.carbon patterns include #string-escapes-1 begin (") beginCaptures 1 name punctuation.definition.string.begin.carbon comment Single-line string literal. end (")|$ endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.double.carbon patterns include #string-escapes begin (') beginCaptures 1 name punctuation.definition.string.begin.carbon comment Character literal. end (')|$ endCaptures 1 name punctuation.definition.string.end.carbon name string.quoted.single.carbon patterns include #string-escapes scopeName source.carbon uuid 4568a54d-9a79-41ac-a36b-05916252763b