shiki
Version:
A beautiful Syntax Highlighter.
5 lines • 93.3 kB
JavaScript
const lang = Object.freeze({ "displayName": "C#", "name": "csharp", "patterns": [{ "include": "#preprocessor" }, { "include": "#comment" }, { "include": "#directives" }, { "include": "#declarations" }, { "include": "#script-top-level" }], "repository": { "accessor-getter": { "patterns": [{ "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.curlybrace.open.cs" } }, "contentName": "meta.accessor.getter.cs", "end": "\\}", "endCaptures": { "0": { "name": "punctuation.curlybrace.close.cs" } }, "patterns": [{ "include": "#statement" }] }, { "include": "#accessor-getter-expression" }, { "include": "#punctuation-semicolon" }] }, "accessor-getter-expression": { "begin": "=>", "beginCaptures": { "0": { "name": "keyword.operator.arrow.cs" } }, "contentName": "meta.accessor.getter.cs", "end": "(?=;|\\})", "patterns": [{ "include": "#ref-modifier" }, { "include": "#expression" }] }, "accessor-setter": { "patterns": [{ "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.curlybrace.open.cs" } }, "contentName": "meta.accessor.setter.cs", "end": "\\}", "endCaptures": { "0": { "name": "punctuation.curlybrace.close.cs" } }, "patterns": [{ "include": "#statement" }] }, { "begin": "=>", "beginCaptures": { "0": { "name": "keyword.operator.arrow.cs" } }, "contentName": "meta.accessor.setter.cs", "end": "(?=;|\\})", "patterns": [{ "include": "#ref-modifier" }, { "include": "#expression" }] }, { "include": "#punctuation-semicolon" }] }, "anonymous-method-expression": { "patterns": [{ "begin": "(?x)\n((?:\\b(?:async|static)\\b\\s*)*)\n(?:\n(@?[_[:alpha:]][_[:alnum:]]*)\\b|\n(\\()\n(?<tuple>(?:[^()]|\\(\\g<tuple>\\))*)\n(\\))\n)\\s*\n(=>)", "beginCaptures": { "1": { "patterns": [{ "match": "async|static", "name": "storage.modifier.$0.cs" }] }, "2": { "name": "entity.name.variable.parameter.cs" }, "3": { "name": "punctuation.parenthesis.open.cs" }, "4": { "patterns": [{ "include": "#comment" }, { "include": "#explicit-anonymous-function-parameter" }, { "include": "#implicit-anonymous-function-parameter" }, { "include": "#default-argument" }, { "include": "#punctuation-comma" }] }, "5": { "name": "punctuation.parenthesis.close.cs" }, "6": { "name": "keyword.operator.arrow.cs" } }, "end": "(?=[,;)}])", "patterns": [{ "include": "#intrusive" }, { "begin": "(?={)", "end": "(?=[,;)}])", "patterns": [{ "include": "#block" }, { "include": "#intrusive" }] }, { "begin": "\\b(ref)\\b|(?=\\S)", "beginCaptures": { "1": { "name": "storage.modifier.ref.cs" } }, "end": "(?=[,;)}])", "patterns": [{ "include": "#expression" }] }] }, { "begin": "(?x)\n((?:\\b(?:async|static)\\b\\s*)*)\n\\b(delegate)\\b\\s*", "beginCaptures": { "1": { "patterns": [{ "match": "async|static", "name": "storage.modifier.$0.cs" }] }, "2": { "name": "storage.type.delegate.cs" } }, "end": "(?<=})|(?=[,;)}])", "patterns": [{ "include": "#intrusive" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#intrusive" }, { "include": "#explicit-anonymous-function-parameter" }, { "include": "#punctuation-comma" }] }, { "include": "#block" }] }] }, "anonymous-object-creation-expression": { "begin": "\\b(new)\\b\\s*(?=\\{|//|/\\*|$)", "beginCaptures": { "1": { "name": "keyword.operator.expression.new.cs" } }, "end": "(?<=\\})", "patterns": [{ "include": "#comment" }, { "include": "#initializer-expression" }] }, "argument": { "patterns": [{ "match": "\\b(ref|in)\\b", "name": "storage.modifier.$1.cs" }, { "begin": "\\b(out)\\b", "beginCaptures": { "1": { "name": "storage.modifier.out.cs" } }, "end": "(?=,|\\)|\\])", "patterns": [{ "include": "#declaration-expression-local" }, { "include": "#expression" }] }, { "include": "#expression" }] }, "argument-list": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#named-argument" }, { "include": "#argument" }, { "include": "#punctuation-comma" }] }, "array-creation-expression": { "begin": "(?x)\n\\b(new|stackalloc)\\b\\s*\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)?\\s*\n(?=\\[)", "beginCaptures": { "1": { "name": "keyword.operator.expression.$1.cs" }, "2": { "patterns": [{ "include": "#type" }] } }, "end": "(?<=\\])", "patterns": [{ "include": "#bracketed-argument-list" }] }, "as-expression": { "captures": { "1": { "name": "keyword.operator.expression.as.cs" }, "2": { "patterns": [{ "include": "#type" }] } }, "match": "(?x)\n(?<!\\.)\\b(as)\\b\\s*\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?(?!\\?))?\n(?:\\s*\n\\[\n\\s*(?:,\\s*)*\n\\]\n(?:\\s*\\?(?!\\?))?\n)*\n)\n)?" }, "assignment-expression": { "begin": "(?:\\*|/|%|\\+|-|\\?\\?|\\&|\\^|<<|>>>?|\\|)?=(?!=|>)", "beginCaptures": { "0": { "patterns": [{ "include": "#assignment-operators" }] } }, "end": "(?=[,\\)\\];}])", "patterns": [{ "include": "#ref-modifier" }, { "include": "#expression" }] }, "assignment-operators": { "patterns": [{ "match": "\\*=|/=|%=|\\+=|-=|\\?\\?=", "name": "keyword.operator.assignment.compound.cs" }, { "match": "\\&=|\\^=|<<=|>>>?=|\\|=", "name": "keyword.operator.assignment.compound.bitwise.cs" }, { "match": "\\=", "name": "keyword.operator.assignment.cs" }] }, "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" }] }, "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" }] }, "await-expression": { "match": "(?<!\\.\\s*)\\b(await)\\b", "name": "keyword.operator.expression.await.cs" }, "await-statement": { "begin": "(?<!\\.\\s*)\\b(await)\\b", "beginCaptures": { "1": { "name": "keyword.operator.expression.await.cs" } }, "end": "(?<=})|(?=;|})", "patterns": [{ "include": "#foreach-statement" }, { "include": "#using-statement" }, { "include": "#expression" }] }, "base-types": { "begin": ":", "beginCaptures": { "0": { "name": "punctuation.separator.colon.cs" } }, "end": "(?=\\{|where|;)", "patterns": [{ "include": "#type" }, { "include": "#punctuation-comma" }, { "include": "#preprocessor" }] }, "block": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.curlybrace.open.cs" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.curlybrace.close.cs" } }, "patterns": [{ "include": "#statement" }] }, "boolean-literal": { "patterns": [{ "match": "(?<!\\.)\\btrue\\b", "name": "constant.language.boolean.true.cs" }, { "match": "(?<!\\.)\\bfalse\\b", "name": "constant.language.boolean.false.cs" }] }, "bracketed-argument-list": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.squarebracket.open.cs" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.squarebracket.close.cs" } }, "patterns": [{ "include": "#named-argument" }, { "include": "#argument" }, { "include": "#punctuation-comma" }] }, "bracketed-parameter-list": { "begin": "(?=(\\[))", "beginCaptures": { "1": { "name": "punctuation.squarebracket.open.cs" } }, "end": "(?=(\\]))", "endCaptures": { "1": { "name": "punctuation.squarebracket.close.cs" } }, "patterns": [{ "begin": "(?<=\\[)", "end": "(?=\\])", "patterns": [{ "include": "#comment" }, { "include": "#attribute-section" }, { "include": "#parameter" }, { "include": "#punctuation-comma" }, { "include": "#variable-initializer" }] }] }, "break-or-continue-statement": { "match": "(?<!\\.)\\b(break|continue)\\b", "name": "keyword.control.flow.$1.cs" }, "case-guard": { "patterns": [{ "include": "#parenthesized-expression" }, { "include": "#expression" }] }, "cast-expression": { "captures": { "1": { "name": "punctuation.parenthesis.open.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "punctuation.parenthesis.close.cs" } }, "match": "(?x)\n(\\()\\s*\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s*\n(\\))(?=\\s*-*!*@?[_[:alnum:]\\(])" }, "casted-constant-pattern": { "begin": `(?x)
(\\()
([\\s.:@_[:alnum:]]+)
(\\))
(?=[\\s+\\-!~]*@?[_[:alnum:]('"]+)`, "beginCaptures": { "1": { "name": "punctuation.parenthesis.open.cs" }, "2": { "patterns": [{ "include": "#type-builtin" }, { "include": "#type-name" }] }, "3": { "name": "punctuation.parenthesis.close.cs" } }, "end": "(?=[)}\\],;:?=&|^]|!=|\\b(and|or|when)\\b)", "patterns": [{ "include": "#casted-constant-pattern" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#constant-pattern" }] }, { "include": "#constant-pattern" }, { "captures": { "1": { "name": "entity.name.type.alias.cs" }, "2": { "name": "punctuation.separator.coloncolon.cs" } }, "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\:\\:)" }, { "captures": { "1": { "name": "entity.name.type.cs" }, "2": { "name": "punctuation.accessor.cs" } }, "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\.)" }, { "match": "\\@?[_[:alpha:]][_[:alnum:]]*", "name": "variable.other.constant.cs" }] }, "catch-clause": { "begin": "(?<!\\.)\\b(catch)\\b", "beginCaptures": { "1": { "name": "keyword.control.exception.catch.cs" } }, "end": "(?<=\\})", "patterns": [{ "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "captures": { "1": { "patterns": [{ "include": "#type" }] }, "6": { "name": "entity.name.variable.local.cs" } }, "match": "(?x)\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s*\n(?:(\\g<identifier>)\\b)?" }] }, { "include": "#when-clause" }, { "include": "#comment" }, { "include": "#block" }] }, "char-character-escape": { "match": "\\\\(x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4}|.)", "name": "constant.character.escape.cs" }, "char-literal": { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.char.begin.cs" } }, "end": "(\\')|((?:[^\\\\\\n])$)", "endCaptures": { "1": { "name": "punctuation.definition.char.end.cs" }, "2": { "name": "invalid.illegal.newline.cs" } }, "name": "string.quoted.single.cs", "patterns": [{ "include": "#char-character-escape" }] }, "class-declaration": { "begin": "(?=(\\brecord\\b\\s+)?\\bclass\\b)", "end": "(?<=\\})|(?=;)", "patterns": [{ "begin": "(?x)\n(\\b(record)\\b\\s+)?\n\\b(class)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*", "beginCaptures": { "2": { "name": "storage.type.record.cs" }, "3": { "name": "storage.type.class.cs" }, "4": { "name": "entity.name.type.class.cs" } }, "end": "(?=\\{)|(?=;)", "patterns": [{ "include": "#comment" }, { "include": "#type-parameter-list" }, { "include": "#parenthesized-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" }] }, "class-or-struct-members": { "patterns": [{ "include": "#preprocessor" }, { "include": "#comment" }, { "include": "#storage-modifier" }, { "include": "#type-declarations" }, { "include": "#property-declaration" }, { "include": "#field-declaration" }, { "include": "#event-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" }] }, "combinator-pattern": { "match": "\\b(and|or|not)\\b", "name": "keyword.operator.expression.pattern.combinator.$1.cs" }, "comment": { "patterns": [{ "begin": "(^\\s+)?(///)(?!/)", "captures": { "1": { "name": "punctuation.whitespace.comment.leading.cs" }, "2": { "name": "punctuation.definition.comment.cs" } }, "name": "comment.block.documentation.cs", "patterns": [{ "include": "#xml-doc-comment" }], "while": "^(\\s*)(///)(?!/)" }, { "begin": "(^\\s+)?(/\\*\\*)(?!/)", "captures": { "1": { "name": "punctuation.whitespace.comment.leading.cs" }, "2": { "name": "punctuation.definition.comment.cs" } }, "end": "(^\\s+)?(\\*/)", "name": "comment.block.documentation.cs", "patterns": [{ "begin": "\\G(?=(?~\\*/)$)", "patterns": [{ "include": "#xml-doc-comment" }], "while": "^(\\s*+)(\\*(?!/))?(?=(?~\\*/)$)", "whileCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.cs" }, "2": { "name": "punctuation.definition.comment.cs" } } }, { "include": "#xml-doc-comment" }] }, { "begin": "(^\\s+)?(//).*$", "captures": { "1": { "name": "punctuation.whitespace.comment.leading.cs" }, "2": { "name": "punctuation.definition.comment.cs" } }, "name": "comment.line.double-slash.cs", "while": "^(\\s*)(//).*$" }, { "begin": "/\\*", "captures": { "0": { "name": "punctuation.definition.comment.cs" } }, "end": "\\*/", "name": "comment.block.cs" }] }, "conditional-operator": { "patterns": [{ "match": "\\?(?!\\?|\\s*[.\\[])", "name": "keyword.operator.conditional.question-mark.cs" }, { "match": ":", "name": "keyword.operator.conditional.colon.cs" }] }, "constant-pattern": { "patterns": [{ "include": "#boolean-literal" }, { "include": "#null-literal" }, { "include": "#numeric-literal" }, { "include": "#char-literal" }, { "include": "#string-literal" }, { "include": "#raw-string-literal" }, { "include": "#verbatim-string-literal" }, { "include": "#type-operator-expression" }, { "include": "#expression-operator-expression" }, { "include": "#expression-operators" }, { "include": "#casted-constant-pattern" }] }, "constructor-declaration": { "begin": "(?=@?[_[:alpha:]][_[:alnum:]]*\\s*\\()", "end": "(?<=\\})|(?=;)", "patterns": [{ "captures": { "1": { "name": "entity.name.function.cs" } }, "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\b" }, { "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": "variable.language.$1.cs" } }, "end": "(?<=\\))", "patterns": [{ "include": "#argument-list" }] }, "context-control-paren-statement": { "patterns": [{ "include": "#fixed-statement" }, { "include": "#lock-statement" }, { "include": "#using-statement" }] }, "context-control-statement": { "match": "\\b(checked|unchecked|unsafe)\\b(?!\\s*[@_[:alpha:](])", "name": "keyword.control.context.$1.cs" }, "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+(?:readonly\\s+)?)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s*\n(?=\\()", "beginCaptures": { "1": { "patterns": [{ "captures": { "1": { "name": "storage.modifier.explicit.cs" } }, "match": "\\b(explicit)\\b" }, { "captures": { "1": { "name": "storage.modifier.implicit.cs" } }, "match": "\\b(implicit)\\b" }] }, "2": { "name": "storage.type.operator.cs" }, "3": { "patterns": [{ "include": "#type" }] } }, "end": "(?<=\\})|(?=;)", "patterns": [{ "include": "#comment" }, { "include": "#parenthesized-parameter-list" }, { "include": "#expression-body" }, { "include": "#block" }] }, "declaration-expression-local": { "captures": { "1": { "name": "storage.type.var.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "entity.name.variable.local.cs" } }, "match": "(?x)\n(?:\n\\b(var)\\b|\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\n)\\s+\n(\\g<identifier>)\\b\\s*\n(?=[,)\\]])" }, "declaration-expression-tuple": { "captures": { "1": { "name": "storage.type.var.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "entity.name.variable.tuple-element.cs" } }, "match": "(?x)\n(?:\n\\b(var)\\b|\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\n)\\s+\n(\\g<identifier>)\\b\\s*\n(?=[,)])" }, "declarations": { "patterns": [{ "include": "#namespace-declaration" }, { "include": "#type-declarations" }, { "include": "#punctuation-semicolon" }] }, "default-argument": { "begin": "=", "beginCaptures": { "0": { "name": "keyword.operator.assignment.cs" } }, "end": "(?=,|\\))", "patterns": [{ "include": "#expression" }] }, "default-literal-expression": { "captures": { "1": { "name": "keyword.operator.expression.default.cs" } }, "match": "\\b(default)\\b" }, "delegate-declaration": { "begin": "(?x)\n(?:\\b(delegate)\\b)\\s+\n(?<type_name>\n(?:\n(?:ref\\s+(?:readonly\\s+)?)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s+\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()", "beginCaptures": { "1": { "name": "storage.type.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" }] }, "designation-pattern": { "patterns": [{ "include": "#intrusive" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#punctuation-comma" }, { "include": "#designation-pattern" }] }, { "include": "#simple-designation-pattern" }] }, "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" }] }, "directives": { "patterns": [{ "include": "#extern-alias-directive" }, { "include": "#using-directive" }, { "include": "#attribute-section" }, { "include": "#punctuation-semicolon" }] }, "discard-pattern": { "match": "_(?![_[:alnum:]])", "name": "variable.language.discard.cs" }, "do-statement": { "begin": "(?<!\\.)\\b(do)\\b", "beginCaptures": { "1": { "name": "keyword.control.loop.do.cs" } }, "end": "(?=;|})", "patterns": [{ "include": "#statement" }] }, "double-raw-interpolation": { "begin": "(?<=[^\\{][^\\{]|^)((?:\\{)*)(\\{\\{)(?=[^\\{])", "beginCaptures": { "1": { "name": "string.quoted.double.cs" }, "2": { "name": "punctuation.definition.interpolation.begin.cs" } }, "end": "\\}\\}", "endCaptures": { "0": { "name": "punctuation.definition.interpolation.end.cs" } }, "name": "meta.interpolation.cs", "patterns": [{ "include": "#expression" }] }, "element-access-expression": { "begin": "(?x)\n(?:\n(?:(\\?)\\s*)?\n(\\.)\\s*|\n(->)\\s*\n)?\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*)?\n(?:(\\?)\\s*)?\n(?=\\[)", "beginCaptures": { "1": { "name": "keyword.operator.null-conditional.cs" }, "2": { "name": "punctuation.accessor.cs" }, "3": { "name": "punctuation.accessor.pointer.cs" }, "4": { "name": "variable.other.object.property.cs" }, "5": { "name": "keyword.operator.null-conditional.cs" } }, "end": "(?<=\\])(?!\\s*\\[)", "patterns": [{ "include": "#bracketed-argument-list" }] }, "else-part": { "begin": "(?<!\\.)\\b(else)\\b", "beginCaptures": { "1": { "name": "keyword.control.conditional.else.cs" } }, "end": "(?<=})|(?=;)", "patterns": [{ "include": "#statement" }] }, "enum-declaration": { "begin": "(?=\\benum\\b)", "end": "(?<=\\})", "patterns": [{ "begin": "(?=enum)", "end": "(?=\\{)", "patterns": [{ "include": "#comment" }, { "captures": { "1": { "name": "storage.type.enum.cs" }, "2": { "name": "entity.name.type.enum.cs" } }, "match": "(enum)\\s+(@?[_[:alpha:]][_[:alnum:]]*)" }, { "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" }] }, "event-accessors": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.curlybrace.open.cs" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.curlybrace.close.cs" } }, "patterns": [{ "include": "#comment" }, { "include": "#attribute-section" }, { "begin": "\\b(add|remove)\\b\\s*(?=\\{|;|=>|//|/\\*|$)", "beginCaptures": { "1": { "name": "storage.type.accessor.$1.cs" } }, "end": "(?<=\\}|;)|(?=\\})", "patterns": [{ "include": "#accessor-setter" }] }] }, "event-declaration": { "begin": "(?x)\n\\b(event)\\b\\s*\n(?<return_type>\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s+\n)\n(?<interface_name>\\g<type_name>\\s*\\.\\s*)?\n(\\g<identifier>)\\s*\n(?=\\{|;|,|=|//|/\\*|$)", "beginCaptures": { "1": { "name": "storage.type.event.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "8": { "patterns": [{ "include": "#type" }, { "include": "#punctuation-accessor" }] }, "9": { "name": "entity.name.variable.event.cs" } }, "end": "(?<=\\})|(?=;)", "patterns": [{ "include": "#comment" }, { "include": "#event-accessors" }, { "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "entity.name.variable.event.cs" }, { "include": "#punctuation-comma" }, { "begin": "=", "beginCaptures": { "0": { "name": "keyword.operator.assignment.cs" } }, "end": "(?<=,)|(?=;)", "patterns": [{ "include": "#expression" }, { "include": "#punctuation-comma" }] }] }, "explicit-anonymous-function-parameter": { "captures": { "1": { "name": "storage.modifier.$1.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "entity.name.variable.parameter.cs" } }, "match": "(?x)\n(?:\\b(ref|params|out|in)\\b\\s*)?\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args><(?:[^<>]|\\g<type_args>)*>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^()]|\\g<tuple>)*\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s*\n\\b(\\g<identifier>)\\b" }, "expression": { "patterns": [{ "include": "#preprocessor" }, { "include": "#comment" }, { "include": "#expression-operator-expression" }, { "include": "#type-operator-expression" }, { "include": "#default-literal-expression" }, { "include": "#throw-expression" }, { "include": "#raw-interpolated-string" }, { "include": "#interpolated-string" }, { "include": "#verbatim-interpolated-string" }, { "include": "#type-builtin" }, { "include": "#language-variable" }, { "include": "#switch-statement-or-expression" }, { "include": "#with-expression" }, { "include": "#conditional-operator" }, { "include": "#assignment-expression" }, { "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" }] }, "expression-body": { "begin": "=>", "beginCaptures": { "0": { "name": "keyword.operator.arrow.cs" } }, "end": "(?=[,\\);}])", "patterns": [{ "include": "#ref-modifier" }, { "include": "#expression" }] }, "expression-operator-expression": { "begin": "\\b(checked|unchecked|nameof)\\s*(\\()", "beginCaptures": { "1": { "name": "keyword.operator.expression.$1.cs" }, "2": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#expression" }] }, "expression-operators": { "patterns": [{ "match": "<<|>>>?", "name": "keyword.operator.bitwise.shift.cs" }, { "match": "==|!=", "name": "keyword.operator.comparison.cs" }, { "match": "<=|>=|<|>", "name": "keyword.operator.relational.cs" }, { "match": "\\!|&&|\\|\\|", "name": "keyword.operator.logical.cs" }, { "match": "\\&|~|\\^|\\|", "name": "keyword.operator.bitwise.cs" }, { "match": "--", "name": "keyword.operator.decrement.cs" }, { "match": "\\+\\+", "name": "keyword.operator.increment.cs" }, { "match": "\\+|-(?!>)|\\*|/|%", "name": "keyword.operator.arithmetic.cs" }, { "match": "\\?\\?", "name": "keyword.operator.null-coalescing.cs" }, { "match": "\\.\\.", "name": "keyword.operator.range.cs" }] }, "extern-alias-directive": { "begin": "\\b(extern)\\s+(alias)\\b", "beginCaptures": { "1": { "name": "keyword.other.directive.extern.cs" }, "2": { "name": "keyword.other.directive.alias.cs" } }, "end": "(?=;)", "patterns": [{ "match": "\\@?[_[:alpha:]][_[:alnum:]]*", "name": "variable.other.alias.cs" }] }, "field-declaration": { "begin": "(?x)\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s+\n(\\g<identifier>)\\s*\n(?!=>|==)(?=,|;|=|$)", "beginCaptures": { "1": { "patterns": [{ "include": "#type" }] }, "6": { "name": "entity.name.variable.field.cs" } }, "end": "(?=;)", "patterns": [{ "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "entity.name.variable.field.cs" }, { "include": "#punctuation-comma" }, { "include": "#comment" }, { "include": "#variable-initializer" }, { "include": "#class-or-struct-members" }] }, "finally-clause": { "begin": "(?<!\\.)\\b(finally)\\b", "beginCaptures": { "1": { "name": "keyword.control.exception.finally.cs" } }, "end": "(?<=\\})", "patterns": [{ "include": "#comment" }, { "include": "#block" }] }, "fixed-statement": { "begin": "\\b(fixed)\\b", "beginCaptures": { "1": { "name": "keyword.control.context.fixed.cs" } }, "end": "(?<=\\))|(?=;|})", "patterns": [{ "include": "#intrusive" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#intrusive" }, { "include": "#local-variable-declaration" }] }] }, "for-statement": { "begin": "\\b(for)\\b", "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": [{ "begin": "(?=[^;\\)])", "end": "(?=;|\\))", "patterns": [{ "include": "#intrusive" }, { "include": "#local-variable-declaration" }] }, { "begin": "(?=;)", "end": "(?=\\))", "patterns": [{ "include": "#intrusive" }, { "include": "#expression" }, { "include": "#punctuation-comma" }, { "include": "#punctuation-semicolon" }] }] }] }, "foreach-statement": { "begin": "\\b(foreach)\\b", "beginCaptures": { "1": { "name": "keyword.control.loop.foreach.cs" } }, "end": "(?<=\\))|(?=;|})", "patterns": [{ "include": "#intrusive" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#intrusive" }, { "captures": { "1": { "name": "storage.modifier.ref.cs" }, "2": { "name": "storage.type.var.cs" }, "3": { "patterns": [{ "include": "#type" }] }, "8": { "name": "entity.name.variable.local.cs" }, "9": { "name": "keyword.control.loop.in.cs" } }, "match": "(?x)\n(?:\n(?:(\\bref)\\s+)?(\\bvar\\b)|\n(?<type_name>\n(?:\n(?:ref\\s+)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\n)\\s+\n(\\g<identifier>)\\s+\n\\b(in)\\b" }, { "captures": { "1": { "name": "storage.type.var.cs" }, "2": { "patterns": [{ "include": "#tuple-declaration-deconstruction-element-list" }] }, "3": { "name": "keyword.control.loop.in.cs" } }, "match": "(?x)\n(?:\\b(var)\\b\\s*)?\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s+\n\\b(in)\\b" }, { "include": "#expression" }] }] }, "generic-constraints": { "begin": "(where)\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)", "beginCaptures": { "1": { "name": "storage.modifier.where.cs" }, "2": { "name": "entity.name.type.type-parameter.cs" }, "3": { "name": "punctuation.separator.colon.cs" } }, "end": "(?=\\{|where|;|=>)", "patterns": [{ "match": "\\bclass\\b", "name": "storage.type.class.cs" }, { "match": "\\bstruct\\b", "name": "storage.type.struct.cs" }, { "match": "\\bdefault\\b", "name": "keyword.other.constraint.default.cs" }, { "match": "\\bnotnull\\b", "name": "keyword.other.constraint.notnull.cs" }, { "match": "\\bunmanaged\\b", "name": "keyword.other.constraint.unmanaged.cs" }, { "captures": { "1": { "name": "keyword.operator.expression.new.cs" }, "2": { "name": "punctuation.parenthesis.open.cs" }, "3": { "name": "punctuation.parenthesis.close.cs" } }, "match": "(new)\\s*(\\()\\s*(\\))" }, { "include": "#type" }, { "include": "#punctuation-comma" }, { "include": "#generic-constraints" }] }, "goto-statement": { "begin": "(?<!\\.)\\b(goto)\\b", "beginCaptures": { "1": { "name": "keyword.control.flow.goto.cs" } }, "end": "(?=[;}])", "patterns": [{ "begin": "\\b(case)\\b", "beginCaptures": { "1": { "name": "keyword.control.conditional.case.cs" } }, "end": "(?=[;}])", "patterns": [{ "include": "#expression" }] }, { "captures": { "1": { "name": "keyword.control.conditional.default.cs" } }, "match": "\\b(default)\\b" }, { "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "entity.name.label.cs" }] }, "group-by": { "captures": { "1": { "name": "keyword.operator.expression.query.by.cs" } }, "match": "\\b(by)\\b\\s*" }, "group-clause": { "begin": "\\b(group)\\b\\s*", "beginCaptures": { "1": { "name": "keyword.operator.expression.query.group.cs" } }, "end": "(?=;|\\))", "patterns": [{ "include": "#group-by" }, { "include": "#group-into" }, { "include": "#query-body" }, { "include": "#expression" }] }, "group-into": { "captures": { "1": { "name": "keyword.operator.expression.query.into.cs" }, "2": { "name": "entity.name.variable.range-variable.cs" } }, "match": "(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*" }, "identifier": { "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "variable.other.readwrite.cs" }, "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" }] }, "implicit-anonymous-function-parameter": { "match": "\\@?[_[:alpha:]][_[:alnum:]]*\\b", "name": "entity.name.variable.parameter.cs" }, "indexer-declaration": { "begin": "(?x)\n(?<return_type>\n(?<type_name>\n(?:\n(?:ref\\s+(?:readonly\\s+)?)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\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": "variable.language.this.cs" } }, "end": "(?<=\\})|(?=;)", "patterns": [{ "include": "#comment" }, { "include": "#bracketed-parameter-list" }, { "include": "#property-accessors" }, { "include": "#accessor-getter-expression" }, { "include": "#variable-initializer" }] }, "initializer-expression": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.curlybrace.open.cs" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.curlybrace.close.cs" } }, "patterns": [{ "include": "#expression" }, { "include": "#punctuation-comma" }] }, "interface-declaration": { "begin": "(?=\\binterface\\b)", "end": "(?<=\\})", "patterns": [{ "begin": "(?x)\n(interface)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)", "beginCaptures": { "1": { "name": "storage.type.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" }] }, "interface-members": { "patterns": [{ "include": "#preprocessor" }, { "include": "#comment" }, { "include": "#storage-modifier" }, { "include": "#property-declaration" }, { "include": "#event-declaration" }, { "include": "#indexer-declaration" }, { "include": "#method-declaration" }, { "include": "#operator-declaration" }, { "include": "#attribute-section" }, { "include": "#punctuation-semicolon" }] }, "interpolated-string": { "begin": '\\$"', "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.cs" } }, "end": '(")|((?:[^\\\\\\n])$)', "endCaptures": { "1": { "name": "punctuation.definition.string.end.cs" }, "2": { "name": "invalid.illegal.newline.cs" } }, "name": "string.quoted.double.cs", "patterns": [{ "include": "#string-character-escape" }, { "include": "#interpolation" }] }, "interpolation": { "begin": "(?<=[^\\{]|^)((?:\\{\\{)*)(\\{)(?=[^\\{])", "beginCaptures": { "1": { "name": "string.quoted.double.cs" }, "2": { "name": "punctuation.definition.interpolation.begin.cs" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.interpolation.end.cs" } }, "name": "meta.interpolation.cs", "patterns": [{ "include": "#expression" }] }, "intrusive": { "patterns": [{ "include": "#preprocessor" }, { "include": "#comment" }] }, "invocation-expression": { "begin": "(?x)\n(?:\n(?:(\\?)\\s*)?\n(\\.)\\s*|\n(->)\\s*\n)?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*\n(\n<\n(?<type_args>\n[^<>()]++|\n<\\g<type_args>*+>|\n\\(\\g<type_args>*+\\)\n)*+\n>\\s*\n)?\n(?=\\()", "beginCaptures": { "1": { "name": "keyword.operator.null-conditional.cs" }, "2": { "name": "punctuation.accessor.cs" }, "3": { "name": "punctuation.accessor.pointer.cs" }, "4": { "name": "entity.name.function.cs" }, "5": { "patterns": [{ "include": "#type-arguments" }] } }, "end": "(?<=\\))", "patterns": [{ "include": "#argument-list" }] }, "is-expression": { "begin": "(?<!\\.)\\b(is)\\b", "beginCaptures": { "1": { "name": "keyword.operator.expression.pattern.is.cs" } }, "end": "(?=[)}\\],;:?=&|^]|!=)", "patterns": [{ "include": "#pattern" }] }, "join-clause": { "begin": "(?x)\n\\b(join)\\b\\s*\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)?\n\\s+(\\g<identifier>)\\b\\s*\n\\b(in)\\b\\s*", "beginCaptures": { "1": { "name": "keyword.operator.expression.query.join.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "entity.name.variable.range-variable.cs" }, "8": { "name": "keyword.operator.expression.query.in.cs" } }, "end": "(?=;|\\))", "patterns": [{ "include": "#join-on" }, { "include": "#join-equals" }, { "include": "#join-into" }, { "include": "#query-body" }, { "include": "#expression" }] }, "join-equals": { "captures": { "1": { "name": "keyword.operator.expression.query.equals.cs" } }, "match": "\\b(equals)\\b\\s*" }, "join-into": { "captures": { "1": { "name": "keyword.operator.expression.query.into.cs" }, "2": { "name": "entity.name.variable.range-variable.cs" } }, "match": "(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*" }, "join-on": { "captures": { "1": { "name": "keyword.operator.expression.query.on.cs" } }, "match": "\\b(on)\\b\\s*" }, "labeled-statement": { "captures": { "1": { "name": "entity.name.label.cs" }, "2": { "name": "punctuation.separator.colon.cs" } }, "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)" }, "language-variable": { "patterns": [{ "match": "\\b(base|this)\\b", "name": "variable.language.$1.cs" }, { "match": "\\b(value)\\b", "name": "variable.other.$1.cs" }] }, "let-clause": { "begin": "(?x)\n\\b(let)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=)\\s*", "beginCaptures": { "1": { "name": "keyword.operator.expression.query.let.cs" }, "2": { "name": "entity.name.variable.range-variable.cs" }, "3": { "name": "keyword.operator.assignment.cs" } }, "end": "(?=;|\\))", "patterns": [{ "include": "#query-body" }, { "include": "#expression" }] }, "list-pattern": { "begin": "(?=\\[)", "end": "(?=[)}\\],;:?=&|^]|!=|\\b(and|or|when)\\b)", "patterns": [{ "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.squarebracket.open.cs" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.squarebracket.close.cs" } }, "patterns": [{ "include": "#pattern" }, { "include": "#punctuation-comma" }] }, { "begin": "(?<=\\])", "end": "(?=[)}\\],;:?=&|^]|!=|\\b(and|or|when)\\b)", "patterns": [{ "include": "#intrusive" }, { "include": "#simple-designation-pattern" }] }] }, "literal": { "patterns": [{ "include": "#boolean-literal" }, { "include": "#null-literal" }, { "include": "#numeric-literal" }, { "include": "#char-literal" }, { "include": "#raw-string-literal" }, { "include": "#string-literal" }, { "include": "#verbatim-string-literal" }, { "include": "#tuple-literal" }] }, "local-constant-declaration": { "begin": "(?x)\n(?<const_keyword>\\b(?:const)\\b)\\s*\n(?<type_name>\n(?:\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\\s+\n(\\g<identifier>)\\s*\n(?=,|;|=)", "beginCaptures": { "1": { "name": "storage.modifier.const.cs" }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "entity.name.variable.local.cs" } }, "end": "(?=;)", "patterns": [{ "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "entity.name.variable.local.cs" }, { "include": "#punctuation-comma" }, { "include": "#comment" }, { "include": "#variable-initializer" }] }, "local-declaration": { "patterns": [{ "include": "#local-constant-declaration" }, { "include": "#local-variable-declaration" }, { "include": "#local-function-declaration" }, { "include": "#local-tuple-var-deconstruction" }] }, "local-function-declaration": { "begin": "(?x)\n\\b((?:(?:async|unsafe|static|extern)\\s+)*)\n(?<type_name>\n(?:ref\\s+(?:readonly\\s+)?)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?)?\n(?:\\s*\n\\[\n\\s*(?:,\\s*)*\n\\]\n(?:\\s*\\?)?\n)*\n)\\s+\n(\\g<identifier>)\\s*\n(<[^<>]+>)?\\s*\n(?=\\()", "beginCaptures": { "1": { "patterns": [{ "include": "#storage-modifier" }] }, "2": { "patterns": [{ "include": "#type" }] }, "7": { "name": "entity.name.function.cs" }, "8": { "patterns": [{ "include": "#type-parameter-list" }] } }, "end": "(?<=\\})|(?=;)", "patterns": [{ "include": "#comment" }, { "include": "#parenthesized-parameter-list" }, { "include": "#generic-constraints" }, { "include": "#expression-body" }, { "include": "#block" }] }, "local-tuple-var-deconstruction": { "begin": "(?x)\n(?:\\b(var)\\b\\s*)\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s*\n(?=;|=|\\))", "beginCaptures": { "1": { "name": "storage.type.var.cs" }, "2": { "patterns": [{ "include": "#tuple-declaration-deconstruction-element-list" }] } }, "end": "(?=;|\\))", "patterns": [{ "include": "#comment" }, { "include": "#variable-initializer" }] }, "local-variable-declaration": { "begin": "(?x)\n(?:\n(?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)|\n(?<type_name>\n(?:\n(?:ref\\s+(?:readonly\\s+)?)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*[?*]\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\n)\n)\n)\\s+\n(\\g<identifier>)\\s*\n(?!=>)\n(?=,|;|=|\\))", "beginCaptures": { "1": { "name": "storage.modifier.ref.cs" }, "2": { "name": "storage.modifier.readonly.cs" }, "3": { "name": "storage.type.var.cs" }, "4": { "patterns": [{ "include": "#type" }] }, "9": { "name": "entity.name.variable.local.cs" } }, "end": "(?=[;)}])", "patterns": [{ "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "entity.name.variable.local.cs" }, { "include": "#punctuation-comma" }, { "include": "#comment" }, { "include": "#variable-initializer" }] }, "lock-statement": { "begin": "\\b(lock)\\b", "beginCaptures": { "1": { "name": "keyword.control.context.lock.cs" } }, "end": "(?<=\\))|(?=;|})", "patterns": [{ "include": "#intrusive" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.open.cs" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.close.cs" } }, "patterns": [{ "include": "#intrusive" }, { "include": "#expression" }] }] }, "member-access-expression": { "patterns": [{ "captures": { "1": { "name": "keyword.operator.null-conditional.cs" }, "2": { "name": "punctuation.accessor.cs" }, "3": { "name": "punctuation.accessor.pointer.cs" }, "4": { "name": "variable.other.object.property.cs" } }, "match": "(?x)\n(?:\n(?:(\\?)\\s*)?\n(\\.)\\s*|\n(->)\\s*\n)\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*\n(?![_[:alnum:]]|\\(|(\\?)?\\[|<)" }, { "captures": { "1": { "name": "punctuation.accessor.cs" }, "2": { "name": "variable.other.object.cs" }, "3": { "patterns": [{ "include": "#type-arguments" }] } }, "match": "(?x)\n(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?<type_params>\\s*<([^<>]|\\g<type_params>)+>\\s*)\n(?=\n(\\s*\\?)?\n\\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)" }, { "captures": { "1": { "name": "variable.other.object.cs" } }, "match": "(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?=\n\\s*(?:(?:\\?\\s*)?\\.|->)\n\\s*@?[_[:alpha:]][_[:alnum:]]*\n)" }] }, "method-declaration": { "begin": "(?x)\n(?<return_type>\n(?<type_name>\n(?:\n(?:ref\\s+(?:readonly\\s+)?)?\n(?:\n(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)?\n(?<name_and_type_args>\n\\g<identifier>\\s*\n(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n)\n(?:\\s*\\.\\s*\\g<name_and_type_args>)* |\n(?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n)\n(?:\\s*\\?\\s*)?\n(?:\\s*\n\\[\n(?:\\s*,\\s*)*\n\\]\n\\s*\n(?:\\?)?\n\\s*\n)*\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" }] }, "named-argument": { "begin": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)", "beginCaptures": { "1": { "name": "entity.name.variable.parameter.cs" }, "2": { "name": "punctuation.separator.colon.cs" } }, "end": "(?=(,|\\)|\\]))", "patterns": [{ "include": "#argument" }] }, "namespace-declaration": { "begin": "\\b(namespace)\\s+", "beginCaptures": { "1": { "name": "storage.type.namespace.cs" } }, "end": "(?<=\\})|(?=;)", "patterns": [{ "include": "#comment" }, { "match": "@?[_[:alpha:]][_[:alnum:]]*", "name": "entity.name.type.namespace.cs" }, { "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" }] }] }, "null-literal": { "match": "(?<!\\.)\\bnull\\b", "name": "constant.language.null.cs" }, "numeric-literal": { "captures": { "0": { "patterns": [{ "begin": "(?=.)", "end": "$", "patterns": [{ "captures": { "2": { "name": "constant.numeric.decimal.cs", "patterns": [{ "match": "(?<=[0-9a-fA-F])_(?=[0-9a-fA-F])", "name": "constant.numeric.other.separator.thousands.cs" }] }, "3": { "name": "con