github-linguist 7.26.0 → 7.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/grammars/markdown.d2.codeblock.json +1 -0
  3. data/grammars/source.abap.json +1 -1
  4. data/grammars/source.aidl.json +1 -1
  5. data/grammars/source.ballerina.json +1 -1
  6. data/grammars/source.bicep.json +1 -1
  7. data/grammars/source.cs.json +1 -1
  8. data/grammars/source.d2.json +1 -1
  9. data/grammars/source.dart.json +1 -1
  10. data/grammars/source.denizenscript.json +1 -1
  11. data/grammars/source.directivesmf.json +1 -0
  12. data/grammars/source.earthfile.json +1 -1
  13. data/grammars/source.emacs.lisp.json +1 -1
  14. data/grammars/source.gleam.json +1 -1
  15. data/grammars/source.igor.json +1 -1
  16. data/grammars/source.julia.json +1 -1
  17. data/grammars/source.matlab.json +1 -1
  18. data/grammars/source.mdx.json +1 -1
  19. data/grammars/source.mo.json +1 -1
  20. data/grammars/source.nim.json +1 -1
  21. data/grammars/source.nushell.json +1 -1
  22. data/grammars/source.pic.json +1 -1
  23. data/grammars/source.prisma.json +1 -1
  24. data/grammars/source.ql.json +1 -1
  25. data/grammars/source.raku.json +1 -1
  26. data/grammars/source.rascal.json +1 -1
  27. data/grammars/source.rbs.json +1 -1
  28. data/grammars/source.rescript.json +1 -1
  29. data/grammars/source.rez.json +1 -0
  30. data/grammars/source.scala.json +1 -1
  31. data/grammars/source.scenic.json +1 -1
  32. data/grammars/source.solidity.json +1 -1
  33. data/grammars/source.stan.json +1 -1
  34. data/grammars/source.talon.json +1 -1
  35. data/grammars/source.ts.json +1 -1
  36. data/grammars/source.tsx.json +1 -1
  37. data/grammars/source.typst.json +1 -0
  38. data/grammars/source.vba.json +1 -1
  39. data/grammars/source.vyper.json +1 -1
  40. data/grammars/source.wit.json +1 -1
  41. data/grammars/source.yul.json +1 -1
  42. data/grammars/text.hash-commented.json +1 -1
  43. data/grammars/text.md.json +1 -1
  44. data/grammars/text.tex.latex.sweave.json +1 -0
  45. data/grammars/text.xml.svg.json +1 -1
  46. data/grammars/version +1 -1
  47. data/lib/linguist/VERSION +1 -1
  48. data/lib/linguist/generated.rb +10 -0
  49. data/lib/linguist/heuristics.rb +2 -0
  50. data/lib/linguist/heuristics.yml +20 -11
  51. data/lib/linguist/languages.json +1 -1
  52. data/lib/linguist/languages.yml +66 -3
  53. data/lib/linguist/samples.json +1 -1
  54. metadata +14 -10
  55. data/grammars/source.nimcfg.json +0 -1
@@ -1 +1 @@
1
- {"name":"C#","scopeName":"source.cs","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#directives"},{"include":"#declarations"},{"include":"#script-top-level"}],"repository":{"anonymous-method-expression":{"patterns":[{"begin":"(?x)\n(?:\\b(async)\\b\\s*)?\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=\u003e)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#block"},{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"name":"entity.name.variable.parameter.cs"},"3":{"name":"keyword.operator.arrow.cs"}}},{"begin":"(?x)\n(?:\\b(async)\\b\\s*)?\n(\\(.*?\\))\\s*\n(=\u003e)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#block"},{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#lambda-parameter-list"}]},"3":{"name":"keyword.operator.arrow.cs"}}},{"begin":"(?x)\n(?:\\b(async)\\b\\s*)?\n(?:\\b(delegate)\\b\\s*)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#parenthesized-parameter-list"},{"include":"#block"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"name":"keyword.other.delegate.cs"}}}]},"anonymous-object-creation-expression":{"begin":"\\b(new)\\b\\s*(?=\\{|$)","end":"(?\u003c=\\})","patterns":[{"include":"#initializer-expression"}],"beginCaptures":{"1":{"name":"keyword.other.new.cs"}}},"argument":{"patterns":[{"name":"storage.modifier.cs","match":"\\b(ref|out|in)\\b"},{"include":"#declaration-expression-local"},{"include":"#expression"}]},"argument-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"array-creation-expression":{"begin":"(?x)\n\\b(new|stackalloc)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(?=\\[)","end":"(?\u003c=\\])","patterns":[{"include":"#bracketed-argument-list"}],"beginCaptures":{"1":{"name":"keyword.other.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"as-expression":{"match":"(?x)\n(?\u003c!\\.)\\b(as)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?","captures":{"1":{"name":"keyword.other.as.cs"},"2":{"patterns":[{"include":"#type"}]}}},"attribute":{"patterns":[{"include":"#type-name"},{"include":"#attribute-arguments"}]},"attribute-arguments":{"begin":"(\\()","end":"(\\))","patterns":[{"include":"#attribute-named-argument"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"1":{"name":"punctuation.parenthesis.close.cs"}}},"attribute-named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?==)","end":"(?=(,|\\)))","patterns":[{"include":"#operator-assignment"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"entity.name.variable.property.cs"}}},"attribute-section":{"begin":"(\\[)(assembly|module|field|event|method|param|property|return|type)?(\\:)?","end":"(\\])","patterns":[{"include":"#comment"},{"include":"#attribute"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"},"2":{"name":"keyword.other.attribute-specifier.cs"},"3":{"name":"punctuation.separator.colon.cs"}},"endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}}},"await-expression":{"name":"keyword.other.await.cs","match":"(?!\\.)\\b(await)\\b"},"await-statement":{"begin":"(?\u003c!\\.)\\b(await)\\b","end":"(?=;)","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.other.await.cs"}}},"base-types":{"begin":":","end":"(?=\\{|where|;)","patterns":[{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#preprocessor"}],"beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},"block":{"begin":"\\{","end":"\\}","patterns":[{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"boolean-literal":{"patterns":[{"name":"constant.language.boolean.true.cs","match":"(?\u003c!\\.)\\btrue\\b"},{"name":"constant.language.boolean.false.cs","match":"(?\u003c!\\.)\\bfalse\\b"}]},"bracketed-argument-list":{"begin":"\\[","end":"\\]","patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},"bracketed-parameter-list":{"begin":"(?=(\\[))","end":"(?=(\\]))","patterns":[{"begin":"(?\u003c=\\[)","end":"(?=\\])","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}]}],"beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}}},"break-or-continue-statement":{"match":"(?\u003c!\\.)\\b(?:(break)|(continue))\\b","captures":{"1":{"name":"keyword.control.flow.break.cs"},"2":{"name":"keyword.control.flow.continue.cs"}}},"cast-expression":{"match":"(?x)\n(\\()\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(\\))(?=\\s*-*!*@?[_[:alnum:]\\(])","captures":{"1":{"name":"punctuation.parenthesis.open.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"punctuation.parenthesis.close.cs"}}},"catch-clause":{"begin":"(?\u003c!\\.)\\b(catch)\\b","end":"(?\u003c=\\})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"match":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?:(\\g\u003cidentifier\u003e)\\b)?","captures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.local.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#when-clause"},{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.try.catch.cs"}}},"char-character-escape":{"name":"constant.character.escape.cs","match":"\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4})"},"char-literal":{"name":"string.quoted.single.cs","begin":"'","end":"(\\')|((?:[^\\\\\\n])$)","patterns":[{"include":"#char-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.char.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.char.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"checked-unchecked-expression":{"begin":"(?\u003c!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.checked.cs"},"2":{"name":"keyword.other.unchecked.cs"},"3":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"checked-unchecked-statement":{"begin":"(?\u003c!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(?!\\()","end":"(?\u003c=\\})","patterns":[{"include":"#block"},{"include":"#comment"}],"beginCaptures":{"1":{"name":"keyword.other.checked.cs"},"2":{"name":"keyword.other.unchecked.cs"}}},"class-declaration":{"begin":"(?=(\\brecord\\b\\s+)?\\bclass\\b)","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"(?x)\n(\\b(record)\\b\\s+)?\n\\b(class)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*","end":"(?=\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"2":{"name":"keyword.other.record.cs"},"3":{"name":"keyword.other.class.cs"},"4":{"name":"entity.name.type.class.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"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"}]},"comment":{"patterns":[{"name":"comment.block.cs","begin":"/\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},{"begin":"(^\\s+)?(?=//)","end":"(?=$)","patterns":[{"name":"comment.block.documentation.cs","begin":"(?\u003c!/)///(?!/)","end":"(?=$)","patterns":[{"include":"#xml-doc-comment"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},{"name":"comment.line.double-slash.cs","begin":"(?\u003c!/)//(?:(?!/)|(?=//))","end":"(?=$)","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"}}}]},"conditional-operator":{"begin":"\\?(?!\\s*[?.\\[]|\\s*$)","end":":","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.conditional.question-mark.cs"}},"endCaptures":{"0":{"name":"keyword.operator.conditional.colon.cs"}}},"constructor-declaration":{"begin":"(?=@?[_[:alpha:]][_[:alnum:]]*\\s*\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"entity.name.function.cs"}}},{"begin":"(:)","end":"(?=\\{|=\u003e)","patterns":[{"include":"#constructor-initializer"}],"beginCaptures":{"1":{"name":"punctuation.separator.colon.cs"}}},{"include":"#parenthesized-parameter-list"},{"include":"#preprocessor"},{"include":"#comment"},{"include":"#expression-body"},{"include":"#block"}]},"constructor-initializer":{"begin":"\\b(?:(base)|(this))\\b\\s*(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.other.base.cs"},"2":{"name":"keyword.other.this.cs"}}},"conversion-operator-declaration":{"begin":"(?x)\n(?\u003cexplicit_or_implicit_keyword\u003e(?:\\b(?:explicit|implicit)))\\s*\n(?\u003coperator_keyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"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"}]}}},"declaration-expression-local":{"match":"(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)\\]])","captures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}}},"declaration-expression-tuple":{"match":"(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.tuple-element.cs"}}},"declarations":{"patterns":[{"include":"#namespace-declaration"},{"include":"#type-declarations"},{"include":"#punctuation-semicolon"}]},"delegate-declaration":{"begin":"(?x)\n(?:\\b(delegate)\\b)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()","end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.delegate.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.type.delegate.cs"},"8":{"patterns":[{"include":"#type-parameter-list"}]}}},"destructor-declaration":{"begin":"(~)(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"name":"punctuation.tilde.cs"},"2":{"name":"entity.name.function.cs"}}},"directives":{"patterns":[{"include":"#extern-alias-directive"},{"include":"#using-directive"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"do-statement":{"begin":"(?\u003c!\\.)\\b(do)\\b","end":"(?=;|})","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.do.cs"}}},"double-raw-interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{][^\\{]|^)((?:\\{)*)(\\{\\{)(?=[^\\{])","end":"\\}\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"element-access-expression":{"begin":"(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*)? # property name\n(?:(\\?)\\s*)? # null-conditional operator?\n(?=\\[) # open bracket of argument list","end":"(?\u003c=\\])(?!\\s*\\[)","patterns":[{"include":"#bracketed-argument-list"}],"beginCaptures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"variable.other.object.property.cs"},"4":{"name":"keyword.operator.null-conditional.cs"}}},"else-part":{"begin":"(?\u003c!\\.)\\b(else)\\b","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.else.cs"}}},"enum-declaration":{"begin":"(?=\\benum\\b)","end":"(?\u003c=\\})","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":":","end":"(?=\\{)","patterns":[{"include":"#type"}],"beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}}]},{"begin":"\\{","end":"\\}","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#attribute-section"},{"include":"#punctuation-comma"},{"begin":"@?[_[:alpha:]][_[:alnum:]]*","end":"(?=(,|\\}))","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"0":{"name":"entity.name.variable.enum-member.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"event-accessors":{"begin":"\\{","end":"\\}","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"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"event-declaration":{"begin":"(?x)\n\\b(event)\\b\\s*\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cevent_names\u003e\\g\u003cidentifier\u003e(?:\\s*,\\s*\\g\u003cidentifier\u003e)*)\\s*\n(?=\\{|;|$)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#event-accessors"},{"include":"#punctuation-comma"}],"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"}]}}},"expression":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#checked-unchecked-expression"},{"include":"#typeof-or-default-expression"},{"include":"#nameof-expression"},{"include":"#throw-expression"},{"include":"#raw-interpolated-string"},{"include":"#interpolated-string"},{"include":"#verbatim-interpolated-string"},{"include":"#this-or-base-expression"},{"include":"#switch-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"}]},"expression-body":{"begin":"=\u003e","end":"(?=[,\\);}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}}},"expression-operators":{"patterns":[{"name":"keyword.operator.assignment.compound.cs","match":"\\*=|/=|%=|\\+=|-=|\\?\\?="},{"name":"keyword.operator.assignment.compound.bitwise.cs","match":"\\\u0026=|\\^=|\u003c\u003c=|\u003e\u003e=|\\|="},{"name":"keyword.operator.bitwise.shift.cs","match":"\u003c\u003c|\u003e\u003e"},{"name":"keyword.operator.comparison.cs","match":"==|!="},{"name":"keyword.operator.relational.cs","match":"\u003c=|\u003e=|\u003c|\u003e"},{"name":"keyword.operator.logical.cs","match":"\\!|\u0026\u0026|\\|\\|"},{"name":"keyword.operator.bitwise.cs","match":"\\\u0026|~|\\^|\\|"},{"name":"keyword.operator.assignment.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":"\\?\\?"}]},"extern-alias-directive":{"begin":"\\s*(extern)\\b\\s*(alias)\\b\\s*(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=;)","beginCaptures":{"1":{"name":"keyword.other.extern.cs"},"2":{"name":"keyword.other.alias.cs"},"3":{"name":"variable.other.alias.cs"}}},"field-declaration":{"begin":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s* # first field name\n(?!=\u003e|==)(?=,|;|=|$)","end":"(?=;)","patterns":[{"name":"entity.name.variable.field.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.field.cs"}}},"finally-clause":{"begin":"(?\u003c!\\.)\\b(finally)\\b","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.try.finally.cs"}}},"for-statement":{"begin":"(?\u003c!\\.)\\b(for)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#local-variable-declaration"},{"include":"#expression"},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.for.cs"}}},"foreach-statement":{"begin":"(?\u003c!\\.)\\b(foreach)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"match":"(?x)\n(?:\n (\\bvar\\b)|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\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(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\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"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.foreach.cs"}}},"generic-constraints":{"begin":"(where)\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","end":"(?=\\{|where|;|=\u003e)","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"}],"beginCaptures":{"1":{"name":"keyword.other.where.cs"},"2":{"name":"entity.name.type.type-parameter.cs"},"3":{"name":"punctuation.separator.colon.cs"}}},"goto-statement":{"begin":"(?\u003c!\\.)\\b(goto)\\b","end":"(?=;)","patterns":[{"begin":"\\b(case)\\b","end":"(?=;)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.case.cs"}}},{"match":"\\b(default)\\b","captures":{"1":{"name":"keyword.control.default.cs"}}},{"name":"entity.name.label.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"1":{"name":"keyword.control.goto.cs"}}},"group-by":{"match":"\\b(by)\\b\\s*","captures":{"1":{"name":"keyword.query.by.cs"}}},"group-clause":{"begin":"\\b(group)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#group-by"},{"include":"#group-into"},{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.group.cs"}}},"group-into":{"match":"(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*","captures":{"1":{"name":"keyword.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}}},"identifier":{"name":"variable.other.readwrite.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},"if-statement":{"begin":"(?\u003c!\\.)\\b(if)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.if.cs"}}},"indexer-declaration":{"begin":"(?x)\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cindexer_name\u003ethis)\\s*\n(?=\\[)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#bracketed-parameter-list"},{"include":"#property-accessors"},{"include":"#expression-body"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"keyword.other.this.cs"}}},"initializer-expression":{"begin":"\\{","end":"\\}","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"interface-declaration":{"begin":"(?=\\binterface\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?x)\n(interface)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.interface.cs"},"2":{"name":"entity.name.type.interface.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#interface-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"interface-members":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#property-declaration"},{"include":"#event-declaration"},{"include":"#indexer-declaration"},{"include":"#method-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"interpolated-string":{"name":"string.quoted.double.cs","begin":"\\$\"","end":"(\")|((?:[^\\\\\\n])$)","patterns":[{"include":"#string-character-escape"},{"include":"#interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{]|^)((?:\\{\\{)*)(\\{)(?=[^\\{])","end":"\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"invocation-expression":{"begin":"(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # method name\n(?\u003ctype_args\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\\s* # type arguments\n(?=\\() # open paren of argument list","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"entity.name.function.cs"},"4":{"patterns":[{"include":"#type-arguments"}]}}},"is-expression":{"match":"(?x)\n(?\u003c!\\.)\\b(is)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?","captures":{"1":{"name":"keyword.other.is.cs"},"2":{"patterns":[{"include":"#type"}]}}},"join-clause":{"begin":"(?x)\n\\b(join)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#join-on"},{"include":"#join-equals"},{"include":"#join-into"},{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.join.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.range-variable.cs"},"8":{"name":"keyword.query.in.cs"}}},"join-equals":{"match":"\\b(equals)\\b\\s*","captures":{"1":{"name":"keyword.query.equals.cs"}}},"join-into":{"match":"(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*","captures":{"1":{"name":"keyword.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}}},"join-on":{"match":"\\b(on)\\b\\s*","captures":{"1":{"name":"keyword.query.on.cs"}}},"labeled-statement":{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","captures":{"1":{"name":"entity.name.label.cs"},"2":{"name":"punctuation.separator.colon.cs"}}},"lambda-parameter":{"match":"(?x)\n(?:\\b(ref|out|in)\\b)?\\s*\n(?:(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+)?\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}}},"lambda-parameter-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#lambda-parameter"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"let-clause":{"begin":"(?x)\n\\b(let)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=)\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.let.cs"},"2":{"name":"entity.name.variable.range-variable.cs"},"3":{"name":"keyword.operator.assignment.cs"}}},"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(?\u003cconst_keyword\u003e\\b(?:const)\\b)\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?=,|;|=)","end":"(?=;)","patterns":[{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}}},"local-declaration":{"patterns":[{"include":"#local-constant-declaration"},{"include":"#local-variable-declaration"},{"include":"#local-function-declaration"},{"include":"#local-tuple-var-deconstruction"}]},"local-function-declaration":{"patterns":[{"include":"#method-declaration"}]},"local-tuple-var-deconstruction":{"begin":"(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?=;|=|\\))","end":"(?=;|\\))","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}}},"local-variable-declaration":{"begin":"(?x)\n(?:\n (?:(\\busing)\\s+)?\n (?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)| # ref local\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref local\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?!=\u003e)\n(?=,|;|=|\\))","end":"(?=;|\\))","patterns":[{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"},"10":{"name":"entity.name.variable.local.cs"},"2":{"name":"storage.modifier.cs"},"3":{"name":"storage.modifier.cs"},"4":{"name":"keyword.other.var.cs"},"5":{"patterns":[{"include":"#type"}]}}},"lock-statement":{"begin":"(?\u003c!\\.)\\b(lock)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.other.lock.cs"}}},"member-access-expression":{"patterns":[{"match":"(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(\\.)\\s* # preceding dot\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # property name\n(?![_[:alnum:]]|\\(|(\\?)?\\[|\u003c) # next character is not alpha-numeric, nor a (, [, or \u003c. Also, test for ?[","captures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"variable.other.object.property.cs"}}},{"match":"(?x)\n(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?\u003ctype_params\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctype_params\u003e)+\u003e\\s*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)","captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"variable.other.object.cs"},"3":{"patterns":[{"include":"#type-arguments"}]}}},{"match":"(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)","captures":{"1":{"name":"variable.other.object.cs"}}}]},"method-declaration":{"begin":"(?x)\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.function.cs"},"9":{"patterns":[{"include":"#type-parameter-list"}]}}},"named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","end":"(?=(,|\\)|\\]))","patterns":[{"include":"#argument"}],"beginCaptures":{"1":{"name":"entity.name.variable.parameter.cs"},"2":{"name":"punctuation.separator.colon.cs"}}},"nameof-expression":{"begin":"(?\u003c!\\.)\\b(nameof)\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.nameof.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"namespace-declaration":{"begin":"\\b(namespace)\\s+","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"name":"entity.name.type.namespace.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-accessor"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#declarations"},{"include":"#using-directive"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.other.namespace.cs"}}},"null-literal":{"name":"constant.language.null.cs","match":"(?\u003c!\\.)\\bnull\\b"},"numeric-literal":{"match":"(?\u003c!\\w)\\.?\\d(?:(?:[0-9a-zA-Z_]|_)|(?\u003c=[eE])[+-]|\\.\\d)*","captures":{"0":{"patterns":[{"begin":"(?=.)","end":"$","patterns":[{"match":"(\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?:(?\u003c=[0-9])|\\.(?=[0-9])))([0-9](?:[0-9]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?\u003c!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?([fFdDmM](?!\\w))?$","captures":{"10":{"name":"keyword.operator.arithmetic.cs"},"11":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"12":{"name":"constant.numeric.other.suffix.cs"},"2":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"4":{"name":"constant.numeric.other.separator.decimals.cs"},"5":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"6":{"name":"constant.numeric.other.separator.thousands.cs"},"8":{"name":"constant.numeric.other.exponent.cs"},"9":{"name":"keyword.operator.arithmetic.cs"}}},{"match":"(\\G0[bB])([01_](?:[01_]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\w))?$","captures":{"1":{"name":"constant.numeric.other.preffix.binary.cs"},"2":{"name":"constant.numeric.binary.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"4":{"name":"constant.numeric.other.suffix.cs"}}},{"match":"(\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\w))?$","captures":{"1":{"name":"constant.numeric.other.preffix.hex.cs"},"2":{"name":"constant.numeric.hex.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"4":{"name":"constant.numeric.other.suffix.cs"}}},{"match":"(\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?\u003c!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\w))?$","captures":{"2":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"5":{"name":"constant.numeric.other.exponent.cs"},"6":{"name":"keyword.operator.arithmetic.cs"},"7":{"name":"keyword.operator.arithmetic.cs"},"8":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"9":{"name":"constant.numeric.other.suffix.cs"}}},{"name":"invalid.illegal.constant.numeric.cs","match":"(?:(?:[0-9a-zA-Z_]|_)|(?\u003c=[eE])[+-]|\\.\\d)+"}]}]}}},"object-creation-expression":{"patterns":[{"include":"#object-creation-expression-with-parameters"},{"include":"#object-creation-expression-with-no-parameters"}]},"object-creation-expression-with-no-parameters":{"match":"(?x)\n(new)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\{|$)","captures":{"1":{"name":"keyword.other.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"object-creation-expression-with-parameters":{"begin":"(?x)\n(new)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.other.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"operator-assignment":{"name":"keyword.operator.assignment.cs","match":"(?\u003c!=|!)(=)(?!=)"},"operator-declaration":{"begin":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?\u003coperator_keyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003coperator\u003e(?:\\+|-|\\*|/|%|\u0026|\\||\\^|\\\u003c\\\u003c|\\\u003e\\\u003e|==|!=|\\\u003e|\\\u003c|\\\u003e=|\\\u003c=|!|~|\\+\\+|--|true|false))\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"keyword.other.operator-decl.cs"},"7":{"name":"entity.name.function.cs"}}},"orderby-clause":{"begin":"\\b(orderby)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#ordering-direction"},{"include":"#query-body"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"keyword.query.orderby.cs"}}},"ordering-direction":{"match":"\\b(?:(ascending)|(descending))\\b","captures":{"1":{"name":"keyword.query.ascending.cs"},"2":{"name":"keyword.query.descending.cs"}}},"parameter":{"match":"(?x)\n(?:(?:\\b(ref|params|out|in|this)\\b)\\s+)?\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)","captures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}}},"parenthesized-expression":{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"parenthesized-parameter-list":{"begin":"(\\()","end":"(\\))","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"preprocessor":{"name":"meta.preprocessor.cs","begin":"^\\s*(\\#)\\s*","end":"(?\u003c=$)","patterns":[{"include":"#comment"},{"include":"#preprocessor-define-or-undef"},{"include":"#preprocessor-if-or-elif"},{"include":"#preprocessor-else-or-endif"},{"include":"#preprocessor-warning-or-error"},{"include":"#preprocessor-region"},{"include":"#preprocessor-endregion"},{"include":"#preprocessor-load"},{"include":"#preprocessor-r"},{"include":"#preprocessor-line"},{"include":"#preprocessor-pragma-warning"},{"include":"#preprocessor-pragma-checksum"}],"beginCaptures":{"1":{"name":"punctuation.separator.hash.cs"}}},"preprocessor-define-or-undef":{"match":"\\b(?:(define)|(undef))\\b\\s*\\b([_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"keyword.preprocessor.define.cs"},"2":{"name":"keyword.preprocessor.undef.cs"},"3":{"name":"entity.name.variable.preprocessor.symbol.cs"}}},"preprocessor-else-or-endif":{"match":"\\b(?:(else)|(endif))\\b","captures":{"1":{"name":"keyword.preprocessor.else.cs"},"2":{"name":"keyword.preprocessor.endif.cs"}}},"preprocessor-endregion":{"match":"\\b(endregion)\\b","captures":{"1":{"name":"keyword.preprocessor.endregion.cs"}}},"preprocessor-expression":{"patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#preprocessor-expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"match":"\\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\\b","captures":{"1":{"name":"constant.language.boolean.true.cs"},"2":{"name":"constant.language.boolean.false.cs"},"3":{"name":"entity.name.variable.preprocessor.symbol.cs"}}},{"match":"(==|!=)|(\\!|\u0026\u0026|\\|\\|)","captures":{"1":{"name":"keyword.operator.comparison.cs"},"2":{"name":"keyword.operator.logical.cs"}}}]},"preprocessor-if-or-elif":{"begin":"\\b(?:(if)|(elif))\\b","end":"(?=$)","patterns":[{"include":"#comment"},{"include":"#preprocessor-expression"}],"beginCaptures":{"1":{"name":"keyword.preprocessor.if.cs"},"2":{"name":"keyword.preprocessor.elif.cs"}}},"preprocessor-line":{"begin":"\\b(line)\\b","end":"(?=$)","patterns":[{"match":"\\b(?:(default|hidden))","captures":{"1":{"name":"keyword.preprocessor.default.cs"},"2":{"name":"keyword.preprocessor.hidden.cs"}}},{"match":"[0-9]+","captures":{"0":{"name":"constant.numeric.decimal.cs"}}},{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.line.cs"}}},"preprocessor-load":{"begin":"\\b(load)\\b","end":"(?=$)","patterns":[{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.load.cs"}}},"preprocessor-pragma-checksum":{"match":"\\b(pragma)\\b\\s*\\b(checksum)\\b\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")","captures":{"1":{"name":"keyword.preprocessor.pragma.cs"},"2":{"name":"keyword.preprocessor.checksum.cs"},"3":{"name":"string.quoted.double.cs"},"4":{"name":"string.quoted.double.cs"},"5":{"name":"string.quoted.double.cs"}}},"preprocessor-pragma-warning":{"match":"\\b(pragma)\\b\\s*\\b(warning)\\b\\s*\\b(?:(disable)|(restore))\\b(\\s*[0-9]+(?:\\s*,\\s*[0-9]+)?)?","captures":{"1":{"name":"keyword.preprocessor.pragma.cs"},"2":{"name":"keyword.preprocessor.warning.cs"},"3":{"name":"keyword.preprocessor.disable.cs"},"4":{"name":"keyword.preprocessor.restore.cs"},"5":{"patterns":[{"match":"[0-9]+","captures":{"0":{"name":"constant.numeric.decimal.cs"}}},{"include":"#punctuation-comma"}]}}},"preprocessor-r":{"begin":"\\b(r)\\b","end":"(?=$)","patterns":[{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.r.cs"}}},"preprocessor-region":{"match":"\\b(region)\\b\\s*(.*)(?=$)","captures":{"1":{"name":"keyword.preprocessor.region.cs"},"2":{"name":"string.unquoted.preprocessor.message.cs"}}},"preprocessor-warning-or-error":{"match":"\\b(?:(warning)|(error))\\b\\s*(.*)(?=$)","captures":{"1":{"name":"keyword.preprocessor.warning.cs"},"2":{"name":"keyword.preprocessor.error.cs"},"3":{"name":"string.unquoted.preprocessor.message.cs"}}},"property-accessors":{"begin":"\\{","end":"\\}","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"},{"name":"keyword.other.init.cs","match":"\\b(init)\\b"},{"include":"#comment"},{"include":"#attribute-section"},{"include":"#expression-body"},{"include":"#block"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"property-declaration":{"begin":"(?x)\n\n# The negative lookahead below ensures that we don't match nested types\n# or other declarations as properties.\n(?![[:word:][:space:]]*\\b(?:class|interface|struct|enum|event)\\b)\n\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cproperty_name\u003e\\g\u003cidentifier\u003e)\\s*\n(?=\\{|=\u003e|$)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#property-accessors"},{"include":"#expression-body"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.variable.property.cs"}}},"punctuation-accessor":{"name":"punctuation.accessor.cs","match":"\\."},"punctuation-comma":{"name":"punctuation.separator.comma.cs","match":","},"punctuation-semicolon":{"name":"punctuation.terminator.statement.cs","match":";"},"query-body":{"patterns":[{"include":"#let-clause"},{"include":"#where-clause"},{"include":"#join-clause"},{"include":"#orderby-clause"},{"include":"#select-clause"},{"include":"#group-clause"}]},"query-expression":{"begin":"(?x)\n\\b(from)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.from.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.range-variable.cs"},"8":{"name":"keyword.query.in.cs"}}},"raw-interpolated-string":{"patterns":[{"include":"#raw-interpolated-string-five-or-more-quote-one-or-more-interpolation"},{"include":"#raw-interpolated-string-three-or-more-quote-three-or-more-interpolation"},{"include":"#raw-interpolated-string-quadruple-quote-double-interpolation"},{"include":"#raw-interpolated-string-quadruple-quote-single-interpolation"},{"include":"#raw-interpolated-string-triple-quote-double-interpolation"},{"include":"#raw-interpolated-string-triple-quote-single-interpolation"}]},"raw-interpolated-string-five-or-more-quote-one-or-more-interpolation":{"name":"string.quoted.double.cs","begin":"\\$+\"\"\"\"\"+","end":"\"\"\"\"\"+","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-quadruple-quote-double-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\\$\"\"\"\"","end":"\"\"\"\"","patterns":[{"include":"#double-raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-quadruple-quote-single-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\"\"\"\"","end":"\"\"\"\"","patterns":[{"include":"#raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-three-or-more-quote-three-or-more-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\\$\\$+\"\"\"+","end":"\"\"\"+","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-triple-quote-double-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\\$\"\"\"","end":"\"\"\"","patterns":[{"include":"#double-raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-triple-quote-single-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\"\"\"","end":"\"\"\"","patterns":[{"include":"#raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{]|^)((?:\\{)*)(\\{)(?=[^\\{])","end":"\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"raw-string-literal":{"patterns":[{"include":"#raw-string-literal-more"},{"include":"#raw-string-literal-quadruple"},{"include":"#raw-string-literal-triple"}]},"raw-string-literal-more":{"name":"string.quoted.double.cs","begin":"\"\"\"\"\"+","end":"\"\"\"\"\"+","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-string-literal-quadruple":{"name":"string.quoted.double.cs","begin":"\"\"\"\"","end":"\"\"\"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-string-literal-triple":{"name":"string.quoted.double.cs","begin":"\"\"\"","end":"\"\"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"readonly-modifier":{"name":"storage.modifier.cs","match":"\\b(readonly)\\b"},"record-declaration":{"begin":"(?=\\brecord\\b)","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"(?x)\n(record)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.record.cs"},"2":{"name":"entity.name.type.class.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"ref-modifier":{"name":"storage.modifier.cs","match":"\\b(ref)\\b"},"return-statement":{"begin":"(?\u003c!\\.)\\b(return)\\b","end":"(?=;)","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.return.cs"}}},"script-top-level":{"patterns":[{"include":"#statement"},{"include":"#method-declaration"},{"include":"#punctuation-semicolon"}]},"select-clause":{"begin":"\\b(select)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.select.cs"}}},"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":"#object-creation-expression"},{"include":"#array-creation-expression"},{"include":"#anonymous-object-creation-expression"},{"include":"#local-declaration"},{"include":"#block"},{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"storage-modifier":{"name":"storage.modifier.cs","match":"(?\u003c!\\.)\\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe|ref|required|file)\\b"},"string-character-escape":{"name":"constant.character.escape.cs","match":"\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4})"},"string-literal":{"name":"string.quoted.double.cs","begin":"(?\u003c!@)\"","end":"(\")|((?:[^\\\\\\n])$)","patterns":[{"include":"#string-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"struct-declaration":{"begin":"(?=(\\brecord\\b\\s+)?\\bstruct\\b)","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"(?x)\n(\\b(record)\\b\\s+)?\n(struct)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"2":{"name":"keyword.other.record.cs"},"3":{"name":"keyword.other.struct.cs"},"4":{"name":"entity.name.type.struct.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"switch-expression":{"begin":"(?x) (?\u003c!\\.)\\b(switch)\\b","end":"(?\u003c=\\})","patterns":[{"begin":"\\{","end":"\\}","patterns":[{"include":"#comment"},{"include":"#literal"},{"include":"#switch-var-pattern"},{"include":"#switch-property-expression"},{"include":"#member-access-expression"},{"include":"#switch-pattern"},{"include":"#expression-body"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.switch.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"switch-label":{"patterns":[{"begin":"(?\u003c!\\.)\\b(case)\\b\\s+","end":":","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.case.cs"}},"endCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},{"match":"(?\u003c!\\.)\\b(default)\\b\\s*(:)","captures":{"1":{"name":"keyword.control.default.cs"},"2":{"name":"punctuation.separator.colon.cs"}}}]},"switch-literal":{"name":"constant.language.null.cs","match":"(?\u003c!\\.)\\bnull\\b","patterns":[{"include":"#comment"},{"include":"#punctuation-comma"},{"include":"#expression-body"}],"beginCaptures":{"1":{"name":"constant.language.null.cs"}}},"switch-pattern":{"begin":"(?x) # e.g. int x OR var x\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*","end":"(?==\u003e)","patterns":[{"include":"#comment"},{"include":"#switch-when-clause"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"2":{"name":"entity.name.variable.local.cs"}}},"switch-property-expression":{"begin":"(?x) # e.g. int x OR var x\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(\\{)","end":"\\}","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"switch-statement":{"begin":"(?\u003c!\\.)\\b(switch)\\b\\s*(?=\\()","end":"(?\u003c=\\})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#switch-label"},{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.switch.cs"}}},"switch-var-pattern":{"begin":"(?x) # match foreach (var (x, y) in ...)\n(?:\\b(var)\\b\\s*)\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*","end":"(?==\u003e)","patterns":[{"include":"#comment"},{"include":"#switch-when-clause"}],"beginCaptures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}}},"switch-when-clause":{"begin":"(?\u003c!\\.)\\b(when)\\b\\s*(\\()?","end":"(?==\u003e)","patterns":[{"include":"#comment"},{"include":"#expression"},{"include":"#punctuation-comma"},{"match":"\\(","captures":{"0":{"name":"punctuation.parenthesis.open.cs"}}},{"match":"\\)","captures":{"0":{"name":"punctuation.parenthesis.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.try.when.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}}},"this-or-base-expression":{"match":"\\b(?:(base)|(this))\\b","captures":{"1":{"name":"keyword.other.base.cs"},"2":{"name":"keyword.other.this.cs"}}},"throw-expression":{"match":"(?\u003c!\\.)\\b(throw)\\b","captures":{"1":{"name":"keyword.control.flow.throw.cs"}}},"throw-statement":{"begin":"(?\u003c!\\.)\\b(throw)\\b","end":"(?=;)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.throw.cs"}}},"try-block":{"begin":"(?\u003c!\\.)\\b(try)\\b","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.try.cs"}}},"try-statement":{"patterns":[{"include":"#try-block"},{"include":"#catch-clause"},{"include":"#finally-clause"}]},"tuple-declaration-deconstruction-element-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-declaration-deconstruction-element-list"},{"include":"#declaration-expression-tuple"},{"include":"#punctuation-comma"},{"match":"(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"entity.name.variable.tuple-element.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-deconstruction-assignment":{"match":"(?x)\n(?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?!=\u003e|==)(?==)","captures":{"1":{"patterns":[{"include":"#tuple-deconstruction-element-list"}]}}},"tuple-deconstruction-element-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-deconstruction-element-list"},{"include":"#declaration-expression-tuple"},{"include":"#punctuation-comma"},{"match":"(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"variable.other.readwrite.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-element":{"match":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\n(?:(?\u003ctuple_name\u003e\\g\u003cidentifier\u003e)\\b)?","captures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.tuple-element.cs"}}},"tuple-literal":{"begin":"(\\()(?=.*[:,])","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-literal-element"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-literal-element":{"begin":"(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*\n(?=:)","end":"(:)","beginCaptures":{"1":{"name":"entity.name.variable.tuple-element.cs"}},"endCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},"tuple-type":{"begin":"\\(","end":"\\)","patterns":[{"include":"#tuple-element"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"type":{"name":"meta.type.cs","patterns":[{"include":"#comment"},{"include":"#ref-modifier"},{"include":"#readonly-modifier"},{"include":"#tuple-type"},{"include":"#type-builtin"},{"include":"#type-name"},{"include":"#type-arguments"},{"include":"#type-array-suffix"},{"include":"#type-nullable-suffix"}]},"type-arguments":{"begin":"\u003c","end":"\u003e","patterns":[{"include":"#comment"},{"include":"#type"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.cs"}}},"type-array-suffix":{"begin":"\\[","end":"\\]","patterns":[{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},"type-builtin":{"match":"\\b(bool|byte|char|decimal|double|float|int|long|object|sbyte|short|string|uint|ulong|ushort|void|dynamic)\\b","captures":{"1":{"name":"keyword.type.cs"}}},"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":"#record-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"type-name":{"patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\:\\:)","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":"(\\.)\\s*(@?[_[:alpha:]][_[:alnum:]]*)","captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"entity.name.type.cs"}}},{"name":"entity.name.type.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}]},"type-nullable-suffix":{"match":"\\?","captures":{"0":{"name":"punctuation.separator.question-mark.cs"}}},"type-parameter-list":{"begin":"\\\u003c","end":"\\\u003e","patterns":[{"match":"\\b(in|out)\\b","captures":{"1":{"name":"storage.modifier.cs"}}},{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"entity.name.type.type-parameter.cs"}}},{"include":"#comment"},{"include":"#punctuation-comma"},{"include":"#attribute-section"}],"beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.cs"}}},"typeof-or-default-expression":{"begin":"(?\u003c!\\.)\\b(?:(typeof)|(default))\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.typeof.cs"},"2":{"name":"keyword.other.default.cs"},"3":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"using-directive":{"patterns":[{"begin":"\\b(using)\\b\\s+(static)\\s+","end":"(?=;)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"},"2":{"name":"keyword.other.static.cs"}}},{"begin":"\\b(using)\\s+(?=(@?[_[:alpha:]][_[:alnum:]]*)\\s*=)","end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#type"},{"include":"#operator-assignment"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"},"2":{"name":"entity.name.type.alias.cs"}}},{"begin":"\\b(using)\\s*(?!\\(|\\s|var)","end":"(?=;)","patterns":[{"include":"#comment"},{"name":"entity.name.type.namespace.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#operator-assignment"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"}}}]},"using-statement":{"begin":"(?\u003c!\\.)\\b(using)\\b\\s*(?=\\()","end":"(?=\\;|})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#local-variable-declaration"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"}}},"variable-initializer":{"begin":"(?\u003c!=|!)(=)(?!=|\u003e)","end":"(?=[,\\)\\];}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.assignment.cs"}}},"verbatim-interpolated-string":{"name":"string.quoted.double.cs","begin":"(?:\\$@|@\\$)\"","end":"\"(?=[^\"])","patterns":[{"include":"#verbatim-string-character-escape"},{"include":"#interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"verbatim-string-character-escape":{"name":"constant.character.escape.cs","match":"\"\""},"verbatim-string-literal":{"name":"string.quoted.double.cs","begin":"@\"","end":"\"(?=[^\"])","patterns":[{"include":"#verbatim-string-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"when-clause":{"begin":"(?\u003c!\\.)\\b(when)\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"},{"include":"#comment"}],"beginCaptures":{"1":{"name":"keyword.control.try.when.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"where-clause":{"begin":"(?x)\n\\b(where)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.where.cs"}}},"while-statement":{"begin":"(?\u003c!\\.)\\b(while)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.while.cs"}}},"xml-attribute":{"patterns":[{"match":"(?x)\n(?:^|\\s+)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)\n(=)","captures":{"1":{"name":"entity.other.attribute-name.cs"},"2":{"name":"entity.other.attribute-name.namespace.cs"},"3":{"name":"punctuation.separator.colon.cs"},"4":{"name":"entity.other.attribute-name.localname.cs"},"5":{"name":"punctuation.separator.equals.cs"}}},{"include":"#xml-string"}]},"xml-cdata":{"name":"string.unquoted.cdata.cs","begin":"\u003c!\\[CDATA\\[","end":"\\]\\]\u003e","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"xml-character-entity":{"patterns":[{"name":"constant.character.entity.cs","match":"(?x)\n(\u0026)\n(\n (?:[[:alpha:]:_][[:alnum:]:_.-]*)|\n (?:\\#[[:digit:]]+)|\n (?:\\#x[[:xdigit:]]+)\n)\n(;)","captures":{"1":{"name":"punctuation.definition.constant.cs"},"3":{"name":"punctuation.definition.constant.cs"}}},{"name":"invalid.illegal.bad-ampersand.cs","match":"\u0026"}]},"xml-comment":{"name":"comment.block.cs","begin":"\u003c!--","end":"--\u003e","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},"xml-doc-comment":{"patterns":[{"include":"#xml-comment"},{"include":"#xml-character-entity"},{"include":"#xml-cdata"},{"include":"#xml-tag"}]},"xml-string":{"patterns":[{"name":"string.quoted.single.cs","begin":"\\'","end":"\\'","patterns":[{"include":"#xml-character-entity"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},{"name":"string.quoted.double.cs","begin":"\\\"","end":"\\\"","patterns":[{"include":"#xml-character-entity"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}}]},"xml-tag":{"name":"meta.tag.cs","begin":"(?x)\n(\u003c/?)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)","end":"(/?\u003e)","patterns":[{"include":"#xml-attribute"}],"beginCaptures":{"1":{"name":"punctuation.definition.tag.cs"},"2":{"name":"entity.name.tag.cs"},"3":{"name":"entity.name.tag.namespace.cs"},"4":{"name":"punctuation.separator.colon.cs"},"5":{"name":"entity.name.tag.localname.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.tag.cs"}}},"yield-break-statement":{"match":"(?\u003c!\\.)\\b(yield)\\b\\s*\\b(break)\\b","captures":{"1":{"name":"keyword.control.flow.yield.cs"},"2":{"name":"keyword.control.flow.break.cs"}}},"yield-return-statement":{"begin":"(?\u003c!\\.)\\b(yield)\\b\\s*\\b(return)\\b","end":"(?=;)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.yield.cs"},"2":{"name":"keyword.control.flow.return.cs"}}},"yield-statement":{"patterns":[{"include":"#yield-return-statement"},{"include":"#yield-break-statement"}]}}}
1
+ {"name":"C#","scopeName":"source.cs","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#directives"},{"include":"#declarations"},{"include":"#script-top-level"}],"repository":{"accessor-getter":{"patterns":[{"contentName":"meta.accessor.getter.cs","begin":"\\{","end":"\\}","patterns":[{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#accessor-getter-expression"},{"include":"#punctuation-semicolon"}]},"accessor-getter-expression":{"contentName":"meta.accessor.getter.cs","begin":"=\u003e","end":"(?=;|\\})","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}}},"accessor-setter":{"patterns":[{"contentName":"meta.accessor.setter.cs","begin":"\\{","end":"\\}","patterns":[{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"contentName":"meta.accessor.setter.cs","begin":"=\u003e","end":"(?=;|\\})","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}}},{"include":"#punctuation-semicolon"}]},"anonymous-method-expression":{"patterns":[{"begin":"(?x)\n((?:\\b(?:async|static)\\b\\s*)*)\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=\u003e)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#block"},{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"patterns":[{"name":"storage.modifier.$0.cs","match":"async|static"}]},"2":{"name":"entity.name.variable.parameter.cs"},"3":{"name":"keyword.operator.arrow.cs"}}},{"begin":"(?x)\n((?:\\b(?:async|static)\\b\\s*)*)\n(?\u003ctuple\u003e\n \\(\n (?:[^()]|\\g\u003ctuple\u003e)*\n \\)\n)\\s*\n(=\u003e)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#block"},{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"patterns":[{"name":"storage.modifier.$0.cs","match":"async|static"}]},"2":{"patterns":[{"include":"#lambda-parameter-list"}]},"3":{"name":"keyword.operator.arrow.cs"}}},{"begin":"(?x)\n((?:\\b(?:async|static)\\b\\s*)*)\n(?:\\b(delegate)\\b\\s*)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#parenthesized-parameter-list"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"name":"storage.modifier.$0.cs","match":"async|static"}]},"2":{"name":"storage.type.delegate.cs"}}}]},"anonymous-object-creation-expression":{"begin":"\\b(new)\\b\\s*(?=\\{|//|/\\*|$)","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#initializer-expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.new.cs"}}},"argument":{"patterns":[{"name":"storage.modifier.$1.cs","match":"\\b(ref|in)\\b"},{"begin":"\\b(out)\\b","end":"(?=,|\\)|\\])","patterns":[{"include":"#declaration-expression-local"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.out.cs"}}},{"include":"#expression"}]},"argument-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"array-creation-expression":{"begin":"(?x)\n\\b(new|stackalloc)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(?=\\[)","end":"(?\u003c=\\])","patterns":[{"include":"#bracketed-argument-list"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.$1.cs"},"2":{"patterns":[{"include":"#type"}]}}},"as-expression":{"match":"(?x)\n(?\u003c!\\.)\\b(as)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?(?!\\?))? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n \\s*(?:,\\s*)* # commata for multi-dimensional arrays\n \\]\n (?:\\s*\\?(?!\\?))? # arrays can be nullable reference types\n )*\n )\n)?","captures":{"1":{"name":"keyword.operator.expression.as.cs"},"2":{"patterns":[{"include":"#type"}]}}},"assignment-expression":{"begin":"(?:\\*|/|%|\\+|-|\\?\\?|\\\u0026|\\^|\u003c\u003c|\u003e\u003e\u003e?|\\|)?=(?!=|\u003e)","end":"(?=[,\\)\\];}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"0":{"patterns":[{"include":"#assignment-operators"}]}}},"assignment-operators":{"patterns":[{"name":"keyword.operator.assignment.compound.cs","match":"\\*=|/=|%=|\\+=|-=|\\?\\?="},{"name":"keyword.operator.assignment.compound.bitwise.cs","match":"\\\u0026=|\\^=|\u003c\u003c=|\u003e\u003e\u003e?=|\\|="},{"name":"keyword.operator.assignment.cs","match":"\\="}]},"attribute":{"patterns":[{"include":"#type-name"},{"include":"#attribute-arguments"}]},"attribute-arguments":{"begin":"(\\()","end":"(\\))","patterns":[{"include":"#attribute-named-argument"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"1":{"name":"punctuation.parenthesis.close.cs"}}},"attribute-named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?==)","end":"(?=(,|\\)))","patterns":[{"include":"#operator-assignment"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"entity.name.variable.property.cs"}}},"attribute-section":{"begin":"(\\[)(assembly|module|field|event|method|param|property|return|type)?(\\:)?","end":"(\\])","patterns":[{"include":"#comment"},{"include":"#attribute"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"},"2":{"name":"keyword.other.attribute-specifier.cs"},"3":{"name":"punctuation.separator.colon.cs"}},"endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}}},"await-expression":{"name":"keyword.operator.expression.await.cs"},"await-statement":{"end":"(?\u003c=})|(?=;|})","patterns":[{"include":"#foreach-statement"},{"include":"#using-statement"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.await.cs"}}},"base-types":{"begin":":","end":"(?=\\{|where|;)","patterns":[{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#preprocessor"}],"beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},"block":{"begin":"\\{","end":"\\}","patterns":[{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"boolean-literal":{"patterns":[{"name":"constant.language.boolean.true.cs","match":"(?\u003c!\\.)\\btrue\\b"},{"name":"constant.language.boolean.false.cs","match":"(?\u003c!\\.)\\bfalse\\b"}]},"bracketed-argument-list":{"begin":"\\[","end":"\\]","patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},"bracketed-parameter-list":{"begin":"(?=(\\[))","end":"(?=(\\]))","patterns":[{"begin":"(?\u003c=\\[)","end":"(?=\\])","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}]}],"beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}}},"break-or-continue-statement":{"name":"keyword.control.flow.$1.cs","match":"(?\u003c!\\.)\\b(break|continue)\\b"},"case-guard":{"patterns":[{"include":"#parenthesized-expression"},{"include":"#expression"}]},"cast-expression":{"match":"(?x)\n(\\()\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(\\))(?=\\s*-*!*@?[_[:alnum:]\\(])","captures":{"1":{"name":"punctuation.parenthesis.open.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"punctuation.parenthesis.close.cs"}}},"casted-constant-pattern":{"begin":"(?x)\n(\\()\n ([\\s.:@_[:alnum:]]+)\n(\\))\n(?=[\\s+\\-!~]*@?[_[:alnum:]('\"]+)","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#casted-constant-pattern"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#constant-pattern"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#constant-pattern"},{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\:\\:)","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"}}},{"name":"variable.other.constant.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"},"2":{"patterns":[{"include":"#type-builtin"},{"include":"#type-name"}]},"3":{"name":"punctuation.parenthesis.close.cs"}}},"catch-clause":{"begin":"(?\u003c!\\.)\\b(catch)\\b","end":"(?\u003c=\\})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"match":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?:(\\g\u003cidentifier\u003e)\\b)?","captures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.local.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#when-clause"},{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.exception.catch.cs"}}},"char-character-escape":{"name":"constant.character.escape.cs","match":"\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4})"},"char-literal":{"name":"string.quoted.single.cs","begin":"'","end":"(\\')|((?:[^\\\\\\n])$)","patterns":[{"include":"#char-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.char.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.char.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"class-declaration":{"begin":"(?=(\\brecord\\b\\s+)?\\bclass\\b)","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"(?x)\n(\\b(record)\\b\\s+)?\n\\b(class)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*","end":"(?=\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"2":{"name":"storage.type.record.cs"},"3":{"name":"storage.type.class.cs"},"4":{"name":"entity.name.type.class.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"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":{"name":"keyword.operator.expression.pattern.combinator.$1.cs","match":"\\b(and|or|not)\\b"},"comment":{"patterns":[{"name":"comment.block.documentation.cs","begin":"(^\\s+)?(///)(?!/)","while":"^(\\s*)(///)(?!/)","patterns":[{"include":"#xml-doc-comment"}],"captures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}}},{"name":"comment.block.documentation.cs","begin":"(^\\s+)?(/\\*\\*)(?!/)","end":"(^\\s+)?(\\*/)","patterns":[{"patterns":[{"include":"#xml-doc-comment"}],"whileCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}}},{"include":"#xml-doc-comment"}],"captures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}}},{"name":"comment.line.double-slash.cs","begin":"(^\\s+)?(//).*$","while":"^(\\s*)(//).*$","captures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"},"2":{"name":"punctuation.definition.comment.cs"}}},{"name":"comment.block.cs","begin":"/\\*","end":"\\*/","captures":{"0":{"name":"punctuation.definition.comment.cs"}}}]},"conditional-operator":{"patterns":[{"name":"keyword.operator.conditional.question-mark.cs","match":"\\?(?!\\?|\\s*[.\\[])"},{"name":"keyword.operator.conditional.colon.cs","match":":"}]},"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":"(?\u003c=\\})|(?=;)","patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"entity.name.function.cs"}}},{"begin":"(:)","end":"(?=\\{|=\u003e)","patterns":[{"include":"#constructor-initializer"}],"beginCaptures":{"1":{"name":"punctuation.separator.colon.cs"}}},{"include":"#parenthesized-parameter-list"},{"include":"#preprocessor"},{"include":"#comment"},{"include":"#expression-body"},{"include":"#block"}]},"constructor-initializer":{"begin":"\\b(base|this)\\b\\s*(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"variable.language.$1.cs"}}},"context-control-paren-statement":{"patterns":[{"include":"#fixed-statement"},{"include":"#lock-statement"},{"include":"#using-statement"}]},"context-control-statement":{"name":"keyword.control.context.$1.cs","match":"\\b(checked|unchecked|unsafe)\\b(?!\\s*[@_[:alpha:](])"},"conversion-operator-declaration":{"begin":"(?x)\n(?\u003cexplicit_or_implicit_keyword\u003e(?:\\b(?:explicit|implicit)))\\s*\n(?\u003coperator_keyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"match":"\\b(explicit)\\b","captures":{"1":{"name":"storage.modifier.explicit.cs"}}},{"match":"\\b(implicit)\\b","captures":{"1":{"name":"storage.modifier.implicit.cs"}}}]},"2":{"name":"storage.type.operator.cs"},"3":{"patterns":[{"include":"#type"}]}}},"declaration-expression-local":{"match":"(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)\\]])","captures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}}},"declaration-expression-tuple":{"match":"(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.tuple-element.cs"}}},"declarations":{"patterns":[{"include":"#namespace-declaration"},{"include":"#type-declarations"},{"include":"#punctuation-semicolon"}]},"default-literal-expression":{"match":"\\b(default)\\b","captures":{"1":{"name":"keyword.operator.expression.default.cs"}}},"delegate-declaration":{"begin":"(?x)\n(?:\\b(delegate)\\b)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()","end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"storage.type.delegate.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.type.delegate.cs"},"8":{"patterns":[{"include":"#type-parameter-list"}]}}},"designation-pattern":{"patterns":[{"include":"#intrusive"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#punctuation-comma"},{"include":"#designation-pattern"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#simple-designation-pattern"}]},"destructor-declaration":{"begin":"(~)(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"name":"punctuation.tilde.cs"},"2":{"name":"entity.name.function.cs"}}},"directives":{"patterns":[{"include":"#extern-alias-directive"},{"include":"#using-directive"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"discard-pattern":{"name":"variable.language.discard.cs","match":"_(?![_[:alnum:]])"},"do-statement":{"begin":"(?\u003c!\\.)\\b(do)\\b","end":"(?=;|})","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.do.cs"}}},"double-raw-interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{][^\\{]|^)((?:\\{)*)(\\{\\{)(?=[^\\{])","end":"\\}\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"element-access-expression":{"begin":"(?x)\n(?:\n (?:(\\?)\\s*)? # preceding null-conditional operator?\n (\\.)\\s*| # preceding dot?\n (-\u003e)\\s* # preceding pointer arrow?\n)?\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*)? # property name\n(?:(\\?)\\s*)? # null-conditional operator?\n(?=\\[) # open bracket of argument list","end":"(?\u003c=\\])(?!\\s*\\[)","patterns":[{"include":"#bracketed-argument-list"}],"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"}}},"else-part":{"begin":"(?\u003c!\\.)\\b(else)\\b","end":"(?\u003c=})|(?=;)","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.else.cs"}}},"enum-declaration":{"begin":"(?=\\benum\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?=enum)","end":"(?=\\{)","patterns":[{"include":"#comment"},{"match":"(enum)\\s+(@?[_[:alpha:]][_[:alnum:]]*)","captures":{"1":{"name":"storage.type.enum.cs"},"2":{"name":"entity.name.type.enum.cs"}}},{"begin":":","end":"(?=\\{)","patterns":[{"include":"#type"}],"beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}}]},{"begin":"\\{","end":"\\}","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#attribute-section"},{"include":"#punctuation-comma"},{"begin":"@?[_[:alpha:]][_[:alnum:]]*","end":"(?=(,|\\}))","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"0":{"name":"entity.name.variable.enum-member.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"event-accessors":{"begin":"\\{","end":"\\}","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"begin":"\\b(add|remove)\\b\\s*(?=\\{|;|=\u003e|//|/\\*|$)","end":"(?\u003c=\\}|;)|(?=\\})","patterns":[{"include":"#accessor-setter"}],"beginCaptures":{"1":{"name":"storage.type.accessor.$1.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"event-declaration":{"begin":"(?x)\n\\b(event)\\b\\s*\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(\\g\u003cidentifier\u003e)\\s* # first event name\n(?=\\{|;|,|=|//|/\\*|$)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#event-accessors"},{"name":"entity.name.variable.event.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"begin":"=","end":"(?\u003c=,)|(?=;)","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"keyword.operator.assignment.cs"}}}],"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"}}},"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":"=\u003e","end":"(?=[,\\);}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}}},"expression-operator-expression":{"begin":"\\b(checked|unchecked|nameof)\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.$1.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"expression-operators":{"patterns":[{"name":"keyword.operator.bitwise.shift.cs","match":"\u003c\u003c|\u003e\u003e\u003e?"},{"name":"keyword.operator.comparison.cs","match":"==|!="},{"name":"keyword.operator.relational.cs","match":"\u003c=|\u003e=|\u003c|\u003e"},{"name":"keyword.operator.logical.cs","match":"\\!|\u0026\u0026|\\|\\|"},{"name":"keyword.operator.bitwise.cs","match":"\\\u0026|~|\\^|\\|"},{"name":"keyword.operator.decrement.cs","match":"--"},{"name":"keyword.operator.increment.cs","match":"\\+\\+"},{"name":"keyword.operator.arithmetic.cs","match":"\\+|-(?!\u003e)|\\*|/|%"},{"name":"keyword.operator.null-coalescing.cs","match":"\\?\\?"},{"name":"keyword.operator.range.cs","match":"\\.\\."}]},"extern-alias-directive":{"begin":"\\b(extern)\\s+(alias)\\b","end":"(?=;)","patterns":[{"name":"variable.other.alias.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"1":{"name":"keyword.other.directive.extern.cs"},"2":{"name":"keyword.other.directive.alias.cs"}}},"field-declaration":{"begin":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s* # first field name\n(?!=\u003e|==)(?=,|;|=|$)","end":"(?=;)","patterns":[{"name":"entity.name.variable.field.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.field.cs"}}},"finally-clause":{"begin":"(?\u003c!\\.)\\b(finally)\\b","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.exception.finally.cs"}}},"fixed-statement":{"begin":"\\b(fixed)\\b","end":"(?\u003c=\\))|(?=;|})","patterns":[{"include":"#intrusive"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#intrusive"},{"include":"#local-variable-declaration"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.context.fixed.cs"}}},"for-statement":{"begin":"\\b(for)\\b","end":"(?\u003c=\\))|(?=;|})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"begin":"\\G","end":"(?=;|\\))","patterns":[{"include":"#intrusive"},{"include":"#local-variable-declaration"}]},{"begin":"(?=;)","end":"(?=\\))","patterns":[{"include":"#intrusive"},{"include":"#expression"},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"}]}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.loop.for.cs"}}},"foreach-statement":{"begin":"\\b(foreach)\\b","end":"(?\u003c=\\))|(?=;|})","patterns":[{"include":"#intrusive"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#intrusive"},{"match":"(?x)\n(?:\n (\\bvar\\b)|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s+\n\\b(in)\\b","captures":{"1":{"name":"storage.type.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(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\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"}}},{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.loop.foreach.cs"}}},"generic-constraints":{"begin":"(where)\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","end":"(?=\\{|where|;|=\u003e)","patterns":[{"name":"storage.type.class.cs","match":"\\bclass\\b"},{"name":"storage.type.struct.cs","match":"\\bstruct\\b"},{"match":"(new)\\s*(\\()\\s*(\\))","captures":{"1":{"name":"keyword.operator.expression.new.cs"},"2":{"name":"punctuation.parenthesis.open.cs"},"3":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"storage.modifier.where.cs"},"2":{"name":"entity.name.type.type-parameter.cs"},"3":{"name":"punctuation.separator.colon.cs"}}},"goto-statement":{"begin":"(?\u003c!\\.)\\b(goto)\\b","end":"(?=[;}])","patterns":[{"begin":"\\b(case)\\b","end":"(?=[;}])","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.case.cs"}}},{"match":"\\b(default)\\b","captures":{"1":{"name":"keyword.control.conditional.default.cs"}}},{"name":"entity.name.label.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"1":{"name":"keyword.control.flow.goto.cs"}}},"group-by":{"match":"\\b(by)\\b\\s*","captures":{"1":{"name":"keyword.operator.expression.query.by.cs"}}},"group-clause":{"begin":"\\b(group)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#group-by"},{"include":"#group-into"},{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.query.group.cs"}}},"group-into":{"match":"(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*","captures":{"1":{"name":"keyword.operator.expression.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}}},"identifier":{"name":"variable.other.readwrite.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},"if-statement":{"begin":"(?\u003c!\\.)\\b(if)\\b\\s*(?=\\()","end":"(?\u003c=})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.if.cs"}}},"indexer-declaration":{"begin":"(?x)\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cindexer_name\u003ethis)\\s*\n(?=\\[)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#bracketed-parameter-list"},{"include":"#property-accessors"},{"include":"#accessor-getter-expression"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"variable.language.this.cs"}}},"initializer-expression":{"begin":"\\{","end":"\\}","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"interface-declaration":{"begin":"(?=\\binterface\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?x)\n(interface)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"storage.type.interface.cs"},"2":{"name":"entity.name.type.interface.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#interface-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"interface-members":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#property-declaration"},{"include":"#event-declaration"},{"include":"#indexer-declaration"},{"include":"#method-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"interpolated-string":{"name":"string.quoted.double.cs","begin":"\\$\"","end":"(\")|((?:[^\\\\\\n])$)","patterns":[{"include":"#string-character-escape"},{"include":"#interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{]|^)((?:\\{\\{)*)(\\{)(?=[^\\{])","end":"\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"intrusive":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"}]},"invocation-expression":{"begin":"(?x)\n(?:\n (?:(\\?)\\s*)? # preceding null-conditional operator?\n (\\.)\\s*| # preceding dot?\n (-\u003e)\\s* # preceding pointer arrow?\n)?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # method name\n(\n \u003c\n (?\u003ctype_args\u003e\n [^\u003c\u003e()]+|\n \u003c\\g\u003ctype_args\u003e+\u003e|\n \\(\\g\u003ctype_args\u003e+\\)\n )+\n \u003e\\s*\n)? # type arguments\n(?=\\() # open paren of argument list","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"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"}]}}},"is-expression":{"begin":"(?\u003c!\\.)\\b(is)\\b","end":"(?=[)}\\],;:?=\u0026|^]|!=)","patterns":[{"include":"#pattern"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.pattern.is.cs"}}},"join-clause":{"begin":"(?x)\n\\b(join)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#join-on"},{"include":"#join-equals"},{"include":"#join-into"},{"include":"#query-body"},{"include":"#expression"}],"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"}}},"join-equals":{"match":"\\b(equals)\\b\\s*","captures":{"1":{"name":"keyword.operator.expression.query.equals.cs"}}},"join-into":{"match":"(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*","captures":{"1":{"name":"keyword.operator.expression.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}}},"join-on":{"match":"\\b(on)\\b\\s*","captures":{"1":{"name":"keyword.operator.expression.query.on.cs"}}},"labeled-statement":{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","captures":{"1":{"name":"entity.name.label.cs"},"2":{"name":"punctuation.separator.colon.cs"}}},"lambda-parameter":{"match":"(?x)\n(?:\\b(ref|out|in)\\b)?\\s*\n(?:(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+)?\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"storage.modifier.$1.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}}},"lambda-parameter-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#lambda-parameter"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"language-variable":{"patterns":[{"name":"variable.language.$1.cs","match":"\\b(base|this)\\b"},{"name":"variable.other.$1.cs","match":"\\b(value)\\b"}]},"let-clause":{"begin":"(?x)\n\\b(let)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=)\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.query.let.cs"},"2":{"name":"entity.name.variable.range-variable.cs"},"3":{"name":"keyword.operator.assignment.cs"}}},"list-pattern":{"begin":"(?=\\[)","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"begin":"\\[","end":"\\]","patterns":[{"include":"#pattern"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},{"begin":"(?\u003c=\\])","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\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(?\u003cconst_keyword\u003e\\b(?:const)\\b)\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?=,|;|=)","end":"(?=;)","patterns":[{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"storage.modifier.const.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}}},"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(?\u003ctype_name\u003e\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n \\s*(?:,\\s*)* # commata for multi-dimensional arrays\n \\]\n (?:\\s*\\?)? # arrays can be nullable reference types\n )*\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c[^\u003c\u003e]+\u003e)?\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#storage-modifier"}]},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.function.cs"},"8":{"patterns":[{"include":"#type-parameter-list"}]}}},"local-tuple-var-deconstruction":{"begin":"(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?=;|=|\\))","end":"(?=;|\\))","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"storage.type.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}}},"local-variable-declaration":{"begin":"(?x)\n(?:\n (?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)| # ref local\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref local\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*[?*]\\s*)? # nullable or pointer suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?!=\u003e)\n(?=,|;|=|\\))","end":"(?=[;)}])","patterns":[{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}],"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"}}},"lock-statement":{"begin":"\\b(lock)\\b","end":"(?\u003c=\\))|(?=;|})","patterns":[{"include":"#intrusive"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#intrusive"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.context.lock.cs"}}},"member-access-expression":{"patterns":[{"match":"(?x)\n(?:\n (?:(\\?)\\s*)? # preceding null-conditional operator?\n (\\.)\\s*| # preceding dot?\n (-\u003e)\\s* # preceding pointer arrow?\n)\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # property name\n(?![_[:alnum:]]|\\(|(\\?)?\\[|\u003c) # next character is not alpha-numeric, nor a (, [, or \u003c. Also, test for ?[","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(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?\u003ctype_params\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctype_params\u003e)+\u003e\\s*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)","captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"variable.other.object.cs"},"3":{"patterns":[{"include":"#type-arguments"}]}}},{"match":"(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?=\n \\s*(?:(?:\\?\\s*)?\\.|-\u003e)\n \\s*@?[_[:alpha:]][_[:alnum:]]*\n)","captures":{"1":{"name":"variable.other.object.cs"}}}]},"method-declaration":{"begin":"(?x)\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.function.cs"},"9":{"patterns":[{"include":"#type-parameter-list"}]}}},"named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","end":"(?=(,|\\)|\\]))","patterns":[{"include":"#argument"}],"beginCaptures":{"1":{"name":"entity.name.variable.parameter.cs"},"2":{"name":"punctuation.separator.colon.cs"}}},"namespace-declaration":{"begin":"\\b(namespace)\\s+","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"name":"entity.name.type.namespace.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-accessor"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#declarations"},{"include":"#using-directive"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"storage.type.namespace.cs"}}},"null-literal":{"name":"constant.language.null.cs","match":"(?\u003c!\\.)\\bnull\\b"},"numeric-literal":{"match":"(?\u003c!\\w)\\.?\\d(?:(?:[0-9a-zA-Z_]|_)|(?\u003c=[eE])[+-]|\\.\\d)*","captures":{"0":{"patterns":[{"begin":"(?=.)","end":"$","patterns":[{"match":"(\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?:(?\u003c=[0-9])|\\.(?=[0-9])))([0-9](?:[0-9]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?\u003c!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?([fFdDmM](?!\\w))?$","captures":{"10":{"name":"keyword.operator.arithmetic.cs"},"11":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"12":{"name":"constant.numeric.other.suffix.cs"},"2":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"4":{"name":"constant.numeric.other.separator.decimals.cs"},"5":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"6":{"name":"constant.numeric.other.separator.thousands.cs"},"8":{"name":"constant.numeric.other.exponent.cs"},"9":{"name":"keyword.operator.arithmetic.cs"}}},{"match":"(\\G0[bB])([01_](?:[01_]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\w))?$","captures":{"1":{"name":"constant.numeric.other.preffix.binary.cs"},"2":{"name":"constant.numeric.binary.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"4":{"name":"constant.numeric.other.suffix.cs"}}},{"match":"(\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\w))?$","captures":{"1":{"name":"constant.numeric.other.preffix.hex.cs"},"2":{"name":"constant.numeric.hex.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"4":{"name":"constant.numeric.other.suffix.cs"}}},{"match":"(\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?\u003c!_)([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\\w))?$","captures":{"2":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"3":{"name":"constant.numeric.other.separator.thousands.cs"},"5":{"name":"constant.numeric.other.exponent.cs"},"6":{"name":"keyword.operator.arithmetic.cs"},"7":{"name":"keyword.operator.arithmetic.cs"},"8":{"name":"constant.numeric.decimal.cs","patterns":[{"name":"constant.numeric.other.separator.thousands.cs","match":"(?\u003c=[0-9a-fA-F])_(?=[0-9a-fA-F])"}]},"9":{"name":"constant.numeric.other.suffix.cs"}}},{"name":"invalid.illegal.constant.numeric.cs","match":"(?:(?:[0-9a-zA-Z_]|_)|(?\u003c=[eE])[+-]|\\.\\d)+"}]}]}}},"object-creation-expression":{"patterns":[{"include":"#object-creation-expression-with-parameters"},{"include":"#object-creation-expression-with-no-parameters"}]},"object-creation-expression-with-no-parameters":{"match":"(?x)\n(new)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\{|//|/\\*|$)","captures":{"1":{"name":"keyword.operator.expression.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"object-creation-expression-with-parameters":{"begin":"(?x)\n(new)(?:\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n))?\\s*\n(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"operator-assignment":{"name":"keyword.operator.assignment.cs","match":"(?\u003c!=|!)(=)(?!=)"},"operator-declaration":{"begin":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n\\b(?\u003coperator_keyword\u003eoperator)\\b\\s*\n(?\u003coperator\u003e[+\\-*/%\u0026|\\^!=~\u003c\u003e]+|true|false)\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"storage.type.operator.cs"},"7":{"name":"entity.name.function.cs"}}},"orderby-clause":{"begin":"\\b(orderby)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#ordering-direction"},{"include":"#query-body"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.query.orderby.cs"}}},"ordering-direction":{"match":"\\b(ascending|descending)\\b","captures":{"1":{"name":"keyword.operator.expression.query.$1.cs"}}},"parameter":{"match":"(?x)\n(?:(?:\\b(ref|params|out|in|this)\\b)\\s+)?\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)","captures":{"1":{"name":"storage.modifier.$1.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}}},"parenthesized-expression":{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"parenthesized-parameter-list":{"begin":"(\\()","end":"(\\))","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"pattern":{"patterns":[{"include":"#intrusive"},{"include":"#combinator-pattern"},{"include":"#discard-pattern"},{"include":"#constant-pattern"},{"include":"#relational-pattern"},{"include":"#var-pattern"},{"include":"#type-pattern"},{"include":"#positional-pattern"},{"include":"#property-pattern"},{"include":"#list-pattern"},{"include":"#slice-pattern"}]},"positional-pattern":{"begin":"(?=\\()","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#subpattern"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"begin":"(?\u003c=\\))","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#intrusive"},{"include":"#property-pattern"},{"include":"#simple-designation-pattern"}]}]},"preprocessor":{"name":"meta.preprocessor.cs","begin":"^\\s*(\\#)\\s*","end":"(?\u003c=$)","patterns":[{"include":"#comment"},{"include":"#preprocessor-define-or-undef"},{"include":"#preprocessor-if-or-elif"},{"include":"#preprocessor-else-or-endif"},{"include":"#preprocessor-warning-or-error"},{"include":"#preprocessor-region"},{"include":"#preprocessor-endregion"},{"include":"#preprocessor-load"},{"include":"#preprocessor-r"},{"include":"#preprocessor-line"},{"include":"#preprocessor-pragma-warning"},{"include":"#preprocessor-pragma-checksum"}],"beginCaptures":{"1":{"name":"punctuation.separator.hash.cs"}}},"preprocessor-define-or-undef":{"match":"\\b(?:(define)|(undef))\\b\\s*\\b([_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"keyword.preprocessor.define.cs"},"2":{"name":"keyword.preprocessor.undef.cs"},"3":{"name":"entity.name.variable.preprocessor.symbol.cs"}}},"preprocessor-else-or-endif":{"match":"\\b(?:(else)|(endif))\\b","captures":{"1":{"name":"keyword.preprocessor.else.cs"},"2":{"name":"keyword.preprocessor.endif.cs"}}},"preprocessor-endregion":{"match":"\\b(endregion)\\b","captures":{"1":{"name":"keyword.preprocessor.endregion.cs"}}},"preprocessor-expression":{"patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#preprocessor-expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"match":"\\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\\b","captures":{"1":{"name":"constant.language.boolean.true.cs"},"2":{"name":"constant.language.boolean.false.cs"},"3":{"name":"entity.name.variable.preprocessor.symbol.cs"}}},{"match":"(==|!=)|(\\!|\u0026\u0026|\\|\\|)","captures":{"1":{"name":"keyword.operator.comparison.cs"},"2":{"name":"keyword.operator.logical.cs"}}}]},"preprocessor-if-or-elif":{"begin":"\\b(?:(if)|(elif))\\b","end":"(?=$)","patterns":[{"include":"#comment"},{"include":"#preprocessor-expression"}],"beginCaptures":{"1":{"name":"keyword.preprocessor.if.cs"},"2":{"name":"keyword.preprocessor.elif.cs"}}},"preprocessor-line":{"begin":"\\b(line)\\b","end":"(?=$)","patterns":[{"match":"\\b(?:(default|hidden))","captures":{"1":{"name":"keyword.preprocessor.default.cs"},"2":{"name":"keyword.preprocessor.hidden.cs"}}},{"match":"[0-9]+","captures":{"0":{"name":"constant.numeric.decimal.cs"}}},{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.line.cs"}}},"preprocessor-load":{"begin":"\\b(load)\\b","end":"(?=$)","patterns":[{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.load.cs"}}},"preprocessor-pragma-checksum":{"match":"\\b(pragma)\\b\\s*\\b(checksum)\\b\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")","captures":{"1":{"name":"keyword.preprocessor.pragma.cs"},"2":{"name":"keyword.preprocessor.checksum.cs"},"3":{"name":"string.quoted.double.cs"},"4":{"name":"string.quoted.double.cs"},"5":{"name":"string.quoted.double.cs"}}},"preprocessor-pragma-warning":{"match":"\\b(pragma)\\b\\s*\\b(warning)\\b\\s*\\b(?:(disable)|(restore))\\b(\\s*[0-9]+(?:\\s*,\\s*[0-9]+)?)?","captures":{"1":{"name":"keyword.preprocessor.pragma.cs"},"2":{"name":"keyword.preprocessor.warning.cs"},"3":{"name":"keyword.preprocessor.disable.cs"},"4":{"name":"keyword.preprocessor.restore.cs"},"5":{"patterns":[{"match":"[0-9]+","captures":{"0":{"name":"constant.numeric.decimal.cs"}}},{"include":"#punctuation-comma"}]}}},"preprocessor-r":{"begin":"\\b(r)\\b","end":"(?=$)","patterns":[{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.r.cs"}}},"preprocessor-region":{"match":"\\b(region)\\b\\s*(.*)(?=$)","captures":{"1":{"name":"keyword.preprocessor.region.cs"},"2":{"name":"string.unquoted.preprocessor.message.cs"}}},"preprocessor-warning-or-error":{"match":"\\b(?:(warning)|(error))\\b\\s*(.*)(?=$)","captures":{"1":{"name":"keyword.preprocessor.warning.cs"},"2":{"name":"keyword.preprocessor.error.cs"},"3":{"name":"string.unquoted.preprocessor.message.cs"}}},"property-accessors":{"begin":"\\{","end":"\\}","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"name":"storage.modifier.$1.cs","match":"\\b(private|protected|internal)\\b"},{"begin":"\\b(get)\\b\\s*(?=\\{|;|=\u003e|//|/\\*|$)","end":"(?\u003c=\\}|;)|(?=\\})","patterns":[{"include":"#accessor-getter"}],"beginCaptures":{"1":{"name":"storage.type.accessor.$1.cs"}}},{"begin":"\\b(set|init)\\b\\s*(?=\\{|;|=\u003e|//|/\\*|$)","end":"(?\u003c=\\}|;)|(?=\\})","patterns":[{"include":"#accessor-setter"}],"beginCaptures":{"1":{"name":"storage.type.accessor.$1.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"property-declaration":{"begin":"(?x)\n\n# The negative lookahead below ensures that we don't match nested types\n# or other declarations as properties.\n(?![[:word:][:space:]]*\\b(?:class|interface|struct|enum|event)\\b)\n\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cproperty_name\u003e\\g\u003cidentifier\u003e)\\s*\n(?=\\{|=\u003e|//|/\\*|$)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#property-accessors"},{"include":"#accessor-getter-expression"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.variable.property.cs"}}},"property-pattern":{"begin":"(?={)","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"begin":"\\{","end":"\\}","patterns":[{"include":"#subpattern"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"begin":"(?\u003c=\\})","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#intrusive"},{"include":"#simple-designation-pattern"}]}]},"punctuation-accessor":{"name":"punctuation.accessor.cs","match":"\\."},"punctuation-comma":{"name":"punctuation.separator.comma.cs","match":","},"punctuation-semicolon":{"name":"punctuation.terminator.statement.cs","match":";"},"query-body":{"patterns":[{"include":"#let-clause"},{"include":"#where-clause"},{"include":"#join-clause"},{"include":"#orderby-clause"},{"include":"#select-clause"},{"include":"#group-clause"}]},"query-expression":{"begin":"(?x)\n\\b(from)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.query.from.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.range-variable.cs"},"8":{"name":"keyword.operator.expression.query.in.cs"}}},"raw-interpolated-string":{"patterns":[{"include":"#raw-interpolated-string-five-or-more-quote-one-or-more-interpolation"},{"include":"#raw-interpolated-string-three-or-more-quote-three-or-more-interpolation"},{"include":"#raw-interpolated-string-quadruple-quote-double-interpolation"},{"include":"#raw-interpolated-string-quadruple-quote-single-interpolation"},{"include":"#raw-interpolated-string-triple-quote-double-interpolation"},{"include":"#raw-interpolated-string-triple-quote-single-interpolation"}]},"raw-interpolated-string-five-or-more-quote-one-or-more-interpolation":{"name":"string.quoted.double.cs","begin":"\\$+\"\"\"\"\"+","end":"\"\"\"\"\"+","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-quadruple-quote-double-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\\$\"\"\"\"","end":"\"\"\"\"","patterns":[{"include":"#double-raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-quadruple-quote-single-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\"\"\"\"","end":"\"\"\"\"","patterns":[{"include":"#raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-three-or-more-quote-three-or-more-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\\$\\$+\"\"\"+","end":"\"\"\"+","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-triple-quote-double-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\\$\"\"\"","end":"\"\"\"","patterns":[{"include":"#double-raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolated-string-triple-quote-single-interpolation":{"name":"string.quoted.double.cs","begin":"\\$\"\"\"","end":"\"\"\"","patterns":[{"include":"#raw-interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{]|^)((?:\\{)*)(\\{)(?=[^\\{])","end":"\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"raw-string-literal":{"patterns":[{"include":"#raw-string-literal-more"},{"include":"#raw-string-literal-quadruple"},{"include":"#raw-string-literal-triple"}]},"raw-string-literal-more":{"name":"string.quoted.double.cs","begin":"\"\"\"\"\"+","end":"\"\"\"\"\"+","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-string-literal-quadruple":{"name":"string.quoted.double.cs","begin":"\"\"\"\"","end":"\"\"\"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"raw-string-literal-triple":{"name":"string.quoted.double.cs","begin":"\"\"\"","end":"\"\"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"readonly-modifier":{"name":"storage.modifier.readonly.cs","match":"\\breadonly\\b"},"record-declaration":{"begin":"(?=\\brecord\\b)","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"(?x)\n(record)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"storage.type.record.cs"},"2":{"name":"entity.name.type.class.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"ref-modifier":{"name":"storage.modifier.ref.cs","match":"\\bref\\b"},"relational-pattern":{"begin":"\u003c=?|\u003e=?","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.relational.cs"}}},"return-statement":{"begin":"(?\u003c!\\.)\\b(return)\\b","end":"(?=[;}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.return.cs"}}},"script-top-level":{"patterns":[{"include":"#statement"},{"include":"#method-declaration"},{"include":"#punctuation-semicolon"}]},"select-clause":{"begin":"\\b(select)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.query.select.cs"}}},"simple-designation-pattern":{"patterns":[{"include":"#discard-pattern"},{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}]},"slice-pattern":{"name":"keyword.operator.range.cs","match":"\\.\\."},"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":"#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":"#context-control-statement"},{"include":"#context-control-paren-statement"},{"include":"#labeled-statement"},{"include":"#object-creation-expression"},{"include":"#array-creation-expression"},{"include":"#anonymous-object-creation-expression"},{"include":"#local-declaration"},{"include":"#block"},{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"storage-modifier":{"name":"storage.modifier.$1.cs","match":"(?\u003c!\\.)\\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe|ref|required|file)\\b"},"string-character-escape":{"name":"constant.character.escape.cs","match":"\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4})"},"string-literal":{"name":"string.quoted.double.cs","begin":"(?\u003c!@)\"","end":"(\")|((?:[^\\\\\\n])$)","patterns":[{"include":"#string-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"struct-declaration":{"begin":"(?=(\\brecord\\b\\s+)?\\bstruct\\b)","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"(?x)\n(\\b(record)\\b\\s+)?\n(struct)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)|(?=;)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#parenthesized-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"2":{"name":"storage.type.record.cs"},"3":{"name":"storage.type.struct.cs"},"4":{"name":"entity.name.type.struct.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"subpattern":{"patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*(?:\\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*)*)\\s*(:)","captures":{"1":{"patterns":[{"name":"variable.other.object.property.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-accessor"}]},"2":{"name":"punctuation.separator.colon.cs"}}},{"include":"#pattern"}]},"switch-expression":{"begin":"\\{","end":"\\}","patterns":[{"include":"#punctuation-comma"},{"begin":"=\u003e","end":"(?=,|})","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}}},{"begin":"\\b(when)\\b","end":"(?==\u003e|,|})","patterns":[{"include":"#case-guard"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.when.cs"}}},{"begin":"(?!\\s)","end":"(?=\\bwhen\\b|=\u003e|,|})","patterns":[{"include":"#pattern"}]}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"switch-label":{"begin":"\\b(case|default)\\b","end":"(:)|(?=})","patterns":[{"begin":"\\b(when)\\b","end":"(?=:|})","patterns":[{"include":"#case-guard"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.when.cs"}}},{"begin":"(?!\\s)","end":"(?=\\bwhen\\b|:|})","patterns":[{"include":"#pattern"}]}],"beginCaptures":{"1":{"name":"keyword.control.conditional.$1.cs"}},"endCaptures":{"1":{"name":"punctuation.separator.colon.cs"}}},"switch-statement":{"patterns":[{"include":"#intrusive"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#switch-label"},{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}]},"switch-statement-or-expression":{"begin":"(?\u003c!\\.)\\b(switch)\\b","end":"(?\u003c=})|(?=})","patterns":[{"include":"#intrusive"},{"begin":"(?=\\()","end":"(?\u003c=\\})|(?=\\})","patterns":[{"include":"#switch-statement"}]},{"begin":"(?=\\{)","end":"(?\u003c=\\})|(?=\\})","patterns":[{"include":"#switch-expression"}]}],"beginCaptures":{"1":{"name":"keyword.control.conditional.switch.cs"}}},"throw-expression":{"match":"\\b(throw)\\b","captures":{"1":{"name":"keyword.control.flow.throw.cs"}}},"throw-statement":{"begin":"(?\u003c!\\.)\\b(throw)\\b","end":"(?=[;}])","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.throw.cs"}}},"try-block":{"begin":"(?\u003c!\\.)\\b(try)\\b","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.exception.try.cs"}}},"try-statement":{"patterns":[{"include":"#try-block"},{"include":"#catch-clause"},{"include":"#finally-clause"}]},"tuple-declaration-deconstruction-element-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-declaration-deconstruction-element-list"},{"include":"#declaration-expression-tuple"},{"include":"#punctuation-comma"},{"match":"(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"entity.name.variable.tuple-element.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-deconstruction-assignment":{"match":"(?x)\n(?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?!=\u003e|==)(?==)","captures":{"1":{"patterns":[{"include":"#tuple-deconstruction-element-list"}]}}},"tuple-deconstruction-element-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-deconstruction-element-list"},{"include":"#declaration-expression-tuple"},{"include":"#punctuation-comma"},{"match":"(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"variable.other.readwrite.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-element":{"match":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\n(?:(?\u003ctuple_name\u003e\\g\u003cidentifier\u003e)\\b)?","captures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.tuple-element.cs"}}},"tuple-literal":{"begin":"(\\()(?=.*[:,])","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-literal-element"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-literal-element":{"begin":"(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*\n(?=:)","end":"(:)","beginCaptures":{"1":{"name":"entity.name.variable.tuple-element.cs"}},"endCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},"tuple-type":{"begin":"\\(","end":"\\)","patterns":[{"include":"#tuple-element"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"type":{"patterns":[{"include":"#comment"},{"include":"#ref-modifier"},{"include":"#readonly-modifier"},{"include":"#tuple-type"},{"include":"#type-builtin"},{"include":"#type-name"},{"include":"#type-arguments"},{"include":"#type-array-suffix"},{"include":"#type-nullable-suffix"},{"include":"#type-pointer-suffix"}]},"type-arguments":{"begin":"\u003c","end":"\u003e","patterns":[{"include":"#type"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.cs"}}},"type-array-suffix":{"begin":"\\[","end":"\\]","patterns":[{"include":"#intrusive"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},"type-builtin":{"match":"\\b(bool|s?byte|u?short|n?u?int|u?long|float|double|decimal|char|string|object|void|dynamic)\\b","captures":{"1":{"name":"keyword.type.$1.cs"}}},"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":"#record-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"type-name":{"patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\:\\:)","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":"(\\.)\\s*(@?[_[:alpha:]][_[:alnum:]]*)","captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"entity.name.type.cs"}}},{"name":"entity.name.type.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}]},"type-nullable-suffix":{"name":"punctuation.separator.question-mark.cs","match":"\\?"},"type-operator-expression":{"begin":"\\b(default|sizeof|typeof)\\s*(\\()","end":"\\)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.$1.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"type-parameter-list":{"begin":"\\\u003c","end":"\\\u003e","patterns":[{"name":"storage.modifier.$1.cs","match":"\\b(in|out)\\b"},{"name":"entity.name.type.type-parameter.cs","match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b"},{"include":"#comment"},{"include":"#punctuation-comma"},{"include":"#attribute-section"}],"beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.cs"}}},"type-pattern":{"begin":"(?=@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"begin":"\\G","end":"(?!\\G[@_[:alpha:]])(?=[\\({@_[:alpha:])}\\],;:=\u0026|^]|(?:\\s|^)\\?|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#intrusive"},{"include":"#type-subpattern"}]},{"begin":"(?=[\\({@_[:alpha:]])","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#intrusive"},{"include":"#positional-pattern"},{"include":"#property-pattern"},{"include":"#simple-designation-pattern"}]}]},"type-pointer-suffix":{"name":"punctuation.separator.asterisk.cs","match":"\\*"},"type-subpattern":{"patterns":[{"include":"#type-builtin"},{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(::)","end":"(?\u003c=[_[:alnum:]])|(?=[.\u003c\\[\\({)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#intrusive"},{"name":"entity.name.type.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"1":{"name":"entity.name.type.alias.cs"},"2":{"name":"punctuation.separator.coloncolon.cs"}}},{"name":"entity.name.type.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"},{"begin":"\\.","end":"(?\u003c=[_[:alnum:]])|(?=[\u003c\\[\\({)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#intrusive"},{"name":"entity.name.type.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"0":{"name":"punctuation.accessor.cs"}}},{"include":"#type-arguments"},{"include":"#type-array-suffix"},{"name":"punctuation.separator.question-mark.cs","match":"(?\u003c!\\s)\\?"}]},"using-directive":{"patterns":[{"begin":"\\b(?:(global)\\s+)?(using)\\s+(static)\\b\\s*(?:(unsafe)\\b\\s*)?","end":"(?=;)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.directive.global.cs"},"2":{"name":"keyword.other.directive.using.cs"},"3":{"name":"keyword.other.directive.static.cs"},"4":{"name":"storage.modifier.unsafe.cs"}}},{"begin":"\\b(?:(global)\\s+)?(using)\\b\\s*(?:(unsafe)\\b\\s*)?(@?[_[:alpha:]][_[:alnum:]]*)\\s*(=)","end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.directive.global.cs"},"2":{"name":"keyword.other.directive.using.cs"},"3":{"name":"storage.modifier.unsafe.cs"},"4":{"name":"entity.name.type.alias.cs"},"5":{"name":"keyword.operator.assignment.cs"}}},{"begin":"\\b(?:(global)\\s+)?(using)\\b\\s*+(?!\\(|var\\b)","end":"(?=;)","patterns":[{"include":"#comment"},{"name":"entity.name.type.namespace.cs","match":"\\@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-accessor"},{"include":"#operator-assignment"}],"beginCaptures":{"1":{"name":"keyword.other.directive.global.cs"},"2":{"name":"keyword.other.directive.using.cs"}}}]},"using-statement":{"begin":"\\b(using)\\b","end":"(?\u003c=\\))|(?=;|})","patterns":[{"include":"#intrusive"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#intrusive"},{"include":"#await-expression"},{"include":"#local-variable-declaration"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#local-variable-declaration"}],"beginCaptures":{"1":{"name":"keyword.control.context.using.cs"}}},"var-pattern":{"begin":"\\b(var)\\b","end":"(?=[)}\\],;:?=\u0026|^]|!=|\\b(and|or|when)\\b)","patterns":[{"include":"#designation-pattern"}],"beginCaptures":{"1":{"name":"storage.type.var.cs"}}},"variable-initializer":{"begin":"(?\u003c!=|!)(=)(?!=|\u003e)","end":"(?=[,\\)\\];}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.assignment.cs"}}},"verbatim-interpolated-string":{"name":"string.quoted.double.cs","begin":"(?:\\$@|@\\$)\"","end":"\"(?=[^\"])","patterns":[{"include":"#verbatim-string-character-escape"},{"include":"#interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"verbatim-string-character-escape":{"name":"constant.character.escape.cs","match":"\"\""},"verbatim-string-literal":{"name":"string.quoted.double.cs","begin":"@\"","end":"\"(?=[^\"])","patterns":[{"include":"#verbatim-string-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"when-clause":{"begin":"(?\u003c!\\.)\\b(when)\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"},{"include":"#comment"}],"beginCaptures":{"1":{"name":"keyword.control.exception.when.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"where-clause":{"begin":"(?x)\n\\b(where)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.query.where.cs"}}},"while-statement":{"begin":"(?\u003c!\\.)\\b(while)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.while.cs"}}},"with-expression":{"begin":"(?\u003c!\\.)\\b(with)\\b\\s*(?=\\{|//|/\\*|$)","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#initializer-expression"}],"beginCaptures":{"1":{"name":"keyword.operator.expression.with.cs"}}},"xml-attribute":{"patterns":[{"match":"(?x)\n(?:^|\\s+)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)\n(=)","captures":{"1":{"name":"entity.other.attribute-name.cs"},"2":{"name":"entity.other.attribute-name.namespace.cs"},"3":{"name":"punctuation.separator.colon.cs"},"4":{"name":"entity.other.attribute-name.localname.cs"},"5":{"name":"punctuation.separator.equals.cs"}}},{"include":"#xml-string"}]},"xml-cdata":{"name":"string.unquoted.cdata.cs","begin":"\u003c!\\[CDATA\\[","end":"\\]\\]\u003e","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"xml-character-entity":{"patterns":[{"name":"constant.character.entity.cs","match":"(?x)\n(\u0026)\n(\n (?:[[:alpha:]:_][[:alnum:]:_.-]*)|\n (?:\\#[[:digit:]]+)|\n (?:\\#x[[:xdigit:]]+)\n)\n(;)","captures":{"1":{"name":"punctuation.definition.constant.cs"},"3":{"name":"punctuation.definition.constant.cs"}}},{"name":"invalid.illegal.bad-ampersand.cs","match":"\u0026"}]},"xml-comment":{"name":"comment.block.cs","begin":"\u003c!--","end":"--\u003e","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},"xml-doc-comment":{"patterns":[{"include":"#xml-comment"},{"include":"#xml-character-entity"},{"include":"#xml-cdata"},{"include":"#xml-tag"}]},"xml-string":{"patterns":[{"name":"string.quoted.single.cs","begin":"\\'","end":"\\'","patterns":[{"include":"#xml-character-entity"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},{"name":"string.quoted.double.cs","begin":"\\\"","end":"\\\"","patterns":[{"include":"#xml-character-entity"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}}]},"xml-tag":{"name":"meta.tag.cs","begin":"(?x)\n(\u003c/?)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)","end":"(/?\u003e)","patterns":[{"include":"#xml-attribute"}],"beginCaptures":{"1":{"name":"punctuation.definition.tag.cs"},"2":{"name":"entity.name.tag.cs"},"3":{"name":"entity.name.tag.namespace.cs"},"4":{"name":"punctuation.separator.colon.cs"},"5":{"name":"entity.name.tag.localname.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.tag.cs"}}},"yield-break-statement":{"match":"(?\u003c!\\.)\\b(yield)\\b\\s*\\b(break)\\b","captures":{"1":{"name":"keyword.control.flow.yield.cs"},"2":{"name":"keyword.control.flow.break.cs"}}},"yield-return-statement":{"begin":"(?\u003c!\\.)\\b(yield)\\b\\s*\\b(return)\\b","end":"(?=[;}])","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.yield.cs"},"2":{"name":"keyword.control.flow.return.cs"}}},"yield-statement":{"patterns":[{"include":"#yield-return-statement"},{"include":"#yield-break-statement"}]}}}