rustLanguage top-level constant

Language const rustLanguage

Rust (source.rust).

Implementation

const rustLanguage = Language(
  name: 'rust',
  scopeName: 'source.rust',
  displayName: 'Rust',
  aliases: ['rs'],
  grammar: <String, Object?>{
    'displayName': 'Rust',
    'name': 'rust',
    'patterns': [
      {
        'begin': '(<)(\\[)',
        'beginCaptures': {
          '1': {'name': 'punctuation.brackets.angle.rust'},
          '2': {'name': 'punctuation.brackets.square.rust'},
        },
        'end': '>',
        'endCaptures': {
          '0': {'name': 'punctuation.brackets.angle.rust'},
        },
        'patterns': [
          {'include': '#block-comments'},
          {'include': '#comments'},
          {'include': '#gtypes'},
          {'include': '#lvariables'},
          {'include': '#lifetimes'},
          {'include': '#punctuation'},
          {'include': '#types'},
        ],
      },
      {
        'captures': {
          '1': {'name': 'keyword.operator.macro.dollar.rust'},
          '3': {'name': 'keyword.other.crate.rust'},
          '4': {'name': 'entity.name.type.metavariable.rust'},
          '6': {'name': 'keyword.operator.key-value.rust'},
          '7': {'name': 'variable.other.metavariable.specifier.rust'},
        },
        'match':
            '(\\\$)((crate)|([A-Z]\\w*))(\\s*(:)\\s*(block|expr(?:_2021)?|ident|item|lifetime|literal|meta|pat(?:_param)?|path|stmt|tt|ty|vis)\\b)?',
        'name': 'meta.macro.metavariable.type.rust',
        'patterns': [
          {'include': '#keywords'},
        ],
      },
      {
        'captures': {
          '1': {'name': 'keyword.operator.macro.dollar.rust'},
          '2': {'name': 'variable.other.metavariable.name.rust'},
          '4': {'name': 'keyword.operator.key-value.rust'},
          '5': {'name': 'variable.other.metavariable.specifier.rust'},
        },
        'match':
            '(\\\$)([a-z]\\w*)(\\s*(:)\\s*(block|expr(?:_2021)?|ident|item|lifetime|literal|meta|pat(?:_param)?|path|stmt|tt|ty|vis)\\b)?',
        'name': 'meta.macro.metavariable.rust',
        'patterns': [
          {'include': '#keywords'},
        ],
      },
      {
        'captures': {
          '1': {'name': 'entity.name.function.macro.rules.rust'},
          '3': {'name': 'entity.name.function.macro.rust'},
          '4': {'name': 'entity.name.type.macro.rust'},
          '5': {'name': 'punctuation.brackets.curly.rust'},
        },
        'match':
            '\\b(macro_rules!)\\s+(([0-9_a-z]+)|([A-Z][0-9_a-z]*))\\s+(\\{)',
        'name': 'meta.macro.rules.rust',
      },
      {
        'captures': {
          '1': {'name': 'storage.type.rust'},
          '2': {'name': 'entity.name.module.rust'},
        },
        'match': '(mod)\\s+((?:r#(?!crate|[Ss]elf|super))?[a-z][0-9A-Z_a-z]*)',
      },
      {
        'begin': '\\b(extern)\\s+(crate)',
        'beginCaptures': {
          '1': {'name': 'storage.type.rust'},
          '2': {'name': 'keyword.other.crate.rust'},
        },
        'end': ';',
        'endCaptures': {
          '0': {'name': 'punctuation.semi.rust'},
        },
        'name': 'meta.import.rust',
        'patterns': [
          {'include': '#block-comments'},
          {'include': '#comments'},
          {'include': '#keywords'},
          {'include': '#punctuation'},
        ],
      },
      {
        'begin': '\\b(use)\\s',
        'beginCaptures': {
          '1': {'name': 'keyword.other.rust'},
        },
        'end': ';',
        'endCaptures': {
          '0': {'name': 'punctuation.semi.rust'},
        },
        'name': 'meta.use.rust',
        'patterns': [
          {'include': '#block-comments'},
          {'include': '#comments'},
          {'include': '#keywords'},
          {'include': '#namespaces'},
          {'include': '#punctuation'},
          {'include': '#types'},
          {'include': '#lvariables'},
        ],
      },
      {'include': '#block-comments'},
      {'include': '#comments'},
      {'include': '#attributes'},
      {'include': '#lvariables'},
      {'include': '#constants'},
      {'include': '#gtypes'},
      {'include': '#functions'},
      {'include': '#types'},
      {'include': '#keywords'},
      {'include': '#lifetimes'},
      {'include': '#macros'},
      {'include': '#namespaces'},
      {'include': '#punctuation'},
      {'include': '#strings'},
      {'include': '#variables'},
    ],
    'repository': {
      'attributes': {
        'begin': '(#)(!?)(\\[)',
        'beginCaptures': {
          '1': {'name': 'punctuation.definition.attribute.rust'},
          '3': {'name': 'punctuation.brackets.attribute.rust'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'punctuation.brackets.attribute.rust'},
        },
        'name': 'meta.attribute.rust',
        'patterns': [
          {'include': '#block-comments'},
          {'include': '#comments'},
          {'include': '#keywords'},
          {'include': '#lifetimes'},
          {'include': '#punctuation'},
          {'include': '#strings'},
          {'include': '#gtypes'},
          {'include': '#types'},
        ],
      },
      'block-comments': {
        'patterns': [
          {'match': '/\\*\\*/', 'name': 'comment.block.rust'},
          {
            'begin': '/\\*\\*',
            'end': '\\*/',
            'name': 'comment.block.documentation.rust',
            'patterns': [
              {'include': '#block-comments'},
            ],
          },
          {
            'begin': '/\\*(?!\\*)',
            'end': '\\*/',
            'name': 'comment.block.rust',
            'patterns': [
              {'include': '#block-comments'},
            ],
          },
        ],
      },
      'comments': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'punctuation.definition.comment.rust'},
            },
            'match': '(///).*\$',
            'name': 'comment.line.documentation.rust',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.definition.comment.rust'},
            },
            'match': '(//).*\$',
            'name': 'comment.line.double-slash.rust',
          },
        ],
      },
      'constants': {
        'patterns': [
          {
            'match': '\\b[A-Z]{2}[0-9A-Z_]*\\b',
            'name': 'constant.other.caps.rust',
          },
          {
            'captures': {
              '1': {'name': 'storage.type.rust'},
              '2': {'name': 'constant.other.caps.rust'},
            },
            'match': '\\b(const)\\s+([A-Z][0-9A-Z_a-z]*)\\b',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.separator.dot.decimal.rust'},
              '2': {'name': 'keyword.operator.exponent.rust'},
              '3': {'name': 'keyword.operator.exponent.sign.rust'},
              '4': {'name': 'constant.numeric.decimal.exponent.mantissa.rust'},
              '5': {'name': 'entity.name.type.numeric.rust'},
            },
            'match':
                '\\b\\d[_\\d]*(\\.?)[_\\d]*(?:([Ee])([-+]?)([_\\d]+))?(f32|f64|i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\b',
            'name': 'constant.numeric.decimal.rust',
          },
          {
            'captures': {
              '1': {'name': 'entity.name.type.numeric.rust'},
            },
            'match':
                '\\b0x[A-F_a-f\\d]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\b',
            'name': 'constant.numeric.hex.rust',
          },
          {
            'captures': {
              '1': {'name': 'entity.name.type.numeric.rust'},
            },
            'match':
                '\\b0o[0-7_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\b',
            'name': 'constant.numeric.oct.rust',
          },
          {
            'captures': {
              '1': {'name': 'entity.name.type.numeric.rust'},
            },
            'match':
                '\\b0b[01_]+(i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)?\\b',
            'name': 'constant.numeric.bin.rust',
          },
          {
            'match': '\\b(true|false)\\b',
            'name': 'constant.language.bool.rust',
          },
        ],
      },
      'escapes': {
        'captures': {
          '1': {'name': 'constant.character.escape.backslash.rust'},
          '2': {'name': 'constant.character.escape.bit.rust'},
          '3': {'name': 'constant.character.escape.unicode.rust'},
          '4': {'name': 'constant.character.escape.unicode.punctuation.rust'},
          '5': {'name': 'constant.character.escape.unicode.punctuation.rust'},
        },
        'match': '(\\\\)(?:(x[0-7][A-Fa-f\\d])|(u(\\{)[A-Fa-f\\d]{4,6}(}))|.)',
        'name': 'constant.character.escape.rust',
      },
      'functions': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'storage.modifier.visibility.rust'},
            },
            'match': '\\b(pub)\\b',
          },
          {
            'captures': {
              '1': {'name': 'storage.modifier.visibility.rust'},
              '2': {'name': 'punctuation.brackets.round.rust'},
            },
            'match': '\\b(pub)(\\()',
          },
          {
            'begin':
                '\\b(fn)\\s+((?:r#(?!crate|[Ss]elf|super))?[0-9A-Z_a-z]+)((\\()|(<))',
            'beginCaptures': {
              '1': {'name': 'keyword.other.fn.rust'},
              '2': {'name': 'entity.name.function.rust'},
              '4': {'name': 'punctuation.brackets.round.rust'},
              '5': {'name': 'punctuation.brackets.angle.rust'},
            },
            'end': '(\\{)|(;)',
            'endCaptures': {
              '1': {'name': 'punctuation.brackets.curly.rust'},
              '2': {'name': 'punctuation.semi.rust'},
            },
            'name': 'meta.function.definition.rust',
            'patterns': [
              {'include': '#block-comments'},
              {'include': '#comments'},
              {'include': '#keywords'},
              {'include': '#lvariables'},
              {'include': '#constants'},
              {'include': '#gtypes'},
              {'include': '#functions'},
              {'include': '#lifetimes'},
              {'include': '#macros'},
              {'include': '#namespaces'},
              {'include': '#punctuation'},
              {'include': '#strings'},
              {'include': '#types'},
              {'include': '#variables'},
            ],
          },
          {
            'begin': '((?:r#(?!crate|[Ss]elf|super))?[0-9A-Z_a-z]+)(\\()',
            'beginCaptures': {
              '1': {'name': 'entity.name.function.rust'},
              '2': {'name': 'punctuation.brackets.round.rust'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'punctuation.brackets.round.rust'},
            },
            'name': 'meta.function.call.rust',
            'patterns': [
              {'include': '#block-comments'},
              {'include': '#comments'},
              {'include': '#attributes'},
              {'include': '#keywords'},
              {'include': '#lvariables'},
              {'include': '#constants'},
              {'include': '#gtypes'},
              {'include': '#functions'},
              {'include': '#lifetimes'},
              {'include': '#macros'},
              {'include': '#namespaces'},
              {'include': '#punctuation'},
              {'include': '#strings'},
              {'include': '#types'},
              {'include': '#variables'},
            ],
          },
          {
            'begin':
                '((?:r#(?!crate|[Ss]elf|super))?[0-9A-Z_a-z]+)(?=::<.*>\\()',
            'beginCaptures': {
              '1': {'name': 'entity.name.function.rust'},
            },
            'end': '\\)',
            'endCaptures': {
              '0': {'name': 'punctuation.brackets.round.rust'},
            },
            'name': 'meta.function.call.rust',
            'patterns': [
              {'include': '#block-comments'},
              {'include': '#comments'},
              {'include': '#attributes'},
              {'include': '#keywords'},
              {'include': '#lvariables'},
              {'include': '#constants'},
              {'include': '#gtypes'},
              {'include': '#functions'},
              {'include': '#lifetimes'},
              {'include': '#macros'},
              {'include': '#namespaces'},
              {'include': '#punctuation'},
              {'include': '#strings'},
              {'include': '#types'},
              {'include': '#variables'},
            ],
          },
        ],
      },
      'gtypes': {
        'patterns': [
          {
            'match': '\\b(Some|None)\\b',
            'name': 'entity.name.type.option.rust',
          },
          {'match': '\\b(Ok|Err)\\b', 'name': 'entity.name.type.result.rust'},
        ],
      },
      'interpolations': {
        'captures': {
          '1': {'name': 'punctuation.definition.interpolation.rust'},
          '2': {'name': 'punctuation.definition.interpolation.rust'},
        },
        'match': '(\\{)[^"{}]*(})',
        'name': 'meta.interpolation.rust',
      },
      'keywords': {
        'patterns': [
          {
            'match':
                '\\b(await|break|continue|do|else|for|if|loop|match|return|try|while|yield)\\b',
            'name': 'keyword.control.rust',
          },
          {
            'match': '\\b(extern|let|macro|mod)\\b',
            'name': 'keyword.other.rust storage.type.rust',
          },
          {'match': '\\b(const)\\b', 'name': 'storage.modifier.rust'},
          {
            'match': '\\b(type)\\b',
            'name': 'keyword.declaration.type.rust storage.type.rust',
          },
          {
            'match': '\\b(enum)\\b',
            'name': 'keyword.declaration.enum.rust storage.type.rust',
          },
          {
            'match': '\\b(trait)\\b',
            'name': 'keyword.declaration.trait.rust storage.type.rust',
          },
          {
            'match': '\\b(struct)\\b',
            'name': 'keyword.declaration.struct.rust storage.type.rust',
          },
          {'match': '\\b(abstract|static)\\b', 'name': 'storage.modifier.rust'},
          {
            'match':
                '\\b(as|async|become|box|dyn|move|final|gen|impl|in|override|priv|ref|typeof|union|unsafe|unsized|use|virtual|where)\\b',
            'name': 'keyword.other.rust',
          },
          {'match': '\\bfn\\b', 'name': 'keyword.other.fn.rust'},
          {'match': '\\bcrate\\b', 'name': 'keyword.other.crate.rust'},
          {'match': '\\bmut\\b', 'name': 'storage.modifier.mut.rust'},
          {
            'match': '([\\^|]|\\|\\||&&|<<|>>|!)(?!=)',
            'name': 'keyword.operator.logical.rust',
          },
          {'match': '&(?![\\&=])', 'name': 'keyword.operator.borrow.and.rust'},
          {
            'match': '((?:[-%\\&*+/^|]|<<|>>)=)',
            'name': 'keyword.operator.assignment.rust',
          },
          {
            'match': '(?<![<>])=(?![=>])',
            'name': 'keyword.operator.assignment.equal.rust',
          },
          {
            'match': '(=(=)?(?!>)|!=|<=|(?<!=)>=)',
            'name': 'keyword.operator.comparison.rust',
          },
          {
            'match': '(([%+]|(\\*(?!\\w)))(?!=))|(-(?!>))|(/(?!/))',
            'name': 'keyword.operator.math.rust',
          },
          {
            'captures': {
              '1': {'name': 'punctuation.brackets.round.rust'},
              '2': {'name': 'punctuation.brackets.square.rust'},
              '3': {'name': 'punctuation.brackets.curly.rust'},
              '4': {'name': 'keyword.operator.comparison.rust'},
              '5': {'name': 'punctuation.brackets.round.rust'},
              '6': {'name': 'punctuation.brackets.square.rust'},
              '7': {'name': 'punctuation.brackets.curly.rust'},
            },
            'match':
                '(?:\\b|(?:(\\))|(])|(})))[\\t ]+([<>])[\\t ]+(?:\\b|(?:(\\()|(\\[)|(\\{)))',
          },
          {'match': '::', 'name': 'keyword.operator.namespace.rust'},
          {
            'captures': {
              '1': {'name': 'keyword.operator.dereference.rust'},
            },
            'match': '(\\*)(?=\\w+)',
          },
          {'match': '@', 'name': 'keyword.operator.subpattern.rust'},
          {'match': '\\.(?!\\.)', 'name': 'keyword.operator.access.dot.rust'},
          {'match': '\\.{2}([.=])?', 'name': 'keyword.operator.range.rust'},
          {'match': ':(?!:)', 'name': 'keyword.operator.key-value.rust'},
          {'match': '->|<-', 'name': 'keyword.operator.arrow.skinny.rust'},
          {'match': '=>', 'name': 'keyword.operator.arrow.fat.rust'},
          {'match': '\\\$', 'name': 'keyword.operator.macro.dollar.rust'},
          {'match': '\\?', 'name': 'keyword.operator.question.rust'},
        ],
      },
      'lifetimes': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'punctuation.definition.lifetime.rust'},
              '2': {'name': 'entity.name.type.lifetime.rust'},
            },
            'match': '(\')([A-Z_a-z][0-9A-Z_a-z]*)(?!\')\\b',
          },
          {
            'captures': {
              '1': {'name': 'keyword.operator.borrow.rust'},
              '2': {'name': 'punctuation.definition.lifetime.rust'},
              '3': {'name': 'entity.name.type.lifetime.rust'},
            },
            'match': '(&)(\')([A-Z_a-z][0-9A-Z_a-z]*)(?!\')\\b',
          },
        ],
      },
      'lvariables': {
        'patterns': [
          {'match': '\\b[Ss]elf\\b', 'name': 'variable.language.self.rust'},
          {'match': '\\bsuper\\b', 'name': 'variable.language.super.rust'},
        ],
      },
      'macros': {
        'patterns': [
          {
            'captures': {
              '2': {'name': 'entity.name.function.macro.rust'},
              '3': {'name': 'entity.name.type.macro.rust'},
            },
            'match': '(([_a-z][0-9A-Z_a-z]*!)|([A-Z_][0-9A-Z_a-z]*!))',
            'name': 'meta.macro.rust',
          },
        ],
      },
      'namespaces': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'entity.name.namespace.rust'},
              '2': {'name': 'keyword.operator.namespace.rust'},
            },
            'match': '(?<![0-9A-Z_a-z])([0-9A-Z_a-z]+)((?<!s(?:uper|elf))::)',
          },
        ],
      },
      'punctuation': {
        'patterns': [
          {'match': ',', 'name': 'punctuation.comma.rust'},
          {'match': '[{}]', 'name': 'punctuation.brackets.curly.rust'},
          {'match': '[()]', 'name': 'punctuation.brackets.round.rust'},
          {'match': ';', 'name': 'punctuation.semi.rust'},
          {'match': '[]\\[]', 'name': 'punctuation.brackets.square.rust'},
          {'match': '(?<!=)[<>]', 'name': 'punctuation.brackets.angle.rust'},
        ],
      },
      'strings': {
        'patterns': [
          {
            'begin': '(b?)(")',
            'beginCaptures': {
              '1': {'name': 'string.quoted.byte.raw.rust'},
              '2': {'name': 'punctuation.definition.string.rust'},
            },
            'end': '"',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.string.rust'},
            },
            'name': 'string.quoted.double.rust',
            'patterns': [
              {'include': '#escapes'},
              {'include': '#interpolations'},
            ],
          },
          {
            'begin': '(b?r)(#*)(")',
            'beginCaptures': {
              '1': {'name': 'string.quoted.byte.raw.rust'},
              '2': {'name': 'punctuation.definition.string.raw.rust'},
              '3': {'name': 'punctuation.definition.string.rust'},
            },
            'end': '(")(\\2)',
            'endCaptures': {
              '1': {'name': 'punctuation.definition.string.rust'},
              '2': {'name': 'punctuation.definition.string.raw.rust'},
            },
            'name': 'string.quoted.double.rust',
          },
          {
            'begin': '(b)?(\')',
            'beginCaptures': {
              '1': {'name': 'string.quoted.byte.raw.rust'},
              '2': {'name': 'punctuation.definition.char.rust'},
            },
            'end': '\'',
            'endCaptures': {
              '0': {'name': 'punctuation.definition.char.rust'},
            },
            'name': 'string.quoted.single.char.rust',
            'patterns': [
              {'include': '#escapes'},
            ],
          },
        ],
      },
      'types': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'entity.name.type.numeric.rust'},
            },
            'match':
                '(?<![A-Za-z])(f32|f64|i128|i16|i32|i64|i8|isize|u128|u16|u32|u64|u8|usize)\\b',
          },
          {
            'begin': '\\b(_?[A-Z][0-9A-Z_a-z]*)(<)',
            'beginCaptures': {
              '1': {'name': 'entity.name.type.rust'},
              '2': {'name': 'punctuation.brackets.angle.rust'},
            },
            'end': '>',
            'endCaptures': {
              '0': {'name': 'punctuation.brackets.angle.rust'},
            },
            'patterns': [
              {'include': '#block-comments'},
              {'include': '#comments'},
              {'include': '#keywords'},
              {'include': '#lvariables'},
              {'include': '#lifetimes'},
              {'include': '#punctuation'},
              {'include': '#types'},
              {'include': '#variables'},
            ],
          },
          {
            'match': '\\b(bool|char|str)\\b',
            'name': 'entity.name.type.primitive.rust',
          },
          {
            'captures': {
              '1': {'name': 'keyword.declaration.trait.rust storage.type.rust'},
              '2': {'name': 'entity.name.type.trait.rust'},
            },
            'match': '\\b(trait)\\s+(_?[A-Z][0-9A-Z_a-z]*)\\b',
          },
          {
            'captures': {
              '1': {
                'name': 'keyword.declaration.struct.rust storage.type.rust',
              },
              '2': {'name': 'entity.name.type.struct.rust'},
            },
            'match': '\\b(struct)\\s+(_?[A-Z][0-9A-Z_a-z]*)\\b',
          },
          {
            'captures': {
              '1': {'name': 'keyword.declaration.enum.rust storage.type.rust'},
              '2': {'name': 'entity.name.type.enum.rust'},
            },
            'match': '\\b(enum)\\s+(_?[A-Z][0-9A-Z_a-z]*)\\b',
          },
          {
            'captures': {
              '1': {'name': 'keyword.declaration.type.rust storage.type.rust'},
              '2': {'name': 'entity.name.type.declaration.rust'},
            },
            'match': '\\b(type)\\s+(_?[A-Z][0-9A-Z_a-z]*)\\b',
          },
          {
            'match': '\\b_?[A-Z][0-9A-Z_a-z]*\\b(?!!)',
            'name': 'entity.name.type.rust',
          },
        ],
      },
      'variables': {
        'patterns': [
          {
            'match':
                '\\b(?<!(?<!\\.)\\.)(?:r#(?!(crate|[Ss]elf|super)))?[0-9_a-z]+\\b',
            'name': 'variable.other.rust',
          },
        ],
      },
    },
    'scopeName': 'source.rust',
  },
);