yamlLanguage top-level constant

Language const yamlLanguage

YAML (source.yaml).

Implementation

const yamlLanguage = Language(
  name: 'yaml',
  scopeName: 'source.yaml',
  displayName: 'YAML',
  aliases: ['yml'],
  grammar: <String, Object?>{
    'displayName': 'YAML',
    'fileTypes': [
      'yaml',
      'yml',
      'rviz',
      'reek',
      'clang-format',
      'yaml-tmlanguage',
      'syntax',
      'sublime-syntax',
    ],
    'firstLineMatch': '^%YAML( ?1.\\d+)?',
    'name': 'yaml',
    'patterns': [
      {'include': '#comment'},
      {'include': '#property'},
      {'include': '#directive'},
      {'match': '^---', 'name': 'entity.other.document.begin.yaml'},
      {'match': '^\\.{3}', 'name': 'entity.other.document.end.yaml'},
      {'include': '#node'},
    ],
    'repository': {
      'block-collection': {
        'patterns': [
          {'include': '#block-sequence'},
          {'include': '#block-mapping'},
        ],
      },
      'block-mapping': {
        'patterns': [
          {'include': '#block-pair'},
        ],
      },
      'block-node': {
        'patterns': [
          {'include': '#prototype'},
          {'include': '#block-scalar'},
          {'include': '#block-collection'},
          {'include': '#flow-scalar-plain-out'},
          {'include': '#flow-node'},
        ],
      },
      'block-pair': {
        'patterns': [
          {
            'begin': '\\?',
            'beginCaptures': {
              '1': {'name': 'punctuation.definition.key-value.begin.yaml'},
            },
            'end': '(?=\\?)|^ *(:)|(:)',
            'endCaptures': {
              '1': {'name': 'punctuation.separator.key-value.mapping.yaml'},
              '2': {'name': 'invalid.illegal.expected-newline.yaml'},
            },
            'name': 'meta.block-mapping.yaml',
            'patterns': [
              {'include': '#block-node'},
            ],
          },
          {
            'begin':
                '(?=(?:[^-\\]!"#%\\&\'*,:>?@\\[`{|}\\s]|[-:?]\\S)([^:\\s]|:\\S|\\s+(?![#\\s]))*\\s*:(\\s|\$))',
            'end': '(?=\\s*\$|\\s+#|\\s*:(\\s|\$))',
            'patterns': [
              {'include': '#flow-scalar-plain-out-implicit-type'},
              {
                'begin': '[^-\\]!"#%\\&\'*,:>?@\\[`{|}\\s]|[-:?]\\S',
                'beginCaptures': {
                  '0': {'name': 'entity.name.tag.yaml'},
                },
                'contentName': 'entity.name.tag.yaml',
                'end': '(?=\\s*\$|\\s+#|\\s*:(\\s|\$))',
                'name': 'string.unquoted.plain.out.yaml',
              },
            ],
          },
          {
            'match': ':(?=\\s|\$)',
            'name': 'punctuation.separator.key-value.mapping.yaml',
          },
        ],
      },
      'block-scalar': {
        'begin': '(?:(\\|)|(>))([1-9])?([-+])?(.*\\n?)',
        'beginCaptures': {
          '1': {'name': 'keyword.control.flow.block-scalar.literal.yaml'},
          '2': {'name': 'keyword.control.flow.block-scalar.folded.yaml'},
          '3': {'name': 'constant.numeric.indentation-indicator.yaml'},
          '4': {'name': 'storage.modifier.chomping-indicator.yaml'},
          '5': {
            'patterns': [
              {'include': '#comment'},
              {
                'match': '.+',
                'name': 'invalid.illegal.expected-comment-or-newline.yaml',
              },
            ],
          },
        },
        'end': '^(?=\\S)|(?!\\G)',
        'patterns': [
          {
            'begin': '^( +)(?! )',
            'end': '^(?!\\1|\\s*\$)',
            'name': 'string.unquoted.block.yaml',
          },
        ],
      },
      'block-sequence': {
        'match': '(-)(?!\\S)',
        'name': 'punctuation.definition.block.sequence.item.yaml',
      },
      'comment': {
        'begin': '(?:^([\\t ]*)|[\\t ]+)(?=#\\p{print}*\$)',
        'beginCaptures': {
          '1': {'name': 'punctuation.whitespace.comment.leading.yaml'},
        },
        'end': '(?!\\G)',
        'patterns': [
          {
            'begin': '#',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.comment.yaml'},
            },
            'end': '\\n',
            'name': 'comment.line.number-sign.yaml',
          },
        ],
      },
      'directive': {
        'begin': '^%',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.directive.begin.yaml'},
        },
        'end': '(?=\$|[\\t ]+(\$|#))',
        'name': 'meta.directive.yaml',
        'patterns': [
          {
            'captures': {
              '1': {'name': 'keyword.other.directive.yaml.yaml'},
              '2': {'name': 'constant.numeric.yaml-version.yaml'},
            },
            'match': '\\G(YAML)[\\t ]+(\\d+\\.\\d+)',
          },
          {
            'captures': {
              '1': {'name': 'keyword.other.directive.tag.yaml'},
              '2': {'name': 'storage.type.tag-handle.yaml'},
              '3': {'name': 'support.type.tag-prefix.yaml'},
            },
            'match':
                '\\G(TAG)(?:[\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\t ]+(!(?:%\\h{2}|[]!#\$\\&-;=?-\\[_a-z~])*|(?![]!,\\[{}])(?:%\\h{2}|[]!#\$\\&-;=?-\\[_a-z~])+))?)?',
          },
          {
            'captures': {
              '1': {'name': 'support.other.directive.reserved.yaml'},
              '2': {'name': 'string.unquoted.directive-name.yaml'},
              '3': {'name': 'string.unquoted.directive-parameter.yaml'},
            },
            'match': '\\G(\\w+)(?:[\\t ]+(\\w+)(?:[\\t ]+(\\w+))?)?',
          },
          {'match': '\\S+', 'name': 'invalid.illegal.unrecognized.yaml'},
        ],
      },
      'flow-alias': {
        'captures': {
          '1': {'name': 'keyword.control.flow.alias.yaml'},
          '2': {'name': 'punctuation.definition.alias.yaml'},
          '3': {'name': 'variable.other.alias.yaml'},
          '4': {'name': 'invalid.illegal.character.anchor.yaml'},
        },
        'match': '((\\*))([^],/\\[{}\\s]+)([^],}\\s]\\S*)?',
      },
      'flow-collection': {
        'patterns': [
          {'include': '#flow-sequence'},
          {'include': '#flow-mapping'},
        ],
      },
      'flow-mapping': {
        'begin': '\\{',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.mapping.begin.yaml'},
        },
        'end': '}',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.mapping.end.yaml'},
        },
        'name': 'meta.flow-mapping.yaml',
        'patterns': [
          {'include': '#prototype'},
          {'match': ',', 'name': 'punctuation.separator.mapping.yaml'},
          {'include': '#flow-pair'},
        ],
      },
      'flow-node': {
        'patterns': [
          {'include': '#prototype'},
          {'include': '#flow-alias'},
          {'include': '#flow-collection'},
          {'include': '#flow-scalar'},
        ],
      },
      'flow-pair': {
        'patterns': [
          {
            'begin': '\\?',
            'beginCaptures': {
              '0': {'name': 'punctuation.definition.key-value.begin.yaml'},
            },
            'end': '(?=[],}])',
            'name': 'meta.flow-pair.explicit.yaml',
            'patterns': [
              {'include': '#prototype'},
              {'include': '#flow-pair'},
              {'include': '#flow-node'},
              {
                'begin': ':(?=\\s|\$|[],\\[{}])',
                'beginCaptures': {
                  '0': {'name': 'punctuation.separator.key-value.mapping.yaml'},
                },
                'end': '(?=[],}])',
                'patterns': [
                  {'include': '#flow-value'},
                ],
              },
            ],
          },
          {
            'begin':
                '(?=(?:[^-\\]!"#%\\&\'*,:>?@\\[`{|}\\s]|[-:?][^],\\[{}\\s])([^],:\\[{}\\s]|:[^],\\[{}\\s]|\\s+(?![#\\s]))*\\s*:(\\s|\$))',
            'end':
                '(?=\\s*\$|\\s+#|\\s*:(\\s|\$)|\\s*:[],\\[{}]|\\s*[],\\[{}])',
            'name': 'meta.flow-pair.key.yaml',
            'patterns': [
              {'include': '#flow-scalar-plain-in-implicit-type'},
              {
                'begin': '[^-\\]!"#%\\&\'*,:>?@\\[`{|}\\s]|[-:?][^],\\[{}\\s]',
                'beginCaptures': {
                  '0': {'name': 'entity.name.tag.yaml'},
                },
                'contentName': 'entity.name.tag.yaml',
                'end':
                    '(?=\\s*\$|\\s+#|\\s*:(\\s|\$)|\\s*:[],\\[{}]|\\s*[],\\[{}])',
                'name': 'string.unquoted.plain.in.yaml',
              },
            ],
          },
          {'include': '#flow-node'},
          {
            'begin': ':(?=\\s|\$|[],\\[{}])',
            'captures': {
              '0': {'name': 'punctuation.separator.key-value.mapping.yaml'},
            },
            'end': '(?=[],}])',
            'name': 'meta.flow-pair.yaml',
            'patterns': [
              {'include': '#flow-value'},
            ],
          },
        ],
      },
      'flow-scalar': {
        'patterns': [
          {'include': '#flow-scalar-double-quoted'},
          {'include': '#flow-scalar-single-quoted'},
          {'include': '#flow-scalar-plain-in'},
        ],
      },
      'flow-scalar-double-quoted': {
        'begin': '"',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.yaml'},
        },
        'end': '"',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.yaml'},
        },
        'name': 'string.quoted.double.yaml',
        'patterns': [
          {
            'match': '\\\\([ "/0LN\\\\_abefnprtv]|x\\d\\d|u\\d{4}|U\\d{8})',
            'name': 'constant.character.escape.yaml',
          },
          {
            'match': '\\\\\\n',
            'name': 'constant.character.escape.double-quoted.newline.yaml',
          },
        ],
      },
      'flow-scalar-plain-in': {
        'patterns': [
          {'include': '#flow-scalar-plain-in-implicit-type'},
          {
            'begin': '[^-\\]!"#%\\&\'*,:>?@\\[`{|}\\s]|[-:?][^],\\[{}\\s]',
            'end':
                '(?=\\s*\$|\\s+#|\\s*:(\\s|\$)|\\s*:[],\\[{}]|\\s*[],\\[{}])',
            'name': 'string.unquoted.plain.in.yaml',
          },
        ],
      },
      'flow-scalar-plain-in-implicit-type': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'constant.language.null.yaml'},
              '2': {'name': 'constant.language.boolean.yaml'},
              '3': {'name': 'constant.numeric.integer.yaml'},
              '4': {'name': 'constant.numeric.float.yaml'},
              '5': {'name': 'constant.other.timestamp.yaml'},
              '6': {'name': 'constant.language.value.yaml'},
              '7': {'name': 'constant.language.merge.yaml'},
            },
            'match':
                '(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))|(\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{1,2}-\\d{1,2}(?:[Tt]|[\\t ]+)\\d{1,2}:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[\\t ]*Z|[-+]\\d{1,2}(?::\\d{1,2})?)?)|(=)|(<<))(?=\\s*\$|\\s+#|\\s*:(\\s|\$)|\\s*:[],\\[{}]|\\s*[],\\[{}])',
          },
        ],
      },
      'flow-scalar-plain-out': {
        'patterns': [
          {'include': '#flow-scalar-plain-out-implicit-type'},
          {
            'begin': '[^-\\]!"#%\\&\'*,:>?@\\[`{|}\\s]|[-:?]\\S',
            'end': '(?=\\s*\$|\\s+#|\\s*:(\\s|\$))',
            'name': 'string.unquoted.plain.out.yaml',
          },
        ],
      },
      'flow-scalar-plain-out-implicit-type': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'constant.language.null.yaml'},
              '2': {'name': 'constant.language.boolean.yaml'},
              '3': {'name': 'constant.numeric.integer.yaml'},
              '4': {'name': 'constant.numeric.float.yaml'},
              '5': {'name': 'constant.other.timestamp.yaml'},
              '6': {'name': 'constant.language.value.yaml'},
              '7': {'name': 'constant.language.merge.yaml'},
            },
            'match':
                '(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))|(\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{1,2}-\\d{1,2}(?:[Tt]|[\\t ]+)\\d{1,2}:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[\\t ]*Z|[-+]\\d{1,2}(?::\\d{1,2})?)?)|(=)|(<<))(?=\\s*\$|\\s+#|\\s*:(\\s|\$))',
          },
        ],
      },
      'flow-scalar-single-quoted': {
        'begin': '\'',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.yaml'},
        },
        'end': '\'(?!\')',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.yaml'},
        },
        'name': 'string.quoted.single.yaml',
        'patterns': [
          {
            'match': '\'\'',
            'name': 'constant.character.escape.single-quoted.yaml',
          },
        ],
      },
      'flow-sequence': {
        'begin': '\\[',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.sequence.begin.yaml'},
        },
        'end': ']',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.sequence.end.yaml'},
        },
        'name': 'meta.flow-sequence.yaml',
        'patterns': [
          {'include': '#prototype'},
          {'match': ',', 'name': 'punctuation.separator.sequence.yaml'},
          {'include': '#flow-pair'},
          {'include': '#flow-node'},
        ],
      },
      'flow-value': {
        'patterns': [
          {
            'begin': '\\G(?![],}])',
            'end': '(?=[],}])',
            'name': 'meta.flow-pair.value.yaml',
            'patterns': [
              {'include': '#flow-node'},
            ],
          },
        ],
      },
      'node': {
        'patterns': [
          {'include': '#block-node'},
        ],
      },
      'property': {
        'begin': '(?=[!\\&])',
        'end': '(?!\\G)',
        'name': 'meta.property.yaml',
        'patterns': [
          {
            'captures': {
              '1': {'name': 'keyword.control.property.anchor.yaml'},
              '2': {'name': 'punctuation.definition.anchor.yaml'},
              '3': {'name': 'entity.name.type.anchor.yaml'},
              '4': {'name': 'invalid.illegal.character.anchor.yaml'},
            },
            'match': '\\G((&))([^],/\\[{}\\s]+)(\\S+)?',
          },
          {
            'match':
                '\\G!(?:<(?:%\\h{2}|[]!#\$\\&-;=?-\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\h{2}|[#\$\\&-+\\--;=?-Z_a-z~])+|)(?=[\\t ]|\$)',
            'name': 'storage.type.tag-handle.yaml',
          },
          {'match': '\\S+', 'name': 'invalid.illegal.tag-handle.yaml'},
        ],
      },
      'prototype': {
        'patterns': [
          {'include': '#comment'},
          {'include': '#property'},
        ],
      },
    },
    'scopeName': 'source.yaml',
  },
);