<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>name</key>
    <string>C#</string>
    <key>scopeName</key>
    <string>source.cs</string>
    <key>fileTypes</key>
    <array>
      <string>cs</string>
    </array>
    <key>uuid</key>
    <string>f7de61e2-bdde-4e2a-a139-8221b179584e</string>
    <key>patterns</key>
    <array>
      <dict>
        <key>include</key>
        <string>#preprocessor</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#comment</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#directives</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#declarations</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#script-top-level</string>
      </dict>
    </array>
    <key>repository</key>
    <dict>
      <key>directives</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#extern-alias-directive</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#using-directive</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>declarations</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#namespace-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-declarations</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>script-top-level</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>type-declarations</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#class-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#delegate-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#enum-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interface-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#struct-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#record-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>class-or-struct-members</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-declarations</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#field-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#indexer-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#constructor-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#destructor-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#conversion-operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>interface-members</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#indexer-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#while-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#do-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#for-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#foreach-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#if-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#else-part</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#goto-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#return-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#break-or-continue-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#throw-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#yield-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#await-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#try-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-operator-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#context-control-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#context-control-paren-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#labeled-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#object-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#array-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#anonymous-object-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-operator-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-operator-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#default-literal-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#throw-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interpolated-string</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#verbatim-interpolated-string</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-builtin</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#language-variable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#switch-statement-or-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#with-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#conditional-operator</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#assignment-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-operators</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#await-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#as-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#is-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#anonymous-method-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#object-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#array-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#anonymous-object-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#invocation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#member-access-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#element-access-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#cast-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-deconstruction-assignment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#initializer-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#identifier</string>
          </dict>
        </array>
      </dict>
      <key>extern-alias-directive</key>
      <dict>
        <key>begin</key>
        <string>\b(extern)\s+(alias)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.directive.extern.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.directive.alias.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
            <key>name</key>
            <string>variable.other.alias.cs</string>
          </dict>
        </array>
      </dict>
      <key>using-directive</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\b(?:(global)\s+)?(using)\s+(static)\b\s*(?:(unsafe)\b\s*)?</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.global.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.using.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.static.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.unsafe.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(?:(global)\s+)?(using)\b\s*(?:(unsafe)\b\s*)?(@?[_[:alpha:]][_[:alnum:]]*)\s*(=)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.global.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.using.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.unsafe.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.alias.cs</string>
              </dict>
              <key>5</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.assignment.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(?:(global)\s+)?(using)\b\s*+(?!\(|var\b)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.global.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.other.directive.using.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>name</key>
                <string>entity.name.type.namespace.cs</string>
                <key>match</key>
                <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#operator-assignment</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>attribute-section</key>
      <dict>
        <key>begin</key>
        <string>(\[)(assembly|module|field|event|method|param|property|return|type)?(\:)?</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.attribute-specifier.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\])</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>attribute</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type-name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-arguments</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-arguments</string>
          </dict>
        </array>
      </dict>
      <key>attribute-arguments</key>
      <dict>
        <key>begin</key>
        <string>(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\))</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#attribute-named-argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>attribute-named-argument</key>
      <dict>
        <key>begin</key>
        <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(?==)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.property.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=(,|\)))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#operator-assignment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>namespace-declaration</key>
      <dict>
        <key>begin</key>
        <string>\b(namespace)\s+</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.namespace.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>name</key>
            <string>entity.name.type.namespace.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-accessor</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#declarations</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#using-directive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-semicolon</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>storage-modifier</key>
      <dict>
        <key>name</key>
        <string>storage.modifier.$1.cs</string>
        <key>match</key>
        <string>(?&lt;!\.)\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe|ref|required|file)\b</string>
      </dict>
      <key>class-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=(\brecord\b\s+)?\bclass\b)</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(\b(record)\b\s+)?
\b(class)\b\s+
(@?[_[:alpha:]][_[:alnum:]]*)\s*</string>
            <key>beginCaptures</key>
            <dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>storage.type.record.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>storage.type.class.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.class.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)|(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#parenthesized-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#class-or-struct-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>delegate-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:\b(delegate)\b)\s+
(?&lt;type_name&gt;
  (?:
    (?:ref\s+(?:readonly\s+)?)?   # ref return
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s+
(\g&lt;identifier&gt;)\s*
(&lt;([^&lt;&gt;]+)&gt;)?\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.delegate.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.type.delegate.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
        </array>
      </dict>
      <key>enum-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\benum\b)</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?=enum)</string>
            <key>end</key>
            <string>(?=\{)|(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>match</key>
                <string>(enum)\s+(@?[_[:alpha:]][_[:alnum:]]*)</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>storage.type.enum.cs</string>
                  </dict>
                  <key>2</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.type.enum.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>begin</key>
                <string>:</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.separator.colon.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=\{)</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#type</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#preprocessor</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#attribute-section</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
              <dict>
                <key>begin</key>
                <string>@?[_[:alpha:]][_[:alnum:]]*</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.enum-member.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=(,|\}))</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#comment</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#variable-initializer</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>interface-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\binterface\b)</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(interface)\b\s+
(@?[_[:alpha:]][_[:alnum:]]*)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.type.interface.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.interface.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)|(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#interface-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>record-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\brecord\b)</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(record)\b\s+
(@?[_[:alpha:]][_[:alnum:]]*)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.type.record.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.class.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)|(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#parenthesized-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#class-or-struct-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>struct-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=(\brecord\b\s+)?\bstruct\b)</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(\b(record)\b\s+)?
(struct)\b\s+
(@?[_[:alpha:]][_[:alnum:]]*)</string>
            <key>beginCaptures</key>
            <dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>storage.type.record.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>storage.type.struct.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.struct.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)|(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#parenthesized-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#class-or-struct-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>type-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>\&lt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\b(in|out)\b</string>
            <key>name</key>
            <string>storage.modifier.$1.cs</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\b</string>
            <key>name</key>
            <string>entity.name.type.type-parameter.cs</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
        </array>
      </dict>
      <key>base-types</key>
      <dict>
        <key>begin</key>
        <string>:</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=\{|where|;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
        </array>
      </dict>
      <key>generic-constraints</key>
      <dict>
        <key>begin</key>
        <string>(where)\s+(@?[_[:alpha:]][_[:alnum:]]*)\s*(:)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.where.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.type.type-parameter.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=\{|where|;|=&gt;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>storage.type.class.cs</string>
            <key>match</key>
            <string>\bclass\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>storage.type.struct.cs</string>
            <key>match</key>
            <string>\bstruct\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.constraint.default.cs</string>
            <key>match</key>
            <string>\bdefault\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.constraint.notnull.cs</string>
            <key>match</key>
            <string>\bnotnull\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.constraint.unmanaged.cs</string>
            <key>match</key>
            <string>\bunmanaged\b</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(new)\s*(\()\s*(\))</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.expression.new.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
        </array>
      </dict>
      <key>field-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s+
(\g&lt;identifier&gt;)\s* # first field name
(?!=&gt;|==)(?=,|;|=|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>6</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.field.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>entity.name.variable.field.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#class-or-struct-members</string>
          </dict>
        </array>
      </dict>
      <key>property-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)

# The negative lookahead below ensures that we don't match nested types
# or other declarations as properties.
(?![[:word:][:space:]]*\b(?:class|interface|struct|enum|event)\b)

(?&lt;return_type&gt;
  (?&lt;type_name&gt;
    (?:
      (?:ref\s+(?:readonly\s+)?)?   # ref return
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )\s+
)
(?&lt;interface_name&gt;\g&lt;type_name&gt;\s*\.\s*)?
(?&lt;property_name&gt;\g&lt;identifier&gt;)\s*
(?=\{|=&gt;|//|/\*|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.property.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-accessors</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#accessor-getter-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#class-or-struct-members</string>
          </dict>
        </array>
      </dict>
      <key>indexer-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;return_type&gt;
  (?&lt;type_name&gt;
    (?:
      (?:ref\s+(?:readonly\s+)?)?   # ref return
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )\s+
)
(?&lt;interface_name&gt;\g&lt;type_name&gt;\s*\.\s*)?
(?&lt;indexer_name&gt;this)\s*
(?=\[)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>variable.language.this.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#bracketed-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-accessors</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#accessor-getter-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>event-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(event)\b\s*
(?&lt;return_type&gt;
  (?&lt;type_name&gt;
    (?:
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )\s+
)
(?&lt;interface_name&gt;\g&lt;type_name&gt;\s*\.\s*)?
(\g&lt;identifier&gt;)\s* # first event name
(?=\{|;|,|=|//|/\*|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.event.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>9</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.event.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-accessors</string>
          </dict>
          <dict>
            <key>name</key>
            <string>entity.name.variable.event.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>=</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.assignment.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=,)|(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>property-accessors</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>name</key>
            <string>storage.modifier.$1.cs</string>
            <key>match</key>
            <string>\b(private|protected|internal)\b</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(get)\b\s*(?=\{|;|=&gt;|//|/\*|$)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.type.accessor.$1.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=\}|;)|(?=\})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#accessor-getter</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(set|init)\b\s*(?=\{|;|=&gt;|//|/\*|$)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.type.accessor.$1.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=\}|;)|(?=\})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#accessor-setter</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>event-accessors</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(add|remove)\b\s*(?=\{|;|=&gt;|//|/\*|$)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.type.accessor.$1.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=\}|;)|(?=\})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#accessor-setter</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>accessor-getter</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>contentName</key>
            <string>meta.accessor.getter.cs</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#statement</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#accessor-getter-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>accessor-getter-expression</key>
      <dict>
        <key>begin</key>
        <string>=&gt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.arrow.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\})</string>
        <key>contentName</key>
        <string>meta.accessor.getter.cs</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ref-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>accessor-setter</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>contentName</key>
            <string>meta.accessor.setter.cs</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#statement</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>=&gt;</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.arrow.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;|\})</string>
            <key>contentName</key>
            <string>meta.accessor.setter.cs</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#ref-modifier</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>method-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;return_type&gt;
  (?&lt;type_name&gt;
    (?:
      (?:ref\s+(?:readonly\s+)?)?   # ref return
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )\s+
)
(?&lt;interface_name&gt;\g&lt;type_name&gt;\s*\.\s*)?
(\g&lt;identifier&gt;)\s*
(&lt;([^&lt;&gt;]+)&gt;)?\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
          <key>9</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>constructor-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=@?[_[:alpha:]][_[:alnum:]]*\s*\()</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.function.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>begin</key>
            <string>(:)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{|=&gt;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#constructor-initializer</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>constructor-initializer</key>
      <dict>
        <key>begin</key>
        <string>\b(base|this)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>variable.language.$1.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument-list</string>
          </dict>
        </array>
      </dict>
      <key>destructor-declaration</key>
      <dict>
        <key>begin</key>
        <string>(~)(@?[_[:alpha:]][_[:alnum:]]*)\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.tilde.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>operator-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;type_name&gt;
  (?:
    (?:ref\s+(?:readonly\s+)?)?   # ref return
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s*
\b(?&lt;operator_keyword&gt;operator)\b\s*
(?&lt;operator&gt;[+\-*/%&amp;|\^!=~&lt;&gt;]+|true|false)\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>6</key>
          <dict>
            <key>name</key>
            <string>storage.type.operator.cs</string>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>conversion-operator-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;explicit_or_implicit_keyword&gt;(?:\b(?:explicit|implicit)))\s*
(?&lt;operator_keyword&gt;(?:\b(?:operator)))\s*
(?&lt;type_name&gt;
  (?:
    (?:ref\s+(?:readonly\s+)?)?   # ref return
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>\b(explicit)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>storage.modifier.explicit.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>match</key>
                <string>\b(implicit)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>storage.modifier.implicit.cs</string>
                  </dict>
                </dict>
              </dict>
            </array>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>storage.type.operator.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>block</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>variable-initializer</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!=|!)(=)(?!=|&gt;)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[,\)\];}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ref-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>expression-body</key>
      <dict>
        <key>begin</key>
        <string>=&gt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.arrow.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[,\);}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ref-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>goto-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(goto)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.goto.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[;}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\b(case)\b</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.conditional.case.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=[;}])</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>match</key>
            <string>\b(default)\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.conditional.default.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>entity.name.label.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
        </array>
      </dict>
      <key>return-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(return)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.return.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[;}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ref-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>break-or-continue-statement</key>
      <dict>
        <key>match</key>
        <string>(?&lt;!\.)\b(break|continue)\b</string>
        <key>name</key>
        <string>keyword.control.flow.$1.cs</string>
      </dict>
      <key>throw-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(throw)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.throw.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[;}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>yield-statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#yield-return-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#yield-break-statement</string>
          </dict>
        </array>
      </dict>
      <key>yield-return-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(yield)\b\s*\b(return)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.yield.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.return.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[;}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>yield-break-statement</key>
      <dict>
        <key>match</key>
        <string>(?&lt;!\.)\b(yield)\b\s*\b(break)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.yield.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.break.cs</string>
          </dict>
        </dict>
      </dict>
      <key>await-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.\s*)\b(await)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.await.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=})|(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#foreach-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#using-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>if-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(if)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.conditional.if.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>else-part</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(else)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.conditional.else.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>switch-statement-or-expression</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(switch)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.conditional.switch.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=})|(?=})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?=\()</string>
            <key>end</key>
            <string>(?&lt;=\})|(?=\})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#switch-statement</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?=\{)</string>
            <key>end</key>
            <string>(?&lt;=\})|(?=\})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#switch-expression</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>switch-statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#switch-label</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#statement</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>switch-label</key>
      <dict>
        <key>begin</key>
        <string>\b(case|default)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.conditional.$1.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(:)|(?=})</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\b(when)\b</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.conditional.when.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=:|})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#case-guard</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?!\s)</string>
            <key>end</key>
            <string>(?=\bwhen\b|:|})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#pattern</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>switch-expression</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>=&gt;</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.arrow.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=,|})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(when)\b</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.conditional.when.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?==&gt;|,|})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#case-guard</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?!\s)</string>
            <key>end</key>
            <string>(?=\bwhen\b|=&gt;|,|})</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#pattern</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>case-guard</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#parenthesized-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>is-expression</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(is)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.pattern.is.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#pattern</string>
          </dict>
        </array>
      </dict>
      <key>pattern</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#combinator-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#discard-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#constant-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#relational-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#var-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#positional-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#list-pattern</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#slice-pattern</string>
          </dict>
        </array>
      </dict>
      <key>combinator-pattern</key>
      <dict>
        <key>match</key>
        <string>\b(and|or|not)\b</string>
        <key>name</key>
        <string>keyword.operator.expression.pattern.combinator.$1.cs</string>
      </dict>
      <key>discard-pattern</key>
      <dict>
        <key>match</key>
        <string>_(?![_[:alnum:]])</string>
        <key>name</key>
        <string>variable.language.discard.cs</string>
      </dict>
      <key>constant-pattern</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#boolean-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#null-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#numeric-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#char-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#verbatim-string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-operator-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-operator-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-operators</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#casted-constant-pattern</string>
          </dict>
        </array>
      </dict>
      <key>casted-constant-pattern</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(\()
  ([\s.:@_[:alnum:]]+)
(\))
(?=[\s+\-!~]*@?[_[:alnum:]('"]+)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-builtin</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type-name</string>
              </dict>
            </array>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#casted-constant-pattern</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#constant-pattern</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#constant-pattern</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(\:\:)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.alias.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.coloncolon.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(\.)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
            <key>name</key>
            <string>variable.other.constant.cs</string>
          </dict>
        </array>
      </dict>
      <key>relational-pattern</key>
      <dict>
        <key>begin</key>
        <string>&lt;=?|&gt;=?</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.relational.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>var-pattern</key>
      <dict>
        <key>begin</key>
        <string>\b(var)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.var.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#designation-pattern</string>
          </dict>
        </array>
      </dict>
      <key>designation-pattern</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#designation-pattern</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#simple-designation-pattern</string>
          </dict>
        </array>
      </dict>
      <key>simple-designation-pattern</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#discard-pattern</string>
          </dict>
          <dict>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
          </dict>
        </array>
      </dict>
      <key>type-pattern</key>
      <dict>
        <key>begin</key>
        <string>(?=@?[_[:alpha:]][_[:alnum:]]*)</string>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\G</string>
            <key>end</key>
            <string>(?!\G[@_[:alpha:]])(?=[\({@_[:alpha:])}\],;:=&amp;|^]|(?:\s|^)\?|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type-subpattern</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?=[\({@_[:alpha:]])</string>
            <key>end</key>
            <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#positional-pattern</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#property-pattern</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#simple-designation-pattern</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>type-subpattern</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type-builtin</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(::)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.alias.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.coloncolon.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=[_[:alnum:]])|(?=[.&lt;\[\({)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>match</key>
                <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
                <key>name</key>
                <string>entity.name.type.cs</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>match</key>
            <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
            <key>name</key>
            <string>entity.name.type.cs</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\.</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=[_[:alnum:]])|(?=[&lt;\[\({)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>match</key>
                <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
                <key>name</key>
                <string>entity.name.type.cs</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-arguments</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-array-suffix</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(?&lt;!\s)\?</string>
            <key>name</key>
            <string>punctuation.separator.question-mark.cs</string>
          </dict>
        </array>
      </dict>
      <key>positional-pattern</key>
      <dict>
        <key>begin</key>
        <string>(?=\()</string>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#subpattern</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?&lt;=\))</string>
            <key>end</key>
            <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#property-pattern</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#simple-designation-pattern</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>property-pattern</key>
      <dict>
        <key>begin</key>
        <string>(?={)</string>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#subpattern</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?&lt;=\})</string>
            <key>end</key>
            <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#simple-designation-pattern</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>subpattern</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*(?:\s*\.\s*@?[_[:alpha:]][_[:alnum:]]*)*)\s*(:)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>match</key>
                    <string>\@?[_[:alpha:]][_[:alnum:]]*</string>
                    <key>name</key>
                    <string>variable.other.object.property.cs</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#punctuation-accessor</string>
                  </dict>
                </array>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#pattern</string>
          </dict>
        </array>
      </dict>
      <key>list-pattern</key>
      <dict>
        <key>begin</key>
        <string>(?=\[)</string>
        <key>end</key>
        <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\[</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.squarebracket.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\]</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.squarebracket.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#pattern</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?&lt;=\])</string>
            <key>end</key>
            <string>(?=[)}\],;:?=&amp;|^]|!=|\b(and|or|when)\b)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#simple-designation-pattern</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>slice-pattern</key>
      <dict>
        <key>match</key>
        <string>\.\.</string>
        <key>name</key>
        <string>keyword.operator.range.cs</string>
      </dict>
      <key>do-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(do)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.do.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>while-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(while)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.while.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>for-statement</key>
      <dict>
        <key>begin</key>
        <string>\b(for)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.for.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))|(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>begin</key>
                <string>(?=[^;\)])</string>
                <key>end</key>
                <string>(?=;|\))</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#intrusive</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#local-variable-declaration</string>
                  </dict>
                </array>
              </dict>
              <dict>
                <key>begin</key>
                <string>(?=;)</string>
                <key>end</key>
                <string>(?=\))</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#intrusive</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#expression</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#punctuation-comma</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#punctuation-semicolon</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>foreach-statement</key>
      <dict>
        <key>begin</key>
        <string>\b(foreach)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.foreach.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))|(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>match</key>
                <string>(?x)
(?:
  (?:(\bref)\s+)?(\bvar\b)| # ref local
  (?&lt;type_name&gt;
    (?:
      (?:ref\s+)?   # ref local
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )
)\s+
(\g&lt;identifier&gt;)\s+
\b(in)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>storage.modifier.ref.cs</string>
                  </dict>
                  <key>2</key>
                  <dict>
                    <key>name</key>
                    <string>storage.type.var.cs</string>
                  </dict>
                  <key>3</key>
                  <dict>
                    <key>patterns</key>
                    <array>
                      <dict>
                        <key>include</key>
                        <string>#type</string>
                      </dict>
                    </array>
                  </dict>
                  <key>8</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.local.cs</string>
                  </dict>
                  <key>9</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.control.loop.in.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>match</key>
                <string>(?x) # match foreach (var (x, y) in ...)
(?:\b(var)\b\s*)?
(?&lt;tuple&gt;\((?:[^\(\)]|\g&lt;tuple&gt;)+\))\s+
\b(in)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>storage.type.var.cs</string>
                  </dict>
                  <key>2</key>
                  <dict>
                    <key>patterns</key>
                    <array>
                      <dict>
                        <key>include</key>
                        <string>#tuple-declaration-deconstruction-element-list</string>
                      </dict>
                    </array>
                  </dict>
                  <key>3</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.control.loop.in.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>try-statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#try-block</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#catch-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#finally-clause</string>
          </dict>
        </array>
      </dict>
      <key>try-block</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(try)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.exception.try.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>finally-clause</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(finally)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.exception.finally.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>catch-clause</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(catch)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.exception.catch.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>(?x)
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s*
(?:(\g&lt;identifier&gt;)\b)?</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>patterns</key>
                    <array>
                      <dict>
                        <key>include</key>
                        <string>#type</string>
                      </dict>
                    </array>
                  </dict>
                  <key>6</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.local.cs</string>
                  </dict>
                </dict>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#when-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>when-clause</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(when)\b\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.exception.when.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>context-control-statement</key>
      <dict>
        <key>match</key>
        <string>\b(checked|unchecked|unsafe)\b(?!\s*[@_[:alpha:](])</string>
        <key>name</key>
        <string>keyword.control.context.$1.cs</string>
      </dict>
      <key>context-control-paren-statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#fixed-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#lock-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#using-statement</string>
          </dict>
        </array>
      </dict>
      <key>fixed-statement</key>
      <dict>
        <key>begin</key>
        <string>\b(fixed)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.context.fixed.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))|(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#local-variable-declaration</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>lock-statement</key>
      <dict>
        <key>begin</key>
        <string>\b(lock)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.context.lock.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))|(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>using-statement</key>
      <dict>
        <key>begin</key>
        <string>\b(using)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.context.using.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))|(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#await-expression</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#local-variable-declaration</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-variable-declaration</string>
          </dict>
        </array>
      </dict>
      <key>labeled-statement</key>
      <dict>
        <key>match</key>
        <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(:)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.label.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
      </dict>
      <key>local-declaration</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#local-constant-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-variable-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-function-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-tuple-var-deconstruction</string>
          </dict>
        </array>
      </dict>
      <key>local-variable-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:
  (?:(\bref)\s+(?:(\breadonly)\s+)?)?(\bvar\b)| # ref local
  (?&lt;type_name&gt;
    (?:
      (?:ref\s+(?:readonly\s+)?)?   # ref local
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*[?*]\s*)? # nullable or pointer suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )
)\s+
(\g&lt;identifier&gt;)\s*
(?!=&gt;)
(?=,|;|=|\))</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.ref.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.readonly.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>storage.type.var.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>9</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[;)}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>local-constant-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;const_keyword&gt;\b(?:const)\b)\s*
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s+
(\g&lt;identifier&gt;)\s*
(?=,|;|=)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.const.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>local-function-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b((?:(?:async|unsafe|static|extern)\s+)*)
(?&lt;type_name&gt;
  (?:ref\s+(?:readonly\s+)?)?   # ref return
  (?:
    (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
    (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
      \g&lt;identifier&gt;\s*
      (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
    )
    (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )
  (?:\s*\?)? # nullable suffix?
  (?:\s* # array suffix?
    \[
      \s*(?:,\s*)* # commata for multi-dimensional arrays
    \]
    (?:\s*\?)? # arrays can be nullable reference types
  )*
)\s+
(\g&lt;identifier&gt;)\s*
(&lt;[^&lt;&gt;]+&gt;)?\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#storage-modifier</string>
              </dict>
            </array>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>local-tuple-var-deconstruction</key>
      <dict>
        <key>begin</key>
        <string>(?x) # e.g. var (x, y) = GetPoint();
(?:\b(var)\b\s*)
(?&lt;tuple&gt;\((?:[^\(\)]|\g&lt;tuple&gt;)+\))\s*
(?=;|=|\))</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.var.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#tuple-declaration-deconstruction-element-list</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>tuple-deconstruction-assignment</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))\s*
(?!=&gt;|==)(?==)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#tuple-deconstruction-element-list</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>tuple-declaration-deconstruction-element-list</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-declaration-deconstruction-element-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#declaration-expression-tuple</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(?x) # e.g. x
(@?[_[:alpha:]][_[:alnum:]]*)\b\s*
(?=[,)])</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.variable.tuple-element.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>tuple-deconstruction-element-list</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-deconstruction-element-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#declaration-expression-tuple</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(?x) # e.g. x
(@?[_[:alpha:]][_[:alnum:]]*)\b\s*
(?=[,)])</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>variable.other.readwrite.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>declaration-expression-local</key>
      <dict>
        <key>match</key>
        <string>(?x) # e.g. int x OR var x
(?:
  \b(var)\b|
  (?&lt;type_name&gt;
    (?:
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s* # array suffix?
        \[
          (?:\s*,\s*)* # commata for multi-dimensional arrays
        \]
        \s*
        (?:\?)? # arrays can be nullable reference types
        \s*
      )*
    )
  )
)\s+
(\g&lt;identifier&gt;)\b\s*
(?=[,)\]])</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.var.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
          </dict>
        </dict>
      </dict>
      <key>declaration-expression-tuple</key>
      <dict>
        <key>match</key>
        <string>(?x) # e.g. int x OR var x
(?:
  \b(var)\b|
  (?&lt;type_name&gt;
    (?:
      (?:
        (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
        (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
      )
      (?:\s*\?\s*)? # nullable suffix?
                (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
    )
  )
)\s+
(\g&lt;identifier&gt;)\b\s*
(?=[,)])</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.var.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.tuple-element.cs</string>
          </dict>
        </dict>
      </dict>
      <key>expression-operator-expression</key>
      <dict>
        <key>begin</key>
        <string>\b(checked|unchecked|nameof)\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.$1.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>type-operator-expression</key>
      <dict>
        <key>begin</key>
        <string>\b(default|sizeof|typeof)\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.$1.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
        </array>
      </dict>
      <key>default-literal-expression</key>
      <dict>
        <key>match</key>
        <string>\b(default)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.default.cs</string>
          </dict>
        </dict>
      </dict>
      <key>throw-expression</key>
      <dict>
        <key>match</key>
        <string>\b(throw)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.throw.cs</string>
          </dict>
        </dict>
      </dict>
      <key>interpolated-string</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(")|((?:[^\\\n])$)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>invalid.illegal.newline.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#string-character-escape</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interpolation</string>
          </dict>
        </array>
      </dict>
      <key>verbatim-interpolated-string</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>(?:\$@|@\$)"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"(?=[^"])</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#verbatim-string-character-escape</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interpolation</string>
          </dict>
        </array>
      </dict>
      <key>interpolation</key>
      <dict>
        <key>name</key>
        <string>meta.interpolation.cs</string>
        <key>begin</key>
        <string>(?&lt;=[^\{]|^)((?:\{\{)*)(\{)(?=[^\{])</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>raw-interpolated-string</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string-five-or-more-quote-one-or-more-interpolation</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string-three-or-more-quote-three-or-more-interpolation</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string-quadruple-quote-double-interpolation</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string-quadruple-quote-single-interpolation</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string-triple-quote-double-interpolation</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-interpolated-string-triple-quote-single-interpolation</string>
          </dict>
        </array>
      </dict>
      <key>raw-interpolated-string-triple-quote-single-interpolation</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$"""</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"""</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#raw-interpolation</string>
          </dict>
        </array>
      </dict>
      <key>raw-interpolated-string-triple-quote-double-interpolation</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$\$"""</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"""</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#double-raw-interpolation</string>
          </dict>
        </array>
      </dict>
      <key>raw-interpolated-string-quadruple-quote-single-interpolation</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$""""</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>""""</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#raw-interpolation</string>
          </dict>
        </array>
      </dict>
      <key>raw-interpolated-string-quadruple-quote-double-interpolation</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$\$""""</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>""""</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#double-raw-interpolation</string>
          </dict>
        </array>
      </dict>
      <key>raw-interpolated-string-three-or-more-quote-three-or-more-interpolation</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$\$\$+"""+</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"""+</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>raw-interpolated-string-five-or-more-quote-one-or-more-interpolation</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$+"""""+</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"""""+</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>raw-interpolation</key>
      <dict>
        <key>name</key>
        <string>meta.interpolation.cs</string>
        <key>begin</key>
        <string>(?&lt;=[^\{]|^)((?:\{)*)(\{)(?=[^\{])</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>double-raw-interpolation</key>
      <dict>
        <key>name</key>
        <string>meta.interpolation.cs</string>
        <key>begin</key>
        <string>(?&lt;=[^\{][^\{]|^)((?:\{)*)(\{\{)(?=[^\{])</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>literal</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#boolean-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#null-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#numeric-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#char-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#verbatim-string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-literal</string>
          </dict>
        </array>
      </dict>
      <key>boolean-literal</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>constant.language.boolean.true.cs</string>
            <key>match</key>
            <string>(?&lt;!\.)\btrue\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.language.boolean.false.cs</string>
            <key>match</key>
            <string>(?&lt;!\.)\bfalse\b</string>
          </dict>
        </array>
      </dict>
      <key>null-literal</key>
      <dict>
        <key>name</key>
        <string>constant.language.null.cs</string>
        <key>match</key>
        <string>(?&lt;!\.)\bnull\b</string>
      </dict>
      <key>numeric-literal</key>
      <dict>
        <key>match</key>
        <string>(?&lt;!\w)\.?\d(?:(?:[0-9a-zA-Z_]|_)|(?&lt;=[eE])[+-]|\.\d)*</string>
        <key>captures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>begin</key>
                <string>(?=.)</string>
                <key>end</key>
                <string>$</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>match</key>
                    <string>(\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?:(?&lt;=[0-9])|\.(?=[0-9])))([0-9](?:[0-9]|((?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)?((?&lt;!_)([eE])(\+?)(\-?)((?:[0-9](?:[0-9]|(?:(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?([fFdDmM](?!\w))?$</string>
                    <key>captures</key>
                    <dict>
                      <key>2</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.decimal.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>3</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.separator.thousands.cs</string>
                      </dict>
                      <key>4</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.separator.decimals.cs</string>
                      </dict>
                      <key>5</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.decimal.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>6</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.separator.thousands.cs</string>
                      </dict>
                      <key>8</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.exponent.cs</string>
                      </dict>
                      <key>9</key>
                      <dict>
                        <key>name</key>
                        <string>keyword.operator.arithmetic.cs</string>
                      </dict>
                      <key>10</key>
                      <dict>
                        <key>name</key>
                        <string>keyword.operator.arithmetic.cs</string>
                      </dict>
                      <key>11</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.decimal.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>12</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.suffix.cs</string>
                      </dict>
                    </dict>
                  </dict>
                  <dict>
                    <key>match</key>
                    <string>(\G0[bB])([01_](?:[01_]|((?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\w))?$</string>
                    <key>captures</key>
                    <dict>
                      <key>1</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.preffix.binary.cs</string>
                      </dict>
                      <key>2</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.binary.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>3</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.separator.thousands.cs</string>
                      </dict>
                      <key>4</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.suffix.cs</string>
                      </dict>
                    </dict>
                  </dict>
                  <dict>
                    <key>match</key>
                    <string>(\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\w))?$</string>
                    <key>captures</key>
                    <dict>
                      <key>1</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.preffix.hex.cs</string>
                      </dict>
                      <key>2</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.hex.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>3</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.separator.thousands.cs</string>
                      </dict>
                      <key>4</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.suffix.cs</string>
                      </dict>
                    </dict>
                  </dict>
                  <dict>
                    <key>match</key>
                    <string>(\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)((?&lt;!_)([eE])(\+?)(\-?)((?:[0-9](?:[0-9]|(?:(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]l)|[uU]L)|l[uU]?)|L[uU]?)|[fFdDmM])(?!\w))?$</string>
                    <key>captures</key>
                    <dict>
                      <key>2</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.decimal.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>3</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.separator.thousands.cs</string>
                      </dict>
                      <key>5</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.exponent.cs</string>
                      </dict>
                      <key>6</key>
                      <dict>
                        <key>name</key>
                        <string>keyword.operator.arithmetic.cs</string>
                      </dict>
                      <key>7</key>
                      <dict>
                        <key>name</key>
                        <string>keyword.operator.arithmetic.cs</string>
                      </dict>
                      <key>8</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.decimal.cs</string>
                        <key>patterns</key>
                        <array>
                          <dict>
                            <key>match</key>
                            <string>(?&lt;=[0-9a-fA-F])_(?=[0-9a-fA-F])</string>
                            <key>name</key>
                            <string>constant.numeric.other.separator.thousands.cs</string>
                          </dict>
                        </array>
                      </dict>
                      <key>9</key>
                      <dict>
                        <key>name</key>
                        <string>constant.numeric.other.suffix.cs</string>
                      </dict>
                    </dict>
                  </dict>
                  <dict>
                    <key>match</key>
                    <string>(?:(?:[0-9a-zA-Z_]|_)|(?&lt;=[eE])[+-]|\.\d)+</string>
                    <key>name</key>
                    <string>invalid.illegal.constant.numeric.cs</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>char-literal</key>
      <dict>
        <key>name</key>
        <string>string.quoted.single.cs</string>
        <key>begin</key>
        <string>'</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.char.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\')|((?:[^\\\n])$)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.char.end.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>invalid.illegal.newline.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#char-character-escape</string>
          </dict>
        </array>
      </dict>
      <key>char-character-escape</key>
      <dict>
        <key>name</key>
        <string>constant.character.escape.cs</string>
        <key>match</key>
        <string>\\(x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4}|.)</string>
      </dict>
      <key>string-literal</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>(?&lt;!@)"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(")|((?:[^\\\n])$)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>invalid.illegal.newline.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#string-character-escape</string>
          </dict>
        </array>
      </dict>
      <key>string-character-escape</key>
      <dict>
        <key>name</key>
        <string>constant.character.escape.cs</string>
        <key>match</key>
        <string>\\(x[0-9a-fA-F]{1,4}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|.)</string>
      </dict>
      <key>verbatim-string-literal</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>@"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"(?=[^"])</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#verbatim-string-character-escape</string>
          </dict>
        </array>
      </dict>
      <key>verbatim-string-character-escape</key>
      <dict>
        <key>name</key>
        <string>constant.character.escape.cs</string>
        <key>match</key>
        <string>""</string>
      </dict>
      <key>raw-string-literal</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#raw-string-literal-more</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-string-literal-quadruple</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#raw-string-literal-triple</string>
          </dict>
        </array>
      </dict>
      <key>raw-string-literal-triple</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>"""</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"""</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>raw-string-literal-quadruple</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>""""</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>""""</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>raw-string-literal-more</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>"""""+</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"""""+</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>tuple-literal</key>
      <dict>
        <key>begin</key>
        <string>(\()(?=.*[:,])</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-literal-element</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>tuple-literal-element</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(@?[_[:alpha:]][_[:alnum:]]*)\s*
(?=:)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.tuple-element.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(:)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
      </dict>
      <key>assignment-expression</key>
      <dict>
        <key>begin</key>
        <string>(?:\*|/|%|\+|-|\?\?|\&amp;|\^|&lt;&lt;|&gt;&gt;&gt;?|\|)?=(?!=|&gt;)</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#assignment-operators</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[,\)\];}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ref-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>assignment-operators</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.compound.cs</string>
            <key>match</key>
            <string>\*=|/=|%=|\+=|-=|\?\?=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.compound.bitwise.cs</string>
            <key>match</key>
            <string>\&amp;=|\^=|&lt;&lt;=|&gt;&gt;&gt;?=|\|=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
            <key>match</key>
            <string>\=</string>
          </dict>
        </array>
      </dict>
      <key>expression-operators</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>keyword.operator.bitwise.shift.cs</string>
            <key>match</key>
            <string>&lt;&lt;|&gt;&gt;&gt;?</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.comparison.cs</string>
            <key>match</key>
            <string>==|!=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.relational.cs</string>
            <key>match</key>
            <string>&lt;=|&gt;=|&lt;|&gt;</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.logical.cs</string>
            <key>match</key>
            <string>\!|&amp;&amp;|\|\|</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.bitwise.cs</string>
            <key>match</key>
            <string>\&amp;|~|\^|\|</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.decrement.cs</string>
            <key>match</key>
            <string>--</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.increment.cs</string>
            <key>match</key>
            <string>\+\+</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.arithmetic.cs</string>
            <key>match</key>
            <string>\+|-(?!&gt;)|\*|/|%</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-coalescing.cs</string>
            <key>match</key>
            <string>\?\?</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.range.cs</string>
            <key>match</key>
            <string>\.\.</string>
          </dict>
        </array>
      </dict>
      <key>with-expression</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(with)\b\s*(?=\{|//|/\*|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.with.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#initializer-expression</string>
          </dict>
        </array>
      </dict>
      <key>conditional-operator</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>keyword.operator.conditional.question-mark.cs</string>
            <key>match</key>
            <string>\?(?!\?|\s*[.\[])</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.conditional.colon.cs</string>
            <key>match</key>
            <string>:</string>
          </dict>
        </array>
      </dict>
      <key>await-expression</key>
      <dict>
        <key>name</key>
        <string>keyword.operator.expression.await.cs</string>
        <key>match</key>
        <string>(?&lt;!\.\s*)\b(await)\b</string>
      </dict>
      <key>parenthesized-expression</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>initializer-expression</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>identifier</key>
      <dict>
        <key>name</key>
        <string>variable.other.readwrite.cs</string>
        <key>match</key>
        <string>@?[_[:alpha:]][_[:alnum:]]*</string>
      </dict>
      <key>cast-expression</key>
      <dict>
        <key>match</key>
        <string>(?x)
(\()\s*
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s*
(\))(?=\s*-*!*@?[_[:alnum:]\(])</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
      </dict>
      <key>as-expression</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?&lt;!\.)\b(as)\b\s*
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?(?!\?))? # nullable suffix?
    (?:\s* # array suffix?
      \[
        \s*(?:,\s*)* # commata for multi-dimensional arrays
      \]
      (?:\s*\?(?!\?))? # arrays can be nullable reference types
    )*
  )
)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.as.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>language-variable</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>variable.language.$1.cs</string>
            <key>match</key>
            <string>\b(base|this)\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>variable.other.$1.cs</string>
            <key>match</key>
            <string>\b(value)\b</string>
          </dict>
        </array>
      </dict>
      <key>invocation-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:
  (?:(\?)\s*)?                                    # preceding null-conditional operator?
  (\.)\s*|                                        # preceding dot?
  (-&gt;)\s*                                         # preceding pointer arrow?
)?
(@?[_[:alpha:]][_[:alnum:]]*)\s*                  # method name
(
  &lt;
  (?&lt;type_args&gt;
    [^&lt;&gt;()]|
    \((?:[^&lt;&gt;()]|&lt;[^&lt;&gt;()]*&gt;|\([^&lt;&gt;()]*\))*\)|
    &lt;\g&lt;type_args&gt;*&gt;
  )*
  &gt;\s*
)?                                                # type arguments
(?=\()                                            # open paren of argument list</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-conditional.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.accessor.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.accessor.pointer.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-arguments</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument-list</string>
          </dict>
        </array>
      </dict>
      <key>element-access-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:
  (?:(\?)\s*)?  # preceding null-conditional operator?
  (\.)\s*|      # preceding dot?
  (-&gt;)\s*       # preceding pointer arrow?
)?
(?:(@?[_[:alpha:]][_[:alnum:]]*)\s*)? # property name
(?:(\?)\s*)?                        # null-conditional operator?
(?=\[)                              # open bracket of argument list</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-conditional.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.accessor.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.accessor.pointer.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>variable.other.object.property.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-conditional.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\])(?!\s*\[)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#bracketed-argument-list</string>
          </dict>
        </array>
      </dict>
      <key>member-access-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(?x)
(?:
  (?:(\?)\s*)?                    # preceding null-conditional operator?
  (\.)\s*|                        # preceding dot?
  (-&gt;)\s*                         # preceding pointer arrow?
)
(@?[_[:alpha:]][_[:alnum:]]*)\s*  # property name
(?![_[:alnum:]]|\(|(\?)?\[|&lt;)     # next character is not alpha-numeric, nor a (, [, or &lt;. Also, test for ?[</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.null-conditional.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.pointer.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>variable.other.object.property.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(?x)
(\.)?\s*
(@?[_[:alpha:]][_[:alnum:]]*)
(?&lt;type_params&gt;\s*&lt;([^&lt;&gt;]|\g&lt;type_params&gt;)+&gt;\s*)
(?=
  (\s*\?)?
  \s*\.\s*@?[_[:alpha:]][_[:alnum:]]*
)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>variable.other.object.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#type-arguments</string>
                  </dict>
                </array>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(?x)
(@?[_[:alpha:]][_[:alnum:]]*)
(?=
  \s*(?:(?:\?\s*)?\.|-&gt;)
  \s*@?[_[:alpha:]][_[:alnum:]]*
)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>variable.other.object.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>object-creation-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#object-creation-expression-with-parameters</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#object-creation-expression-with-no-parameters</string>
          </dict>
        </array>
      </dict>
      <key>object-creation-expression-with-parameters</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(new)(?:\s+
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
))?\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.new.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument-list</string>
          </dict>
        </array>
      </dict>
      <key>object-creation-expression-with-no-parameters</key>
      <dict>
        <key>match</key>
        <string>(?x)
(new)\s+
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s*
(?=\{|//|/\*|$)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.new.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>array-creation-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(new|stackalloc)\b\s*
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)?\s*
(?=\[)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.$1.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#bracketed-argument-list</string>
          </dict>
        </array>
      </dict>
      <key>anonymous-object-creation-expression</key>
      <dict>
        <key>begin</key>
        <string>\b(new)\b\s*(?=\{|//|/\*|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.new.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#initializer-expression</string>
          </dict>
        </array>
      </dict>
      <key>bracketed-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>(?=(\[))</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=(\]))</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?&lt;=\[)</string>
            <key>end</key>
            <string>(?=\])</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#attribute-section</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#parameter</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#variable-initializer</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>parenthesized-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\))</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parameter</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>parameter</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?:(?:\b(ref|params|out|in|this)\b)\s+)?
(?&lt;type_name&gt;
  (?:
    (?:ref\s+)?   # ref return
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^()]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s+
(\g&lt;identifier&gt;)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.$1.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.parameter.cs</string>
          </dict>
        </dict>
      </dict>
      <key>argument-list</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#named-argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>bracketed-argument-list</key>
      <dict>
        <key>begin</key>
        <string>\[</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\]</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#named-argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>named-argument</key>
      <dict>
        <key>begin</key>
        <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(:)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.parameter.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=(,|\)|\]))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument</string>
          </dict>
        </array>
      </dict>
      <key>argument</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>storage.modifier.$1.cs</string>
            <key>match</key>
            <string>\b(ref|in)\b</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(out)\b</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.out.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=,|\)|\])</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#declaration-expression-local</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>query-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(from)\b\s*
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)?
\s+(\g&lt;identifier&gt;)\b\s*
\b(in)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.from.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.in.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>query-body</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#let-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#where-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#join-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#orderby-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#select-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#group-clause</string>
          </dict>
        </array>
      </dict>
      <key>let-clause</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(let)\b\s*
(@?[_[:alpha:]][_[:alnum:]]*)\b\s*
(=)\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.let.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>where-clause</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(where)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.where.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>join-clause</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(join)\b\s*
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)?
\s+(\g&lt;identifier&gt;)\b\s*
\b(in)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.join.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.in.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#join-on</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#join-equals</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#join-into</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>join-on</key>
      <dict>
        <key>match</key>
        <string>\b(on)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.on.cs</string>
          </dict>
        </dict>
      </dict>
      <key>join-equals</key>
      <dict>
        <key>match</key>
        <string>\b(equals)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.equals.cs</string>
          </dict>
        </dict>
      </dict>
      <key>join-into</key>
      <dict>
        <key>match</key>
        <string>(?x)
\b(into)\b\s*
(@?[_[:alpha:]][_[:alnum:]]*)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.into.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
        </dict>
      </dict>
      <key>orderby-clause</key>
      <dict>
        <key>begin</key>
        <string>\b(orderby)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.orderby.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ordering-direction</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>ordering-direction</key>
      <dict>
        <key>match</key>
        <string>\b(ascending|descending)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.$1.cs</string>
          </dict>
        </dict>
      </dict>
      <key>select-clause</key>
      <dict>
        <key>begin</key>
        <string>\b(select)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.select.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>group-clause</key>
      <dict>
        <key>begin</key>
        <string>\b(group)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.group.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#group-by</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#group-into</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>group-by</key>
      <dict>
        <key>match</key>
        <string>\b(by)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.by.cs</string>
          </dict>
        </dict>
      </dict>
      <key>group-into</key>
      <dict>
        <key>match</key>
        <string>(?x)
\b(into)\b\s*
(@?[_[:alpha:]][_[:alnum:]]*)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.expression.query.into.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
        </dict>
      </dict>
      <key>anonymous-method-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
((?:\b(?:async|static)\b\s*)*)
(?:
  (@?[_[:alpha:]][_[:alnum:]]*)\b|
  (\()
    (?&lt;tuple&gt;(?:[^()]|\(\g&lt;tuple&gt;\))*)
  (\))
)\s*
(=&gt;)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>match</key>
                    <string>async|static</string>
                    <key>name</key>
                    <string>storage.modifier.$0.cs</string>
                  </dict>
                </array>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.variable.parameter.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#comment</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#explicit-anonymous-function-parameter</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#implicit-anonymous-function-parameter</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#default-argument</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#punctuation-comma</string>
                  </dict>
                </array>
              </dict>
              <key>5</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
              <key>6</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.arrow.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=[,;)}])</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>begin</key>
                <string>(?={)</string>
                <key>end</key>
                <string>(?=[,;)}])</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#block</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#intrusive</string>
                  </dict>
                </array>
              </dict>
              <dict>
                <key>begin</key>
                <string>\b(ref)\b|(?=\S)</string>
                <key>beginCaptures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>storage.modifier.ref.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=[,;)}])</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#expression</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?x)
((?:\b(?:async|static)\b\s*)*)
\b(delegate)\b\s*</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>match</key>
                    <string>async|static</string>
                    <key>name</key>
                    <string>storage.modifier.$0.cs</string>
                  </dict>
                </array>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>storage.type.delegate.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?&lt;=})|(?=[,;)}])</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#intrusive</string>
              </dict>
              <dict>
                <key>begin</key>
                <string>\(</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.parenthesis.open.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>\)</string>
                <key>endCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.parenthesis.close.cs</string>
                  </dict>
                </dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#intrusive</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#explicit-anonymous-function-parameter</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#punctuation-comma</string>
                  </dict>
                </array>
              </dict>
              <dict>
                <key>include</key>
                <string>#block</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>explicit-anonymous-function-parameter</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?:\b(ref|params|out|in)\b\s*)?
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)*&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^()]|\g&lt;tuple&gt;)*\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)\s*
\b(\g&lt;identifier&gt;)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.$1.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.parameter.cs</string>
          </dict>
        </dict>
      </dict>
      <key>implicit-anonymous-function-parameter</key>
      <dict>
        <key>match</key>
        <string>\@?[_[:alpha:]][_[:alnum:]]*\b</string>
        <key>name</key>
        <string>entity.name.variable.parameter.cs</string>
      </dict>
      <key>default-argument</key>
      <dict>
        <key>begin</key>
        <string>=</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=,|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>type</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#ref-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#readonly-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-builtin</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-arguments</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-array-suffix</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-nullable-suffix</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-pointer-suffix</string>
          </dict>
        </array>
      </dict>
      <key>ref-modifier</key>
      <dict>
        <key>name</key>
        <string>storage.modifier.ref.cs</string>
        <key>match</key>
        <string>\bref\b</string>
      </dict>
      <key>readonly-modifier</key>
      <dict>
        <key>name</key>
        <string>storage.modifier.readonly.cs</string>
        <key>match</key>
        <string>\breadonly\b</string>
      </dict>
      <key>tuple-type</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#tuple-element</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>tuple-element</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?&lt;type_name&gt;
  (?:
    (?:
      (?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
      (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
    )
    (?:\s*\?\s*)? # nullable suffix?
    (?:\s* # array suffix?
      \[
        (?:\s*,\s*)* # commata for multi-dimensional arrays
      \]
      \s*
      (?:\?)? # arrays can be nullable reference types
      \s*
    )*
  )
)
(?:(?&lt;tuple_name&gt;\g&lt;identifier&gt;)\b)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>6</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.tuple-element.cs</string>
          </dict>
        </dict>
      </dict>
      <key>type-builtin</key>
      <dict>
        <key>match</key>
        <string>\b(bool|s?byte|u?short|n?u?int|u?long|float|double|decimal|char|string|object|void|dynamic)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.type.$1.cs</string>
          </dict>
        </dict>
      </dict>
      <key>type-name</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(\:\:)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.alias.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.coloncolon.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(@?[_[:alpha:]][_[:alnum:]]*)\s*(\.)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(\.)\s*(@?[_[:alpha:]][_[:alnum:]]*)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>entity.name.type.cs</string>
            <key>match</key>
            <string>@?[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
        </array>
      </dict>
      <key>type-arguments</key>
      <dict>
        <key>begin</key>
        <string>&lt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>type-array-suffix</key>
      <dict>
        <key>begin</key>
        <string>\[</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\]</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#intrusive</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>type-nullable-suffix</key>
      <dict>
        <key>match</key>
        <string>\?</string>
        <key>name</key>
        <string>punctuation.separator.question-mark.cs</string>
      </dict>
      <key>type-pointer-suffix</key>
      <dict>
        <key>match</key>
        <string>\*</string>
        <key>name</key>
        <string>punctuation.separator.asterisk.cs</string>
      </dict>
      <key>operator-assignment</key>
      <dict>
        <key>name</key>
        <string>keyword.operator.assignment.cs</string>
        <key>match</key>
        <string>(?&lt;!=|!)(=)(?!=)</string>
      </dict>
      <key>punctuation-comma</key>
      <dict>
        <key>name</key>
        <string>punctuation.separator.comma.cs</string>
        <key>match</key>
        <string>,</string>
      </dict>
      <key>punctuation-semicolon</key>
      <dict>
        <key>name</key>
        <string>punctuation.terminator.statement.cs</string>
        <key>match</key>
        <string>;</string>
      </dict>
      <key>punctuation-accessor</key>
      <dict>
        <key>name</key>
        <string>punctuation.accessor.cs</string>
        <key>match</key>
        <string>\.</string>
      </dict>
      <key>intrusive</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>preprocessor</key>
      <dict>
        <key>name</key>
        <string>meta.preprocessor.cs</string>
        <key>begin</key>
        <string>^\s*(\#)\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.hash.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-define-or-undef</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-if-or-elif</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-else-or-endif</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-warning-or-error</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-region</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-endregion</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-load</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-r</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-line</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-pragma-warning</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-pragma-checksum</string>
          </dict>
        </array>
      </dict>
      <key>preprocessor-define-or-undef</key>
      <dict>
        <key>match</key>
        <string>\b(?:(define)|(undef))\b\s*\b([_[:alpha:]][_[:alnum:]]*)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.define.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.undef.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.preprocessor.symbol.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-if-or-elif</key>
      <dict>
        <key>begin</key>
        <string>\b(?:(if)|(elif))\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.if.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.elif.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-expression</string>
          </dict>
        </array>
      </dict>
      <key>preprocessor-else-or-endif</key>
      <dict>
        <key>match</key>
        <string>\b(?:(else)|(endif))\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.else.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.endif.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-warning-or-error</key>
      <dict>
        <key>match</key>
        <string>\b(?:(warning)|(error))\b\s*(.*)(?=$)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.warning.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.error.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>string.unquoted.preprocessor.message.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-load</key>
      <dict>
        <key>begin</key>
        <string>\b(load)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.load.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\"[^"]*\"</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>string.quoted.double.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>preprocessor-r</key>
      <dict>
        <key>begin</key>
        <string>\b(r)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.r.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\"[^"]*\"</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>string.quoted.double.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>preprocessor-region</key>
      <dict>
        <key>match</key>
        <string>\b(region)\b\s*(.*)(?=$)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.region.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>string.unquoted.preprocessor.message.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-endregion</key>
      <dict>
        <key>match</key>
        <string>\b(endregion)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.endregion.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-line</key>
      <dict>
        <key>begin</key>
        <string>\b(line)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.line.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\b(?:(default|hidden))</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.preprocessor.default.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.preprocessor.hidden.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>[0-9]+</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>constant.numeric.decimal.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>\"[^"]*\"</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>string.quoted.double.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>preprocessor-pragma-warning</key>
      <dict>
        <key>match</key>
        <string>\b(pragma)\b\s*\b(warning)\b\s*\b(?:(disable)|(restore))\b(\s*[0-9]+(?:\s*,\s*[0-9]+)?)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.pragma.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.warning.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.disable.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.restore.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>[0-9]+</string>
                <key>captures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>constant.numeric.decimal.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-pragma-checksum</key>
      <dict>
        <key>match</key>
        <string>\b(pragma)\b\s*\b(checksum)\b\s*(\"[^"]*\")\s*(\"[^"]*\")\s*(\"[^"]*\")</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.pragma.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.checksum.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#preprocessor-expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>match</key>
            <string>\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>constant.language.boolean.true.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>constant.language.boolean.false.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>entity.name.variable.preprocessor.symbol.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(==|!=)|(\!|&amp;&amp;|\|\|)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.comparison.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.logical.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>comment</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>comment.block.documentation.cs</string>
            <key>begin</key>
            <string>(^\s+)?(///)(?!/)</string>
            <key>while</key>
            <string>^(\s*)(///)(?!/)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.whitespace.comment.leading.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.comment.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#xml-doc-comment</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>name</key>
            <string>comment.block.documentation.cs</string>
            <key>begin</key>
            <string>(^\s+)?(/\*\*)(?!/)</string>
            <key>end</key>
            <string>(^\s+)?(\*/)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.whitespace.comment.leading.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.comment.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>begin</key>
                <string>\G(?=(?~\*/)$)</string>
                <key>while</key>
                <string>^(\s*+)(\*(?!/))?(?=(?~\*/)$)</string>
                <key>whileCaptures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.whitespace.comment.leading.cs</string>
                  </dict>
                  <key>2</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.definition.comment.cs</string>
                  </dict>
                </dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#xml-doc-comment</string>
                  </dict>
                </array>
              </dict>
              <dict>
                <key>include</key>
                <string>#xml-doc-comment</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>name</key>
            <string>comment.line.double-slash.cs</string>
            <key>begin</key>
            <string>(^\s+)?(//).*$</string>
            <key>while</key>
            <string>^(\s*)(//).*$</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.whitespace.comment.leading.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.comment.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>comment.block.cs</string>
            <key>begin</key>
            <string>/\*</string>
            <key>end</key>
            <string>\*/</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.comment.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>xml-doc-comment</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#xml-comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-character-entity</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-cdata</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-tag</string>
          </dict>
        </array>
      </dict>
      <key>xml-tag</key>
      <dict>
        <key>name</key>
        <string>meta.tag.cs</string>
        <key>begin</key>
        <string>(?x)
(&lt;/?)
(
  (?:
    ([-_[:alnum:]]+)
    (:)
  )?
  ([-_[:alnum:]]+)
)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.tag.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.tag.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>entity.name.tag.namespace.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>name</key>
            <string>entity.name.tag.localname.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(/?&gt;)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.tag.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#xml-attribute</string>
          </dict>
        </array>
      </dict>
      <key>xml-attribute</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(?x)
(?:^|\s+)
(
  (?:
    ([-_[:alnum:]]+)
    (:)
  )?
  ([-_[:alnum:]]+)
)
(=)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.other.attribute-name.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.other.attribute-name.namespace.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>entity.other.attribute-name.localname.cs</string>
              </dict>
              <key>5</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.equals.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-string</string>
          </dict>
        </array>
      </dict>
      <key>xml-cdata</key>
      <dict>
        <key>name</key>
        <string>string.unquoted.cdata.cs</string>
        <key>begin</key>
        <string>&lt;!\[CDATA\[</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\]\]&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>xml-string</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>string.quoted.single.cs</string>
            <key>begin</key>
            <string>\'</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.begin.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\'</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.end.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#xml-character-entity</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
            <key>begin</key>
            <string>\"</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.begin.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\"</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.end.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#xml-character-entity</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>xml-character-entity</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>constant.character.entity.cs</string>
            <key>match</key>
            <string>(?x)
(&amp;)
(
  (?:[[:alpha:]:_][[:alnum:]:_.-]*)|
  (?:\#[[:digit:]]+)|
  (?:\#x[[:xdigit:]]+)
)
(;)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.constant.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.constant.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>invalid.illegal.bad-ampersand.cs</string>
            <key>match</key>
            <string>&amp;</string>
          </dict>
        </array>
      </dict>
      <key>xml-comment</key>
      <dict>
        <key>name</key>
        <string>comment.block.cs</string>
        <key>begin</key>
        <string>&lt;!--</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.comment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>--&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.comment.cs</string>
          </dict>
        </dict>
      </dict>
    </dict>
  </dict>
</plist>