@inst/vscode-bin-darwin
Version:
BINARY ONLY - VSCode binary deployment for macOS
2,333 lines • 95.9 kB
JSON
{
"information_for_contributors": [
"This file has been converted from https://github.com/dotnet/csharp-tmLanguage/blob/master/grammars/csharp.tmLanguage",
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
"version": "https://github.com/dotnet/csharp-tmLanguage/commit/436456ee5ce44e29cb1752c3b29f493b1de08c42",
"name": "C#",
"scopeName": "source.cs",
"fileTypes": [
"cs"
],
"uuid": "f7de61e2-bdde-4e2a-a139-8221b179584e",
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#directives"
},
{
"include": "#declarations"
},
{
"include": "#script-top-level"
}
],
"repository": {
"directives": {
"patterns": [
{
"include": "#extern-alias-directive"
},
{
"include": "#using-directive"
},
{
"include": "#attribute-section"
},
{
"include": "#punctuation-semicolon"
}
]
},
"declarations": {
"patterns": [
{
"include": "#namespace-declaration"
},
{
"include": "#type-declarations"
},
{
"include": "#punctuation-semicolon"
}
]
},
"script-top-level": {
"patterns": [
{
"include": "#method-declaration"
},
{
"include": "#statement"
},
{
"include": "#punctuation-semicolon"
}
]
},
"type-declarations": {
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#storage-modifier"
},
{
"include": "#class-declaration"
},
{
"include": "#delegate-declaration"
},
{
"include": "#enum-declaration"
},
{
"include": "#interface-declaration"
},
{
"include": "#struct-declaration"
},
{
"include": "#attribute-section"
},
{
"include": "#punctuation-semicolon"
}
]
},
"class-or-struct-members": {
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#storage-modifier"
},
{
"include": "#type-declarations"
},
{
"include": "#field-declaration"
},
{
"include": "#event-declaration"
},
{
"include": "#property-declaration"
},
{
"include": "#indexer-declaration"
},
{
"include": "#variable-initializer"
},
{
"include": "#constructor-declaration"
},
{
"include": "#destructor-declaration"
},
{
"include": "#operator-declaration"
},
{
"include": "#conversion-operator-declaration"
},
{
"include": "#method-declaration"
},
{
"include": "#attribute-section"
},
{
"include": "#punctuation-semicolon"
}
]
},
"interface-members": {
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#event-declaration"
},
{
"include": "#property-declaration"
},
{
"include": "#indexer-declaration"
},
{
"include": "#method-declaration"
},
{
"include": "#attribute-section"
},
{
"include": "#punctuation-semicolon"
}
]
},
"statement": {
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#while-statement"
},
{
"include": "#do-statement"
},
{
"include": "#for-statement"
},
{
"include": "#foreach-statement"
},
{
"include": "#if-statement"
},
{
"include": "#else-part"
},
{
"include": "#switch-statement"
},
{
"include": "#goto-statement"
},
{
"include": "#return-statement"
},
{
"include": "#break-or-continue-statement"
},
{
"include": "#throw-statement"
},
{
"include": "#yield-statement"
},
{
"include": "#await-statement"
},
{
"include": "#try-statement"
},
{
"include": "#checked-unchecked-statement"
},
{
"include": "#lock-statement"
},
{
"include": "#using-statement"
},
{
"include": "#labeled-statement"
},
{
"include": "#local-declaration"
},
{
"include": "#block"
},
{
"include": "#expression"
},
{
"include": "#punctuation-semicolon"
}
]
},
"expression": {
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#checked-unchecked-expression"
},
{
"include": "#typeof-or-default-expression"
},
{
"include": "#nameof-expression"
},
{
"include": "#throw-expression"
},
{
"include": "#interpolated-string"
},
{
"include": "#verbatim-interpolated-string"
},
{
"include": "#this-or-base-expression"
},
{
"include": "#conditional-operator"
},
{
"include": "#expression-operators"
},
{
"include": "#await-expression"
},
{
"include": "#query-expression"
},
{
"include": "#as-expression"
},
{
"include": "#is-expression"
},
{
"include": "#anonymous-method-expression"
},
{
"include": "#object-creation-expression"
},
{
"include": "#array-creation-expression"
},
{
"include": "#anonymous-object-creation-expression"
},
{
"include": "#invocation-expression"
},
{
"include": "#member-access-expression"
},
{
"include": "#element-access-expression"
},
{
"include": "#cast-expression"
},
{
"include": "#literal"
},
{
"include": "#parenthesized-expression"
},
{
"include": "#tuple-deconstruction-assignment"
},
{
"include": "#initializer-expression"
},
{
"include": "#identifier"
}
]
},
"extern-alias-directive": {
"begin": "\\s*(extern)\\b\\s*(alias)\\b\\s*([_[:alpha:]][_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.other.extern.cs"
},
"2": {
"name": "keyword.other.alias.cs"
},
"3": {
"name": "variable.other.alias.cs"
}
},
"end": "(?=;)"
},
"using-directive": {
"patterns": [
{
"begin": "\\b(using)\\b\\s+(static)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.other.using.cs"
},
"2": {
"name": "keyword.other.static.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#type"
}
]
},
{
"begin": "\\b(using)\\s+(?=([_[:alpha:]][_[:alnum:]]*)\\s*=)",
"beginCaptures": {
"1": {
"name": "keyword.other.using.cs"
},
"2": {
"name": "entity.name.type.alias.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type"
},
{
"include": "#operator-assignment"
}
]
},
{
"begin": "\\b(using)\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.using.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"name": "entity.name.type.namespace.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
},
{
"include": "#operator-assignment"
}
]
}
]
},
"attribute-section": {
"begin": "(\\[)(assembly|module|field|event|method|param|property|return|type)?(\\:)?",
"beginCaptures": {
"1": {
"name": "punctuation.squarebracket.open.cs"
},
"2": {
"name": "keyword.other.attribute-specifier.cs"
},
"3": {
"name": "punctuation.separator.colon.cs"
}
},
"end": "(\\])",
"endCaptures": {
"1": {
"name": "punctuation.squarebracket.close.cs"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#attribute"
},
{
"include": "#punctuation-comma"
}
]
},
"attribute": {
"patterns": [
{
"include": "#type-name"
},
{
"include": "#attribute-arguments"
}
]
},
"attribute-arguments": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#attribute-named-argument"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"attribute-named-argument": {
"begin": "([_[:alpha:]][_[:alnum:]]*)\\s*(?==)",
"beginCaptures": {
"1": {
"name": "entity.name.variable.property.cs"
}
},
"end": "(?=(,|\\)))",
"patterns": [
{
"include": "#operator-assignment"
},
{
"include": "#expression"
}
]
},
"namespace-declaration": {
"begin": "\\b(namespace)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.other.namespace.cs"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#comment"
},
{
"name": "entity.name.type.namespace.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
},
{
"include": "#punctuation-accessor"
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#declarations"
},
{
"include": "#using-directive"
},
{
"include": "#punctuation-semicolon"
}
]
}
]
},
"storage-modifier": {
"name": "storage.modifier.cs",
"match": "(?<!\\.)\\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe)\\b"
},
"class-declaration": {
"begin": "(?=\\bclass\\b)",
"end": "(?<=\\})",
"patterns": [
{
"begin": "(?x)\n\\b(class)\\b\\s+\n([_[:alpha:]][_[:alnum:]]*)\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.class.cs"
},
"2": {
"name": "entity.name.type.class.cs"
}
},
"end": "(?=\\{)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameter-list"
},
{
"include": "#base-types"
},
{
"include": "#generic-constraints"
}
]
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#class-or-struct-members"
}
]
},
{
"include": "#preprocessor"
},
{
"include": "#comment"
}
]
},
"delegate-declaration": {
"begin": "(?x)\n(?:\\b(delegate)\\b)\\s+\n(?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.other.delegate.cs"
},
"2": {
"patterns": [
{
"include": "#type"
}
]
},
"7": {
"name": "entity.name.type.delegate.cs"
},
"8": {
"patterns": [
{
"include": "#type-parameter-list"
}
]
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#parenthesized-parameter-list"
},
{
"include": "#generic-constraints"
}
]
},
"enum-declaration": {
"begin": "(?=\\benum\\b)",
"end": "(?<=\\})",
"patterns": [
{
"begin": "(?=enum)",
"end": "(?=\\{)",
"patterns": [
{
"include": "#comment"
},
{
"match": "(enum)\\s+([_[:alpha:]][_[:alnum:]]*)",
"captures": {
"1": {
"name": "keyword.other.enum.cs"
},
"2": {
"name": "entity.name.type.enum.cs"
}
}
},
{
"begin": ":",
"beginCaptures": {
"0": {
"name": "punctuation.separator.colon.cs"
}
},
"end": "(?=\\{)",
"patterns": [
{
"include": "#type"
}
]
}
]
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#attribute-section"
},
{
"include": "#punctuation-comma"
},
{
"begin": "[_[:alpha:]][_[:alnum:]]*",
"beginCaptures": {
"0": {
"name": "entity.name.variable.enum-member.cs"
}
},
"end": "(?=(,|\\}))",
"patterns": [
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
}
]
},
{
"include": "#preprocessor"
},
{
"include": "#comment"
}
]
},
"interface-declaration": {
"begin": "(?=\\binterface\\b)",
"end": "(?<=\\})",
"patterns": [
{
"begin": "(?x)\n(interface)\\b\\s+\n([_[:alpha:]][_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.other.interface.cs"
},
"2": {
"name": "entity.name.type.interface.cs"
}
},
"end": "(?=\\{)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameter-list"
},
{
"include": "#base-types"
},
{
"include": "#generic-constraints"
}
]
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#interface-members"
}
]
},
{
"include": "#preprocessor"
},
{
"include": "#comment"
}
]
},
"struct-declaration": {
"begin": "(?=\\bstruct\\b)",
"end": "(?<=\\})",
"patterns": [
{
"begin": "(?x)\n(struct)\\b\\s+\n([_[:alpha:]][_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.other.struct.cs"
},
"2": {
"name": "entity.name.type.struct.cs"
}
},
"end": "(?=\\{)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameter-list"
},
{
"include": "#base-types"
},
{
"include": "#generic-constraints"
}
]
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#class-or-struct-members"
}
]
},
{
"include": "#preprocessor"
},
{
"include": "#comment"
}
]
},
"type-parameter-list": {
"begin": "\\<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.typeparameters.begin.cs"
}
},
"end": "\\>",
"endCaptures": {
"0": {
"name": "punctuation.definition.typeparameters.end.cs"
}
},
"patterns": [
{
"match": "\\b(in|out)\\b",
"captures": {
"1": {
"name": "storage.modifier.cs"
}
}
},
{
"match": "\\b([_[:alpha:]][_[:alnum:]]*)\\b",
"captures": {
"1": {
"name": "entity.name.type.type-parameter.cs"
}
}
},
{
"include": "#comment"
},
{
"include": "#punctuation-comma"
},
{
"include": "#attribute-section"
}
]
},
"base-types": {
"begin": ":",
"beginCaptures": {
"0": {
"name": "punctuation.separator.colon.cs"
}
},
"end": "(?=\\{|where)",
"patterns": [
{
"include": "#type"
},
{
"include": "#punctuation-comma"
},
{
"include": "#preprocessor"
}
]
},
"generic-constraints": {
"begin": "(where)\\s+([_[:alpha:]][_[:alnum:]]*)\\s*(:)",
"beginCaptures": {
"1": {
"name": "keyword.other.where.cs"
},
"2": {
"name": "storage.type.cs"
},
"3": {
"name": "punctuation.separator.colon.cs"
}
},
"end": "(?=\\{|where|;)",
"patterns": [
{
"name": "keyword.other.class.cs",
"match": "\\bclass\\b"
},
{
"name": "keyword.other.struct.cs",
"match": "\\bstruct\\b"
},
{
"match": "(new)\\s*(\\()\\s*(\\))",
"captures": {
"1": {
"name": "keyword.other.new.cs"
},
"2": {
"name": "punctuation.parenthesis.open.cs"
},
"3": {
"name": "punctuation.parenthesis.close.cs"
}
}
},
{
"include": "#type"
},
{
"include": "#punctuation-comma"
},
{
"include": "#generic-constraints"
}
]
},
"field-declaration": {
"begin": "(?x)\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)\\s* # first field name\n(?!=>|==)(?=,|;|=|$)",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"6": {
"name": "entity.name.variable.field.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"name": "entity.name.variable.field.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
},
{
"include": "#punctuation-comma"
},
{
"include": "#comment"
},
{
"include": "#variable-initializer"
},
{
"include": "#class-or-struct-members"
}
]
},
"property-declaration": {
"begin": "(?x)\n(?!.*\\b(?:class|interface|struct|enum|event)\\b)\\s*\n(?<return-type>\n (?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(?<property-name>\\g<identifier>)\\s*\n(?=\\{|=>|$)",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"7": {
"patterns": [
{
"include": "#type"
},
{
"include": "#punctuation-accessor"
}
]
},
"8": {
"name": "entity.name.variable.property.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#property-accessors"
},
{
"include": "#expression-body"
},
{
"include": "#variable-initializer"
},
{
"include": "#class-or-struct-members"
}
]
},
"indexer-declaration": {
"begin": "(?x)\n(?<return-type>\n (?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(?<indexer-name>this)\\s*\n(?=\\[)",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"7": {
"patterns": [
{
"include": "#type"
},
{
"include": "#punctuation-accessor"
}
]
},
"8": {
"name": "keyword.other.this.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#bracketed-parameter-list"
},
{
"include": "#property-accessors"
},
{
"include": "#expression-body"
},
{
"include": "#variable-initializer"
}
]
},
"event-declaration": {
"begin": "(?x)\n\\b(event)\\b\\s*\n(?<return-type>\n (?<type-name>\n (?:\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(?<event-names>\\g<identifier>(?:\\s*,\\s*\\g<identifier>)*)\\s*\n(?=\\{|;|$)",
"beginCaptures": {
"1": {
"name": "keyword.other.event.cs"
},
"2": {
"patterns": [
{
"include": "#type"
}
]
},
"8": {
"patterns": [
{
"include": "#type"
},
{
"include": "#punctuation-accessor"
}
]
},
"9": {
"patterns": [
{
"name": "entity.name.variable.event.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
},
{
"include": "#punctuation-comma"
}
]
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#event-accessors"
},
{
"include": "#punctuation-comma"
}
]
},
"property-accessors": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"name": "storage.modifier.cs",
"match": "\\b(private|protected|internal)\\b"
},
{
"name": "keyword.other.get.cs",
"match": "\\b(get)\\b"
},
{
"name": "keyword.other.set.cs",
"match": "\\b(set)\\b"
},
{
"include": "#comment"
},
{
"include": "#attribute-section"
},
{
"include": "#expression-body"
},
{
"include": "#block"
},
{
"include": "#punctuation-semicolon"
}
]
},
"event-accessors": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"name": "keyword.other.add.cs",
"match": "\\b(add)\\b"
},
{
"name": "keyword.other.remove.cs",
"match": "\\b(remove)\\b"
},
{
"include": "#comment"
},
{
"include": "#attribute-section"
},
{
"include": "#expression-body"
},
{
"include": "#block"
},
{
"include": "#punctuation-semicolon"
}
]
},
"method-declaration": {
"begin": "(?x)\n(?<return-type>\n (?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"7": {
"patterns": [
{
"include": "#type"
},
{
"include": "#punctuation-accessor"
}
]
},
"8": {
"name": "entity.name.function.cs"
},
"9": {
"patterns": [
{
"include": "#type-parameter-list"
}
]
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#parenthesized-parameter-list"
},
{
"include": "#generic-constraints"
},
{
"include": "#expression-body"
},
{
"include": "#block"
}
]
},
"constructor-declaration": {
"begin": "(?=[_[:alpha:]][_[:alnum:]]*\\s*\\()",
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"match": "\\b([_[:alpha:]][_[:alnum:]]*)\\b",
"captures": {
"1": {
"name": "entity.name.function.cs"
}
}
},
{
"begin": "(:)",
"beginCaptures": {
"1": {
"name": "punctuation.separator.colon.cs"
}
},
"end": "(?=\\{|=>)",
"patterns": [
{
"include": "#constructor-initializer"
}
]
},
{
"include": "#parenthesized-parameter-list"
},
{
"include": "#preprocessor"
},
{
"include": "#comment"
},
{
"include": "#expression-body"
},
{
"include": "#block"
}
]
},
"constructor-initializer": {
"begin": "\\b(?:(base)|(this))\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.other.base.cs"
},
"2": {
"name": "keyword.other.this.cs"
}
},
"end": "(?<=\\))",
"patterns": [
{
"include": "#argument-list"
}
]
},
"destructor-declaration": {
"begin": "(~)([_[:alpha:]][_[:alnum:]]*)\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "punctuation.tilde.cs"
},
"2": {
"name": "entity.name.function.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#parenthesized-parameter-list"
},
{
"include": "#expression-body"
},
{
"include": "#block"
}
]
},
"operator-declaration": {
"begin": "(?x)\n(?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?<operator-keyword>(?:\\b(?:operator)))\\s*\n(?<operator>(?:\\+|-|\\*|/|%|&|\\||\\^|\\<\\<|\\>\\>|==|!=|\\>|\\<|\\>=|\\<=|!|~|\\+\\+|--|true|false))\\s*\n(?=\\()",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"6": {
"name": "keyword.other.operator-decl.cs"
},
"7": {
"name": "entity.name.function.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#parenthesized-parameter-list"
},
{
"include": "#expression-body"
},
{
"include": "#block"
}
]
},
"conversion-operator-declaration": {
"begin": "(?x)\n(?<explicit-or-implicit-keyword>(?:\\b(?:explicit|implicit)))\\s*\n(?<operator-keyword>(?:\\b(?:operator)))\\s*\n(?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\()",
"beginCaptures": {
"1": {
"patterns": [
{
"match": "\\b(explicit)\\b",
"captures": {
"1": {
"name": "keyword.other.explicit.cs"
}
}
},
{
"match": "\\b(implicit)\\b",
"captures": {
"1": {
"name": "keyword.other.implicit.cs"
}
}
}
]
},
"2": {
"name": "keyword.other.operator-decl.cs"
},
"3": {
"patterns": [
{
"include": "#type"
}
]
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#parenthesized-parameter-list"
},
{
"include": "#expression-body"
},
{
"include": "#block"
}
]
},
"block": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#statement"
}
]
},
"variable-initializer": {
"begin": "(?<!=|!)(=)(?!=|>)",
"beginCaptures": {
"1": {
"name": "keyword.operator.assignment.cs"
}
},
"end": "(?=[,\\)\\];}])",
"patterns": [
{
"include": "#ref-modifier"
},
{
"include": "#expression"
}
]
},
"expression-body": {
"begin": "=>",
"beginCaptures": {
"0": {
"name": "keyword.operator.arrow.cs"
}
},
"end": "(?=[,\\);}])",
"patterns": [
{
"include": "#ref-modifier"
},
{
"include": "#expression"
}
]
},
"goto-statement": {
"begin": "(?<!\\.)\\b(goto)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.goto.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"begin": "\\b(case)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.case.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#expression"
}
]
},
{
"match": "\\b(default)\\b",
"captures": {
"1": {
"name": "keyword.control.default.cs"
}
}
},
{
"name": "entity.name.label.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
}
]
},
"return-statement": {
"begin": "(?<!\\.)\\b(return)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.flow.return.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#ref-modifier"
},
{
"include": "#expression"
}
]
},
"break-or-continue-statement": {
"match": "(?<!\\.)\\b(?:(break)|(continue))\\b",
"captures": {
"1": {
"name": "keyword.control.flow.break.cs"
},
"2": {
"name": "keyword.control.flow.continue.cs"
}
}
},
"throw-statement": {
"begin": "(?<!\\.)\\b(throw)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.flow.throw.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#expression"
}
]
},
"yield-statement": {
"patterns": [
{
"include": "#yield-return-statement"
},
{
"include": "#yield-break-statement"
}
]
},
"yield-return-statement": {
"begin": "(?<!\\.)\\b(yield)\\b\\s*\\b(return)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.flow.yield.cs"
},
"2": {
"name": "keyword.control.flow.return.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#expression"
}
]
},
"yield-break-statement": {
"match": "(?<!\\.)\\b(yield)\\b\\s*\\b(break)\\b",
"captures": {
"1": {
"name": "keyword.control.flow.yield.cs"
},
"2": {
"name": "keyword.control.flow.break.cs"
}
}
},
"await-statement": {
"begin": "(?<!\\.)\\b(await)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.await.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#expression"
}
]
},
"if-statement": {
"begin": "(?<!\\.)\\b(if)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.conditional.if.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
{
"include": "#statement"
}
]
},
"else-part": {
"begin": "(?<!\\.)\\b(else)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.conditional.else.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"include": "#statement"
}
]
},
"switch-statement": {
"begin": "(?<!\\.)\\b(switch)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.switch.cs"
}
},
"end": "(?<=\\})",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#switch-label"
},
{
"include": "#statement"
}
]
}
]
},
"switch-label": {
"patterns": [
{
"begin": "(?<!\\.)\\b(case)\\b\\s+",
"beginCaptures": {
"1": {
"name": "keyword.control.case.cs"
}
},
"end": ":",
"endCaptures": {
"0": {
"name": "punctuation.separator.colon.cs"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
{
"match": "(?<!\\.)\\b(default)\\b\\s*(:)",
"captures": {
"1": {
"name": "keyword.control.default.cs"
},
"2": {
"name": "punctuation.separator.colon.cs"
}
}
}
]
},
"do-statement": {
"begin": "(?<!\\.)\\b(do)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.loop.do.cs"
}
},
"end": "(?=;|})",
"patterns": [
{
"include": "#statement"
}
]
},
"while-statement": {
"begin": "(?<!\\.)\\b(while)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.loop.while.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
{
"include": "#statement"
}
]
},
"for-statement": {
"begin": "(?<!\\.)\\b(for)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.loop.for.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#local-variable-declaration"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
},
{
"include": "#punctuation-semicolon"
}
]
},
{
"include": "#statement"
}
]
},
"foreach-statement": {
"begin": "(?<!\\.)\\b(foreach)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.loop.foreach.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"match": "(?x)\n(?:\n (\\bvar\\b)|\n (?<type-name>\n (?:\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g<identifier>)\\s+\n\\b(in)\\b",
"captures": {
"1": {
"name": "keyword.other.var.cs"
},
"2": {
"patterns": [
{
"include": "#type"
}
]
},
"7": {
"name": "entity.name.variable.local.cs"
},
"8": {
"name": "keyword.control.loop.in.cs"
}
}
},
{
"match": "(?x) # match foreach (var (x, y) in ...)\n(?:\\b(var)\\b\\s*)?\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s+\n\\b(in)\\b",
"captures": {
"1": {
"name": "keyword.other.var.cs"
},
"2": {
"patterns": [
{
"include": "#tuple-declaration-deconstruction-element-list"
}
]
},
"3": {
"name": "keyword.control.loop.in.cs"
}
}
},
{
"include": "#expression"
}
]
},
{
"include": "#statement"
}
]
},
"try-statement": {
"patterns": [
{
"include": "#try-block"
},
{
"include": "#catch-clause"
},
{
"include": "#finally-clause"
}
]
},
"try-block": {
"begin": "(?<!\\.)\\b(try)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.try.cs"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#comment"
},
{
"include": "#block"
}
]
},
"finally-clause": {
"begin": "(?<!\\.)\\b(finally)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.try.finally.cs"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#comment"
},
{
"include": "#block"
}
]
},
"catch-clause": {
"begin": "(?<!\\.)\\b(catch)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.try.catch.cs"
}
},
"end": "(?<=\\})",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"match": "(?x)\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?:\\b(\\g<identifier>)\\b)?",
"captures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"6": {
"name": "entity.name.variable.local.cs"
}
}
}
]
},
{
"include": "#when-clause"
},
{
"include": "#comment"
},
{
"include": "#block"
}
]
},
"when-clause": {
"begin": "(?<!\\.)\\b(when)\\b\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.try.when.cs"
},
"2": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#expression"
},
{
"include": "#comment"
}
]
},
"checked-unchecked-statement": {
"begin": "(?<!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(?!\\()",
"beginCaptures": {
"1": {
"name": "keyword.other.checked.cs"
},
"2": {
"name": "keyword.other.unchecked.cs"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#block"
}
]
},
"lock-statement": {
"begin": "(?<!\\.)\\b(lock)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.other.lock.cs"
}
},
"end": "(?<=\\})|(?=;)",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
{
"include": "#statement"
}
]
},
"using-statement": {
"begin": "(?<!\\.)\\b(using)\\b\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.other.using.cs"
}
},
"end": "(?=\\;|})",
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#local-variable-declaration"
},
{
"include": "#expression"
}
]
},
{
"include": "#statement"
}
]
},
"labeled-statement": {
"match": "([_[:alpha:]][_[:alnum:]]*)\\s*(:)",
"captures": {
"1": {
"name": "entity.name.label.cs"
},
"2": {
"name": "punctuation.separator.colon.cs"
}
}
},
"local-declaration": {
"patterns": [
{
"include": "#local-constant-declaration"
},
{
"include": "#local-variable-declaration"
},
{
"include": "#local-tuple-var-deconstruction"
}
]
},
"local-variable-declaration": {
"begin": "(?x)\n(?:\n (?:(\\bref)\\s+)?(\\bvar\\b)| # ref local\n (?<type-name>\n (?:\n (?:ref\\s+)? # ref local\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g<identifier>)\\s*\n(?=,|;|=|\\))",
"beginCaptures": {
"1": {
"name": "storage.modifier.cs"
},
"2": {
"name": "keyword.other.var.cs"
},
"3": {
"patterns": [
{
"include": "#type"
}
]
},
"8": {
"name": "entity.name.variable.local.cs"
}
},
"end": "(?=;|\\))",
"patterns": [
{
"name": "entity.name.variable.local.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
},
{
"include": "#punctuation-comma"
},
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
"local-constant-declaration": {
"begin": "(?x)\n(?<const-keyword>\\b(?:const)\\b)\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)\\s*\n(?=,|;|=)",
"beginCaptures": {
"1": {
"name": "storage.modifier.cs"
},
"2": {
"patterns": [
{
"include": "#type"
}
]
},
"7": {
"name": "entity.name.variable.local.cs"
}
},
"end": "(?=;)",
"patterns": [
{
"name": "entity.name.variable.local.cs",
"match": "[_[:alpha:]][_[:alnum:]]*"
},
{
"include": "#punctuation-comma"
},
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
"local-tuple-var-deconstruction": {
"begin": "(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s*\n(?=;|=|\\))",
"beginCaptures": {
"1": {
"name": "keyword.other.var.cs"
},
"2": {
"patterns": [
{
"include": "#tuple-declaration-deconstruction-element-list"
}
]
}
},
"end": "(?=;|\\))",
"patterns": [
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
"tuple-deconstruction-assignment": {
"match": "(?x)\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s*\n(?!=>|==)(?==)",
"captures": {
"1": {
"patterns": [
{
"include": "#tuple-deconstruction-element-list"
}
]
}
}
},
"tuple-declaration-deconstruction-element-list": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#tuple-declaration-deconstruction-element-list"
},
{
"include": "#declaration-expression-tuple"
},
{
"include": "#punctuation-comma"
},
{
"match": "(?x) # e.g. x\n\\b([_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])",
"captures": {
"1": {
"name": "entity.name.variable.tuple-element.cs"
}
}
}
]
},
"tuple-deconstruction-element-list": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#tuple-deconstruction-element-list"
},
{
"include": "#declaration-expression-tuple"
},
{
"include": "#punctuation-comma"
},
{
"match": "(?x) # e.g. x\n\\b([_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])",
"captures": {
"1": {
"name": "variable.other.readwrite.cs"
}
}
}
]
},
"declaration-expression-local": {
"match": "(?x) # e.g. int x