tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,464 lines (1,463 loc) • 37.1 kB
JSON
{
"displayName": "TypeSpec",
"fileTypes": [
"tsp"
],
"name": "typespec",
"patterns": [
{
"include": "#statement"
}
],
"repository": {
"alias-id": {
"begin": "(=)\\s*",
"beginCaptures": {
"1": {
"name": "keyword.operator.assignment.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.alias-id.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"alias-statement": {
"begin": "(?:(internal)\\s+)?\\b(alias)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)\\s*",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "entity.name.type.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.alias-statement.typespec",
"patterns": [
{
"include": "#alias-id"
},
{
"include": "#type-parameters"
}
]
},
"augment-decorator-statement": {
"begin": "((@@)\\b[$_[:alpha:]](?:[$_[:alnum:]]|\\.[$_[:alpha:]])*)\\b",
"beginCaptures": {
"1": {
"name": "entity.name.tag.tsp"
},
"2": {
"name": "entity.name.tag.tsp"
}
},
"end": "(?=([$_`[:alpha:]]))|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.augment-decorator-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#parenthesized-expression"
}
]
},
"block-comment": {
"begin": "/\\*",
"end": "\\*/",
"name": "comment.block.tsp"
},
"boolean-literal": {
"match": "\\b(true|false)\\b",
"name": "constant.language.tsp"
},
"callExpression": {
"begin": "\\b([$_[:alpha:]](?:[$_[:alnum:]]|\\.[$_[:alpha:]])*)\\b\\s*(\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.tsp"
},
"2": {
"name": "punctuation.parenthesis.open.tsp"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.tsp"
}
},
"name": "meta.callExpression.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"const-statement": {
"begin": "(?:(internal)\\s+)?\\b(const)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "variable.name.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.const-statement.typespec",
"patterns": [
{
"include": "#type-annotation"
},
{
"include": "#operator-assignment"
},
{
"include": "#expression"
}
]
},
"decorator": {
"begin": "((@)\\b[$_[:alpha:]](?:[$_[:alnum:]]|\\.[$_[:alpha:]])*)\\b",
"beginCaptures": {
"1": {
"name": "entity.name.tag.tsp"
},
"2": {
"name": "entity.name.tag.tsp"
}
},
"end": "(?=([$_`[:alpha:]]))|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.decorator.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#parenthesized-expression"
}
]
},
"decorator-declaration-statement": {
"begin": "(?:(internal)\\s+)?(?:(extern)\\s+)?\\b(dec)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "keyword.other.tsp"
},
"4": {
"name": "entity.name.function.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.decorator-declaration-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#operation-parameters"
}
]
},
"directive": {
"begin": "\\s*(#)\\b([$_[:alpha:]][$_[:alnum:]]*)\\b",
"beginCaptures": {
"1": {
"name": "keyword.directive.name.tsp"
},
"2": {
"name": "keyword.directive.name.tsp"
}
},
"end": "$|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.directive.typespec",
"patterns": [
{
"include": "#string-literal"
},
{
"include": "#identifier-expression"
}
]
},
"doc-comment": {
"begin": "/\\*\\*",
"beginCaptures": {
"0": {
"name": "comment.block.tsp"
}
},
"end": "\\*/",
"endCaptures": {
"0": {
"name": "comment.block.tsp"
}
},
"name": "comment.block.tsp",
"patterns": [
{
"include": "#doc-comment-block"
}
]
},
"doc-comment-block": {
"patterns": [
{
"include": "#doc-comment-param"
},
{
"include": "#doc-comment-return-tag"
},
{
"include": "#doc-comment-unknown-tag"
}
]
},
"doc-comment-param": {
"captures": {
"1": {
"name": "keyword.tag.tspdoc"
},
"2": {
"name": "keyword.tag.tspdoc"
},
"3": {
"name": "variable.name.tsp"
}
},
"match": "((@)(?:param|template|prop))\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)\\b",
"name": "comment.block.tsp"
},
"doc-comment-return-tag": {
"captures": {
"1": {
"name": "keyword.tag.tspdoc"
},
"2": {
"name": "keyword.tag.tspdoc"
}
},
"match": "((@)returns)\\b",
"name": "comment.block.tsp"
},
"doc-comment-unknown-tag": {
"captures": {
"1": {
"name": "entity.name.tag.tsp"
},
"2": {
"name": "entity.name.tag.tsp"
}
},
"match": "((@)(?:\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`))\\b",
"name": "comment.block.tsp"
},
"enum-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.enum-body.typespec",
"patterns": [
{
"include": "#enum-member"
},
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#decorator"
},
{
"include": "#punctuation-comma"
}
]
},
"enum-member": {
"begin": "(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)\\s*(:?)",
"beginCaptures": {
"1": {
"name": "variable.name.tsp"
},
"2": {
"name": "keyword.operator.type.annotation.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.enum-member.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#type-annotation"
}
]
},
"enum-statement": {
"begin": "(?:(internal)\\s+)?\\b(enum)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "entity.name.type.tsp"
}
},
"end": "(?<=})|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.enum-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#enum-body"
}
]
},
"escape-character": {
"match": "\\\\.",
"name": "constant.character.escape.tsp"
},
"expression": {
"patterns": [
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#parenthesized-expression"
},
{
"include": "#valueof"
},
{
"include": "#typeof"
},
{
"include": "#type-arguments"
},
{
"include": "#object-literal"
},
{
"include": "#tuple-literal"
},
{
"include": "#tuple-expression"
},
{
"include": "#model-expression"
},
{
"include": "#callExpression"
},
{
"include": "#identifier-expression"
}
]
},
"function-declaration-statement": {
"begin": "(?:(internal)\\s+)?(?:(extern)\\s+)?\\b(fn)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "keyword.other.tsp"
},
"4": {
"name": "entity.name.function.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.function-declaration-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#operation-parameters"
},
{
"include": "#type-annotation"
}
]
},
"identifier-expression": {
"match": "\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`",
"name": "entity.name.type.tsp"
},
"import-statement": {
"begin": "\\b(import)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.import-statement.typespec",
"patterns": [
{
"include": "#token"
}
]
},
"interface-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.interface-body.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#decorator"
},
{
"include": "#interface-member"
},
{
"include": "#punctuation-semicolon"
}
]
},
"interface-heritage": {
"begin": "\\b(extends)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "((?=\\{)|(?=[);@}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b))",
"name": "meta.interface-heritage.typespec",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"interface-member": {
"begin": "(?:\\b(op)\\b\\s+)?(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
},
"2": {
"name": "entity.name.function.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.interface-member.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#operation-signature"
}
]
},
"interface-statement": {
"begin": "(?:(internal)\\s+)?\\b(interface)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
}
},
"end": "(?<=})|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.interface-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#type-parameters"
},
{
"include": "#interface-heritage"
},
{
"include": "#interface-body"
},
{
"include": "#expression"
}
]
},
"line-comment": {
"match": "//.*$",
"name": "comment.line.double-slash.tsp"
},
"model-expression": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.model-expression.typespec",
"patterns": [
{
"include": "#model-property"
},
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#decorator"
},
{
"include": "#spread-operator"
},
{
"include": "#punctuation-semicolon"
}
]
},
"model-heritage": {
"begin": "\\b(extends|is)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "((?=\\{)|(?=[);@}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b))",
"name": "meta.model-heritage.typespec",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"model-property": {
"begin": "(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)|(\"(?:[^\"\\\\]|\\\\.)*\")",
"beginCaptures": {
"1": {
"name": "variable.name.tsp"
},
"2": {
"name": "string.quoted.double.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.model-property.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#type-annotation"
},
{
"include": "#operator-assignment"
},
{
"include": "#expression"
}
]
},
"model-statement": {
"begin": "(?:(internal)\\s+)?\\b(model)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
}
},
"end": "(?<=})|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.model-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#type-parameters"
},
{
"include": "#model-heritage"
},
{
"include": "#expression"
}
]
},
"namespace-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.namespace-body.typespec",
"patterns": [
{
"include": "#statement"
}
]
},
"namespace-name": {
"begin": "(?=([$_`[:alpha:]]))",
"end": "((?=\\{)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b))",
"name": "meta.namespace-name.typespec",
"patterns": [
{
"include": "#identifier-expression"
},
{
"include": "#punctuation-accessor"
}
]
},
"namespace-statement": {
"begin": "\\b(namespace)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "((?<=})|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b))",
"name": "meta.namespace-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#namespace-name"
},
{
"include": "#namespace-body"
}
]
},
"numeric-literal": {
"match": "\\b(?<!\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\$)|\\b(?<!\\$)0[Bb][01][01_]*(n)?\\b(?!\\$)|(?<!\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\$)",
"name": "constant.numeric.tsp"
},
"object-literal": {
"begin": "#\\{",
"beginCaptures": {
"0": {
"name": "punctuation.hashcurlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.object-literal.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#object-literal-property"
},
{
"include": "#directive"
},
{
"include": "#spread-operator"
},
{
"include": "#punctuation-comma"
}
]
},
"object-literal-property": {
"begin": "(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)\\s*(:)",
"beginCaptures": {
"1": {
"name": "variable.name.tsp"
},
"2": {
"name": "keyword.operator.type.annotation.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.object-literal-property.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#expression"
}
]
},
"operation-heritage": {
"begin": "\\b(is)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.operation-heritage.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"operation-parameters": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.tsp"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.tsp"
}
},
"name": "meta.operation-parameters.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#decorator"
},
{
"include": "#model-property"
},
{
"include": "#spread-operator"
},
{
"include": "#punctuation-comma"
}
]
},
"operation-signature": {
"patterns": [
{
"include": "#type-parameters"
},
{
"include": "#operation-heritage"
},
{
"include": "#operation-parameters"
},
{
"include": "#type-annotation"
}
]
},
"operation-statement": {
"begin": "(?:(internal)\\s+)?\\b(op)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "entity.name.function.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.operation-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#operation-signature"
}
]
},
"operator-assignment": {
"match": "=",
"name": "keyword.operator.assignment.tsp"
},
"parenthesized-expression": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.tsp"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.tsp"
}
},
"name": "meta.parenthesized-expression.typespec",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"punctuation-accessor": {
"match": "\\.",
"name": "punctuation.accessor.tsp"
},
"punctuation-comma": {
"match": ",",
"name": "punctuation.comma.tsp"
},
"punctuation-semicolon": {
"match": ";",
"name": "punctuation.terminator.statement.tsp"
},
"scalar-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.scalar-body.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#scalar-constructor"
},
{
"include": "#punctuation-semicolon"
}
]
},
"scalar-constructor": {
"begin": "\\b(init)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
},
"2": {
"name": "entity.name.function.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.scalar-constructor.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#operation-parameters"
}
]
},
"scalar-extends": {
"begin": "\\b(extends)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "(?=[);@}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.scalar-extends.typespec",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"scalar-statement": {
"begin": "(?:(internal)\\s+)?\\b(scalar)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "entity.name.type.tsp"
}
},
"end": "(?<=})|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.scalar-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#type-parameters"
},
{
"include": "#scalar-extends"
},
{
"include": "#scalar-body"
}
]
},
"spread-operator": {
"begin": "\\.\\.\\.",
"beginCaptures": {
"0": {
"name": "keyword.operator.spread.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.spread-operator.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"statement": {
"patterns": [
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#augment-decorator-statement"
},
{
"include": "#decorator"
},
{
"include": "#model-statement"
},
{
"include": "#scalar-statement"
},
{
"include": "#union-statement"
},
{
"include": "#interface-statement"
},
{
"include": "#enum-statement"
},
{
"include": "#alias-statement"
},
{
"include": "#const-statement"
},
{
"include": "#namespace-statement"
},
{
"include": "#operation-statement"
},
{
"include": "#import-statement"
},
{
"include": "#using-statement"
},
{
"include": "#decorator-declaration-statement"
},
{
"include": "#function-declaration-statement"
},
{
"include": "#punctuation-semicolon"
}
]
},
"string-literal": {
"begin": "\"",
"end": "\"|$",
"name": "string.quoted.double.tsp",
"patterns": [
{
"include": "#template-expression"
},
{
"include": "#escape-character"
}
]
},
"template-expression": {
"begin": "\\$\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.template-expression.begin.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.template-expression.end.tsp"
}
},
"name": "meta.template-expression.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"token": {
"patterns": [
{
"include": "#doc-comment"
},
{
"include": "#line-comment"
},
{
"include": "#block-comment"
},
{
"include": "#triple-quoted-string-literal"
},
{
"include": "#string-literal"
},
{
"include": "#boolean-literal"
},
{
"include": "#numeric-literal"
}
]
},
"triple-quoted-string-literal": {
"begin": "\"\"\"",
"end": "\"\"\"",
"name": "string.quoted.triple.tsp",
"patterns": [
{
"include": "#template-expression"
},
{
"include": "#escape-character"
}
]
},
"tuple-expression": {
"begin": "\\[",
"beginCaptures": {
"0": {
"name": "punctuation.squarebracket.open.tsp"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.squarebracket.close.tsp"
}
},
"name": "meta.tuple-expression.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"tuple-literal": {
"begin": "#\\[",
"beginCaptures": {
"0": {
"name": "punctuation.hashsquarebracket.open.tsp"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.squarebracket.close.tsp"
}
},
"name": "meta.tuple-literal.typespec",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"type-annotation": {
"begin": "\\s*(\\??)\\s*(:)",
"beginCaptures": {
"1": {
"name": "keyword.operator.optional.tsp"
},
"2": {
"name": "keyword.operator.type.annotation.tsp"
}
},
"end": "(?=[),;=@}]|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.type-annotation.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"type-argument": {
"begin": "(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)\\s*(=)",
"beginCaptures": {
"1": {
"name": "entity.name.type.tsp"
},
"2": {
"name": "keyword.operator.assignment.tsp"
}
},
"end": "(?=>)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"endCaptures": {
"0": {
"name": "keyword.operator.assignment.tsp"
}
},
"name": "meta.type-argument.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"type-arguments": {
"begin": "<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.typeparameters.begin.tsp"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.typeparameters.end.tsp"
}
},
"name": "meta.type-arguments.typespec",
"patterns": [
{
"include": "#type-argument"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"type-parameter": {
"begin": "(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "entity.name.type.tsp"
}
},
"end": "(?=>)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.type-parameter.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#type-parameter-constraint"
},
{
"include": "#type-parameter-default"
}
]
},
"type-parameter-constraint": {
"begin": "extends",
"beginCaptures": {
"0": {
"name": "keyword.other.tsp"
}
},
"end": "(?=>)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.type-parameter-constraint.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"type-parameter-default": {
"begin": "=",
"beginCaptures": {
"0": {
"name": "keyword.operator.assignment.tsp"
}
},
"end": "(?=>)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.type-parameter-default.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"type-parameters": {
"begin": "<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.typeparameters.begin.tsp"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.typeparameters.end.tsp"
}
},
"name": "meta.type-parameters.typespec",
"patterns": [
{
"include": "#type-parameter"
},
{
"include": "#punctuation-comma"
}
]
},
"typeof": {
"begin": "\\b(typeof)",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "(?=>)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.typeof.typespec",
"patterns": [
{
"include": "#expression"
}
]
},
"union-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.tsp"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.tsp"
}
},
"name": "meta.union-body.typespec",
"patterns": [
{
"include": "#union-variant"
},
{
"include": "#token"
},
{
"include": "#directive"
},
{
"include": "#decorator"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"union-statement": {
"begin": "(?:(internal)\\s+)?\\b(union)\\b\\s+(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)",
"beginCaptures": {
"1": {
"name": "storage.modifier.tsp"
},
"2": {
"name": "keyword.other.tsp"
},
"3": {
"name": "entity.name.type.tsp"
}
},
"end": "(?<=})|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.union-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#union-body"
}
]
},
"union-variant": {
"begin": "(\\b[$_[:alpha:]][$_[:alnum:]]*\\b|`(?:[^\\\\`]|\\\\.)*`)\\s*(:)",
"beginCaptures": {
"1": {
"name": "variable.name.tsp"
},
"2": {
"name": "keyword.operator.type.annotation.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.union-variant.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#expression"
}
]
},
"using-statement": {
"begin": "\\b(using)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.using-statement.typespec",
"patterns": [
{
"include": "#token"
},
{
"include": "#identifier-expression"
},
{
"include": "#punctuation-accessor"
}
]
},
"valueof": {
"begin": "\\b(valueof)",
"beginCaptures": {
"1": {
"name": "keyword.other.tsp"
}
},
"end": "(?=>)|(?=[,;@]|#[a-z]|[)}]|\\b(?:extern|internal)\\b|\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b)",
"name": "meta.valueof.typespec",
"patterns": [
{
"include": "#expression"
}
]
}
},
"scopeName": "source.tsp"
}