mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-31 07:04:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1291 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			YAML
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			1291 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			YAML
		
	
	
	
		
			Vendored
		
	
	
	
| %YAML 1.2
 | |
| ---
 | |
| # http://www.sublimetext.com/docs/3/syntax.html
 | |
| name: JavaScript (Babel)
 | |
| file_extensions:
 | |
|   - js
 | |
|   - mjs
 | |
|   - jsx
 | |
|   - babel
 | |
|   - es6
 | |
|   - cjs
 | |
| first_line_match: ^#!\s*/.*\b(node|js)$\n?
 | |
| scope: source.js
 | |
| contexts:
 | |
|   main:
 | |
|     - include: core
 | |
|   brackets:
 | |
|     - include: round-brackets
 | |
|     - include: square-brackets
 | |
|     - include: curly-brackets
 | |
|   class-method-definition:
 | |
|     - match: '(@@[_$a-zA-Z][$\w]*|static|return)(?=\s*[<(])|(?=\s*<)'
 | |
|       captures:
 | |
|         1: keyword.operator.flowtype.js
 | |
|       push:
 | |
|         - meta_scope: meta.short-method.flowtype.js
 | |
|         - match: '(?=\s*[;{])'
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|         - include: flowtype-annotation
 | |
|         - include: comments
 | |
|         - include: curly-brackets
 | |
|     - match: '(?<=[]"''])\s*(?=[<(])'
 | |
|       push:
 | |
|         - meta_scope: meta.class-method.computed.js
 | |
|         - match: '(?=\s*[;{])'
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|         - include: flowtype-annotation
 | |
|         - include: comments
 | |
|         - include: curly-brackets
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         ((?>get|set)\s+)
 | |
|         (?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|           (([_$a-zA-Z][$\w]*|\d+))
 | |
|         )(?=\s*[<(])
 | |
|       captures:
 | |
|         1: storage.type.js
 | |
|         2: string.quoted.js
 | |
|         3: punctuation.definition.string.begin.js
 | |
|         4: entity.name.function.js
 | |
|         5: punctuation.definition.string.end.js
 | |
|         6: string.quoted.js
 | |
|         7: punctuation.definition.string.begin.js
 | |
|         8: entity.name.function.js
 | |
|         9: punctuation.definition.string.end.js
 | |
|         10: string.unquoted.js
 | |
|         11: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.class-accessor.js
 | |
|         - match: '(?=\s*[;{])'
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|         - include: flowtype-annotation
 | |
|         - include: comments
 | |
|         - include: curly-brackets
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|           (([_$a-zA-Z][$\w]*|\d+))
 | |
|         )(?=\s*[<(])
 | |
|       captures:
 | |
|         1: string.quoted.js
 | |
|         2: punctuation.definition.string.begin.js
 | |
|         3: entity.name.function.js
 | |
|         4: punctuation.definition.string.end.js
 | |
|         5: string.quoted.js
 | |
|         6: punctuation.definition.string.begin.js
 | |
|         7: entity.name.function.js
 | |
|         8: punctuation.definition.string.end.js
 | |
|         9: string.unquoted.js
 | |
|         10: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.class-method.js
 | |
|         - match: '(?=\s*[;{])'
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|         - include: flowtype-annotation
 | |
|         - include: comments
 | |
|         - include: curly-brackets
 | |
|   class-method-storage:
 | |
|     - match: (?<!\.)\b(?>static|declare)\b
 | |
|       scope: storage.modifier.js
 | |
|     - match: (?<!\.)\b(async)\b
 | |
|       scope: storage.type.js
 | |
|     - match: (?<!\.)\b(get|set)\b(?!\s*\()
 | |
|       scope: storage.type.js
 | |
|     - match: \*
 | |
|       scope: keyword.generator.asterisk.js
 | |
|   class-properties:
 | |
|     - match: '([_$a-zA-Z][$\w]*)(?=\s*[:=])'
 | |
|       captures:
 | |
|         1: variable.other.property.js
 | |
|       push:
 | |
|         - meta_scope: meta.class.property.js
 | |
|         - match: '(?=\s*[;}])'
 | |
|           pop: true
 | |
|         - include: flowtype-annotation
 | |
|         - include: expression
 | |
|   comments:
 | |
|     - match: /\*\*(?!/)
 | |
|       captures:
 | |
|         0: punctuation.definition.comment.js
 | |
|       push:
 | |
|         - meta_scope: comment.block.documentation.js
 | |
|         - match: \*/
 | |
|           captures:
 | |
|             0: punctuation.definition.comment.js
 | |
|           pop: true
 | |
|     - match: /\*
 | |
|       captures:
 | |
|         0: punctuation.definition.comment.begin.js
 | |
|       push:
 | |
|         - meta_scope: comment.block.js
 | |
|         - match: \*/
 | |
|           captures:
 | |
|             0: punctuation.definition.comment.end.js
 | |
|           pop: true
 | |
|     - match: (?><!--|-->)
 | |
|       scope: comment.block.html.js
 | |
|       captures:
 | |
|         0: punctuation.definition.comment.js
 | |
|     - match: (//).*$\n?
 | |
|       scope: comment.line.double-slash.js
 | |
|       captures:
 | |
|         1: punctuation.definition.comment.js
 | |
|     - match: ^(#!).*$\n?
 | |
|       scope: comment.line.shebang.js
 | |
|       captures:
 | |
|         1: punctuation.definition.comment.js
 | |
|   core:
 | |
|     - include: literal-function-labels
 | |
|     - include: literal-arrow-function-labels
 | |
|     - include: literal-labels
 | |
|     - include: literal-for
 | |
|     - include: literal-switch
 | |
|     - include: styled-components
 | |
|     - include: graphql
 | |
|     - include: expression
 | |
|     - include: literal-punctuation
 | |
|   curly-brackets:
 | |
|     - match: "{"
 | |
|       captures:
 | |
|         0: meta.brace.curly.begin.js
 | |
|       push:
 | |
|         - meta_scope: meta.group.braces.curly.js
 | |
|         - match: "}"
 | |
|           captures:
 | |
|             0: meta.brace.curly.end.js
 | |
|           pop: true
 | |
|         - include: main
 | |
|   es7-decorators:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (@)([_$a-zA-Z][$\w]*)\b
 | |
|       scope: tag.decorator.js
 | |
|       captures:
 | |
|         1: punctuation.definition.tag.js
 | |
|         2: entity.name.tag.js
 | |
|   expression:
 | |
|     - include: merge-conflits
 | |
|     - include: literal-regexp
 | |
|     - include: literal-jsx
 | |
|     - include: es7-decorators
 | |
|     - include: support-class
 | |
|     - include: support-other
 | |
|     - include: literal-function
 | |
|     - include: literal-arrow-function
 | |
|     - include: literal-prototype
 | |
|     - include: literal-keywords
 | |
|     - include: literal-method
 | |
|     - include: literal-module
 | |
|     - include: literal-class
 | |
|     - include: flowtype-declaration
 | |
|     - include: literal-number
 | |
|     - include: literal-template-string
 | |
|     - include: literal-string
 | |
|     - include: literal-language-constant
 | |
|     - include: literal-language-variable
 | |
|     - include: literal-constructor
 | |
|     - include: literal-method-call
 | |
|     - include: literal-function-call
 | |
|     - include: comments
 | |
|     - include: brackets
 | |
|     - include: literal-operators
 | |
|     - include: literal-variable
 | |
|   flowtype-annotation:
 | |
|     - match: (?:(\?)\s*)?(:)
 | |
|       captures:
 | |
|         1: keyword.operator.flowtype.optional.js
 | |
|         2: keyword.operator.flowtype.annotation.js
 | |
|       push:
 | |
|         - meta_scope: meta.flowtype.annotation.js
 | |
|         - include: flowtype-tokens
 | |
|         - match: (?=\S)
 | |
|           pop: true
 | |
|   flowtype-brackets:
 | |
|     - match: "{"
 | |
|       captures:
 | |
|         0: punctuation.section.flowtype.begin.js
 | |
|       push:
 | |
|         - match: "}"
 | |
|           captures:
 | |
|             0: punctuation.section.flowtype.end.js
 | |
|           pop: true
 | |
|         - include: flowtype-tokens
 | |
|   flowtype-declaration:
 | |
|     - match: (?<!\.)\b(declare)\b
 | |
|       scope: support.type.declare.flowtype.js
 | |
|     - match: '(?<!\.)\b(type)\b(?=\s*[_$a-zA-Z])'
 | |
|       captures:
 | |
|         1: support.type.type.flowtype.js
 | |
|       push:
 | |
|         - meta_scope: meta.type.flowtype.js
 | |
|         - match: (?=\s*(;|from))
 | |
|           pop: true
 | |
|         - include: flowtype-tokens
 | |
|     - match: '(?<!\.)\b(type)\b(?=\s*{)'
 | |
|       captures:
 | |
|         1: support.type.type.flowtype.js
 | |
|       push:
 | |
|         - meta_scope: meta.type.flowtype.js
 | |
|         - match: "(?<=})"
 | |
|           pop: true
 | |
|         - include: comments
 | |
|         - include: flowtype-brackets
 | |
|         - include: flowtype-polymorph
 | |
|         - match: '([_$a-zA-Z][$\w]*)'
 | |
|           scope: entity.name.type.js
 | |
|   flowtype-identifier:
 | |
|     - include: support-class
 | |
|     - match: \b(?:any|bool|boolean|mixed|number|string|void)\b
 | |
|       scope: constant.other.primitve.flowtype.js
 | |
|     - match: '[_$a-zA-Z][$\w]*'
 | |
|       scope: variable.other.flowtype.js
 | |
|     - match: \?
 | |
|       scope: keyword.operator.flowtype.optional.js
 | |
|   flowtype-polymorph:
 | |
|     - match: <
 | |
|       captures:
 | |
|         0: punctuation.section.flowtype.begin.js
 | |
|       push:
 | |
|         - meta_scope: meta.flowtype.polymorph.js
 | |
|         - match: ">"
 | |
|           captures:
 | |
|             0: punctuation.section.flowtype.end.js
 | |
|           pop: true
 | |
|         - include: flowtype-tokens
 | |
|   flowtype-tokens:
 | |
|     - match: '(?<=[:?|&=])(?=\s*{)'
 | |
|       push:
 | |
|         - match: "(?<=})"
 | |
|           pop: true
 | |
|         - include: flowtype-brackets
 | |
|     - match: '\s*([|&])\s*'
 | |
|       scope: meta.flowtype.set.js
 | |
|       captures:
 | |
|         1: keyword.operator.flowtype.other.js
 | |
|     - match: '[*:?&|.]|\.\.\.|\b(typeof)\b'
 | |
|       scope: keyword.operator.flowtype.other.js
 | |
|     - match: <
 | |
|       captures:
 | |
|         0: punctuation.section.flowtype.begin.js
 | |
|       push:
 | |
|         - match: ">"
 | |
|           captures:
 | |
|             0: punctuation.section.flowtype.end.js
 | |
|           pop: true
 | |
|         - include: flowtype-tokens
 | |
|     - match: '\['
 | |
|       captures:
 | |
|         0: punctuation.section.flowtype.begin.js
 | |
|       push:
 | |
|         - match: '\]'
 | |
|           captures:
 | |
|             0: punctuation.section.flowtype.end.js
 | |
|           pop: true
 | |
|         - include: flowtype-tokens
 | |
|     - match: \(
 | |
|       captures:
 | |
|         0: punctuation.section.flowtype.begin.js
 | |
|       push:
 | |
|         - match: \)
 | |
|           captures:
 | |
|             0: punctuation.section.flowtype.end.js
 | |
|           pop: true
 | |
|         - include: flowtype-tokens
 | |
|     - match: "=>"
 | |
|       captures:
 | |
|         0: keyword.operator.flowtype.js
 | |
|       push:
 | |
|         - meta_scope: meta.flowtype.function.js
 | |
|         - match: "(?<=}|[_$a-zA-Z])"
 | |
|           pop: true
 | |
|         - include: flowtype-brackets
 | |
|         - include: flowtype-identifier
 | |
|         - include: comments
 | |
|     - include: flowtype-identifier
 | |
|     - include: literal-string
 | |
|     - include: comments
 | |
|   function-declaration-parameters:
 | |
|     - match: \(
 | |
|       captures:
 | |
|         0: punctuation.definition.parameters.begin.js
 | |
|       push:
 | |
|         - match: \)
 | |
|           captures:
 | |
|             0: punctuation.definition.parameters.end.js
 | |
|           pop: true
 | |
|         - include: comments
 | |
|         - include: flowtype-annotation
 | |
|         - match: (?<!\.)\.\.\.
 | |
|           scope: keyword.operator.spread.js
 | |
|         - match: '([_$a-zA-Z][$\w]*)'
 | |
|           scope: variable.parameter.function.js
 | |
|         - match: ","
 | |
|           scope: punctuation.separator.parameter.function.js
 | |
|         - match: "="
 | |
|           captures:
 | |
|             0: keyword.operator.assignment.js
 | |
|           push:
 | |
|             - meta_scope: meta.parameter.optional.js
 | |
|             - match: "(?=[,)])"
 | |
|               pop: true
 | |
|             - include: expression
 | |
|   graphql:
 | |
|     - match: \s*+gql`
 | |
|       push:
 | |
|         - meta_scope: meta.graphql.js
 | |
|         - match: "`"
 | |
|           pop: true
 | |
|         - include: scope:source.graphql
 | |
|         - match: '\${'
 | |
|           push:
 | |
|             - meta_scope: js
 | |
|             - match: "}"
 | |
|               pop: true
 | |
|             - include: core
 | |
|     - match: \s*+`#graphql
 | |
|       push:
 | |
|         - meta_scope: meta.graphql.js
 | |
|         - match: "`"
 | |
|           pop: true
 | |
|         - include: scope:source.graphql
 | |
|         - match: '\${'
 | |
|           push:
 | |
|             - meta_scope: js
 | |
|             - match: "}"
 | |
|               pop: true
 | |
|             - include: core
 | |
|   jsx-attribute-assignment:
 | |
|     - match: "="
 | |
|       scope: keyword.operator.assignment.jsx
 | |
|   jsx-attribute-name:
 | |
|     - match: '[_$a-zA-Z][-$\w]*'
 | |
|       scope: entity.other.attribute-name.jsx
 | |
|   jsx-attributes:
 | |
|     - include: jsx-attribute-name
 | |
|     - include: jsx-attribute-assignment
 | |
|     - include: jsx-string-quoted
 | |
|     - include: jsx-evaluated-code
 | |
|     - include: comments
 | |
|   jsx-entities:
 | |
|     - match: '&(?:[a-zA-Z0-9]+|#\d+|#x\h+);'
 | |
|       scope: constant.character.entity.jsx
 | |
|     - match: '&\S*;'
 | |
|       scope: invalid.illegal.bad-ampersand.jsx
 | |
|   jsx-evaluated-code:
 | |
|     - match: "{"
 | |
|       captures:
 | |
|         0: punctuation.section.embedded.begin.jsx
 | |
|       push:
 | |
|         - meta_scope: meta.embedded.expression.jsx
 | |
|         - match: "}"
 | |
|           captures:
 | |
|             0: punctuation.section.embedded.end.jsx
 | |
|           pop: true
 | |
|         - include: expression
 | |
|   jsx-string-quoted:
 | |
|     - match: '(["''])'
 | |
|       captures:
 | |
|         0: punctuation.definition.string.begin.jsx
 | |
|       push:
 | |
|         - meta_scope: string.quoted.jsx
 | |
|         - match: \1
 | |
|           captures:
 | |
|             0: punctuation.definition.string.end.jsx
 | |
|           pop: true
 | |
|         - include: jsx-entities
 | |
|   jsx-tag-end:
 | |
|     - match: ">"
 | |
|       captures:
 | |
|         0: meta.tag.jsx punctuation.definition.tag.end.jsx
 | |
|       push:
 | |
|         - match: (?=</)
 | |
|           pop: true
 | |
|         - include: jsx-tag-start
 | |
|         - include: jsx-evaluated-code
 | |
|         - include: jsx-entities
 | |
|   jsx-tag-start:
 | |
|     - match: '(<)([_$a-zA-Z][-$:.\w]*[$\w]*)'
 | |
|       captures:
 | |
|         1: meta.tag.jsx punctuation.definition.tag.begin.jsx
 | |
|         2: meta.tag.jsx entity.name.tag.jsx
 | |
|       push:
 | |
|         - match: (</)(\2)(>)|(/>)
 | |
|           captures:
 | |
|             1: meta.tag.jsx punctuation.definition.tag.begin.jsx
 | |
|             2: meta.tag.jsx entity.name.tag.jsx
 | |
|             3: meta.tag.jsx punctuation.definition.tag.end.jsx
 | |
|             4: meta.tag.jsx punctuation.definition.tag.end.jsx
 | |
|           pop: true
 | |
|         - include: jsx-tag-end
 | |
|         - include: jsx-attributes
 | |
|     - match: <
 | |
|       scope: invalid.illegal.tag.incomplete.jsx
 | |
|   literal-arrow-function:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?:([_$a-zA-Z][$\w]*)\s*(=)\s*)?
 | |
|         (?:\b(async)\s+)?
 | |
|         (?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
 | |
|       captures:
 | |
|         1: entity.name.function.js
 | |
|         2: keyword.operator.assignment.js
 | |
|         3: storage.type.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.arrow.js
 | |
|         - match: (?<=\))\s*(=>)
 | |
|           captures:
 | |
|             1: storage.type.function.arrow.js
 | |
|           pop: true
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?:([_$a-zA-Z][$\w]*)\s*(=)\s*)?
 | |
|         (?:(async)\s+)?
 | |
|         \b([_$a-zA-Z][$\w]*)\s*(=>)
 | |
|       scope: meta.function.arrow.js
 | |
|       captures:
 | |
|         1: entity.name.function.js
 | |
|         2: keyword.operator.assignment.js
 | |
|         3: storage.type.js
 | |
|         4: variable.parameter.function.js
 | |
|         5: storage.type.function.arrow.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (\b_?[A-Z][$\w]*)?
 | |
|         (\.)(prototype)
 | |
|         (\.)([_$a-zA-Z][$\w]*)
 | |
|         \s*(=)
 | |
|         \s*(async)?
 | |
|         \s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.language.prototype.js
 | |
|         4: keyword.operator.accessor.js
 | |
|         5: entity.name.function.js
 | |
|         6: keyword.operator.assignment.js
 | |
|         7: storage.type.js
 | |
|       push:
 | |
|         - meta_scope: meta.prototype.function.arrow.js
 | |
|         - match: (?<=\))\s*(=>)
 | |
|           captures:
 | |
|             1: storage.type.function.arrow.js
 | |
|           pop: true
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (\b_?[A-Z][$\w]*)?
 | |
|         (\.)(prototype)
 | |
|         (\.)([_$a-zA-Z][$\w]*)
 | |
|         \s*(=)
 | |
|         \s*(async)?
 | |
|         \s*\b([_$a-zA-Z][$\w]*)\s*(=>)
 | |
|       scope: meta.prototype.function.arrow.js
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.language.prototype.js
 | |
|         4: keyword.operator.accessor.js
 | |
|         5: entity.name.function.js
 | |
|         6: keyword.operator.assignment.js
 | |
|         7: storage.type.js
 | |
|         8: variable.parameter.function.js
 | |
|         9: storage.type.function.arrow.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (\b_?[A-Z][$\w]*)?
 | |
|         (\.)([_$a-zA-Z][$\w]*)
 | |
|         \s*(=)
 | |
|         \s*(async)?
 | |
|         \s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: entity.name.function.js
 | |
|         4: keyword.operator.assignment.js
 | |
|         5: storage.type.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.static.arrow.js
 | |
|         - match: (?<=\))\s*(=>)
 | |
|           captures:
 | |
|             1: storage.type.function.arrow.js
 | |
|           pop: true
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (\b_?[A-Z][$\w]*)?
 | |
|         (\.)([_$a-zA-Z][$\w]*)
 | |
|         \s*(=)
 | |
|         \s*(async)?
 | |
|         \s*\b([_$a-zA-Z][$\w]*)\s*(=>)
 | |
|       scope: meta.function.static.arrow.js
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: entity.name.function.js
 | |
|         4: keyword.operator.assignment.js
 | |
|         5: storage.type.js
 | |
|         6: variable.parameter.function.js
 | |
|         7: storage.type.function.arrow.js
 | |
|   literal-arrow-function-labels:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|           (([_$a-zA-Z][$\w]*|\d+))
 | |
|         )
 | |
|         \s*(:)
 | |
|         \s*(?:\b(async)\s+)?
 | |
|         \s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
 | |
|       captures:
 | |
|         1: string.quoted.js
 | |
|         2: punctuation.definition.string.begin.js
 | |
|         3: entity.name.function.js
 | |
|         4: punctuation.definition.string.end.js
 | |
|         5: string.quoted.js
 | |
|         6: punctuation.definition.string.begin.js
 | |
|         7: entity.name.function.js
 | |
|         8: punctuation.definition.string.end.js
 | |
|         9: string.unquoted.js
 | |
|         10: entity.name.function.js
 | |
|         11: punctuation.separator.key-value.js
 | |
|         12: storage.type.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.json.arrow.js
 | |
|         - match: (?<=\))\s*(=>)
 | |
|           captures:
 | |
|             1: storage.type.function.arrow.js
 | |
|           pop: true
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|           (([_$a-zA-Z][$\w]*|\d+))
 | |
|         )
 | |
|         \s*(:)
 | |
|         \s*(?:\b(async)\s+)?
 | |
|         \s*\b([_$a-zA-Z][$\w]*)\s*(=>)
 | |
|       scope: meta.function.json.arrow.js
 | |
|       captures:
 | |
|         1: string.quoted.js
 | |
|         2: punctuation.definition.string.begin.js
 | |
|         3: entity.name.function.js
 | |
|         4: punctuation.definition.string.end.js
 | |
|         5: string.quoted.js
 | |
|         6: punctuation.definition.string.begin.js
 | |
|         7: entity.name.function.js
 | |
|         8: punctuation.definition.string.end.js
 | |
|         9: string.unquoted.js
 | |
|         10: entity.name.function.js
 | |
|         11: punctuation.separator.key-value.js
 | |
|         12: storage.type.js
 | |
|         13: variable.parameter.function.js
 | |
|         14: storage.type.function.arrow.js
 | |
|   literal-class:
 | |
|     - match: (?<!\.)\b(?:(class)|(interface))\b
 | |
|       captures:
 | |
|         1: storage.type.class.js
 | |
|         2: storage.type.interface.flowtype.js
 | |
|       push:
 | |
|         - meta_scope: meta.class.js
 | |
|         - match: '\}'
 | |
|           captures:
 | |
|             0: meta.brace.curly.end.js
 | |
|           pop: true
 | |
|         - include: comments
 | |
|         - match: '([_$a-zA-Z][$\w]*)'
 | |
|           captures:
 | |
|             0: entity.name.class.js
 | |
|           push:
 | |
|             - match: "(?={)"
 | |
|               pop: true
 | |
|             - include: comments
 | |
|             - include: flowtype-polymorph
 | |
|             - match: (?<!\.)\b(extends)\b
 | |
|               captures:
 | |
|                 0: storage.type.extends.js
 | |
|               push:
 | |
|                 - meta_scope: meta.class.extends.js
 | |
|                 - match: "(?={)"
 | |
|                   pop: true
 | |
|                 - include: flowtype-polymorph
 | |
|                 - include: expression
 | |
|         - match: '\{'
 | |
|           captures:
 | |
|             0: meta.brace.curly.begin.js
 | |
|           push:
 | |
|             - match: "(?=})"
 | |
|               pop: true
 | |
|             - include: es7-decorators
 | |
|             - include: class-properties
 | |
|             - include: class-method-definition
 | |
|             - include: class-method-storage
 | |
|             - include: brackets
 | |
|             - include: comments
 | |
|   literal-constructor:
 | |
|     - match: '(new)\s+(?=[_$a-zA-Z][$\w.]*)'
 | |
|       captures:
 | |
|         1: keyword.operator.new.js
 | |
|       push:
 | |
|         - meta_scope: meta.instance.constructor.js
 | |
|         - match: '(?![_$a-zA-Z][$\w.]*)'
 | |
|           pop: true
 | |
|         - include: support-class
 | |
|         - include: support-other
 | |
|         - match: '([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*)'
 | |
|           captures:
 | |
|             2: variable.function.constructor.js
 | |
|   literal-for:
 | |
|     - match: (?<!\.)\b(for)\b
 | |
|       captures:
 | |
|         1: keyword.control.loop.js
 | |
|       push:
 | |
|         - meta_scope: meta.for.js
 | |
|         - match: \)
 | |
|           captures:
 | |
|             0: meta.brace.round.end.js
 | |
|           pop: true
 | |
|         - include: comments
 | |
|         - match: \(
 | |
|           captures:
 | |
|             0: meta.brace.round.begin.js
 | |
|           push:
 | |
|             - match: (?=\))
 | |
|               pop: true
 | |
|             - include: literal-keyword-storage
 | |
|             - include: expression
 | |
|             - include: literal-punctuation
 | |
|   literal-function:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?:([_$a-zA-Z][$\w]*)\s*(=)\s*)?
 | |
|         (?:(async)\s+)?
 | |
|         (function)(?>\s*(\*)|(?=[\s(<]))
 | |
|         \s*([_$a-zA-Z][$\w]*)?
 | |
|       captures:
 | |
|         1: entity.name.function.js
 | |
|         2: keyword.operator.assignment.js
 | |
|         3: storage.type.js
 | |
|         4: storage.type.function.js
 | |
|         5: keyword.generator.asterisk.js
 | |
|         6: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.js
 | |
|         - match: (?<=\))
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (\b_?[A-Z][$\w]*)?
 | |
|         (\.)(prototype)
 | |
|         (\.)([_$a-zA-Z][$\w]*)
 | |
|         \s*(=)
 | |
|         \s*(?:(async)\s+)?
 | |
|         \s*(function)(?>\s*(\*)|(?=[\s(<]))
 | |
|         \s*([_$a-zA-Z][$\w]*)?\s*
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.language.prototype.js
 | |
|         4: keyword.operator.accessor.js
 | |
|         5: entity.name.function.js
 | |
|         6: keyword.operator.assignment.js
 | |
|         7: storage.type.js
 | |
|         8: storage.type.function.js
 | |
|         9: keyword.generator.asterisk.js
 | |
|         10: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.prototype.js
 | |
|         - match: (?<=\))
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (\b_?[A-Z][$\w]*)?
 | |
|         (\.)([_$a-zA-Z][$\w]*)
 | |
|         \s*(=)
 | |
|         \s*(?:(async)\s+)?
 | |
|         \s*(function)(?>\s*(\*)|(?=[\s(<]))
 | |
|         \s*([_$a-zA-Z][$\w]*)?\s*
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: entity.name.function.js
 | |
|         4: keyword.operator.assignment.js
 | |
|         5: storage.type.js
 | |
|         6: storage.type.function.js
 | |
|         7: keyword.generator.asterisk.js
 | |
|         8: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.static.js
 | |
|         - match: (?<=\))
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|   literal-function-call:
 | |
|     - match: '([_$a-zA-Z][$\w]*)\s*(\(\s*\))'
 | |
|       scope: meta.function-call.without-arguments.js
 | |
|       captures:
 | |
|         1: variable.function.js
 | |
|         2: meta.group.braces.round.function.arguments.js
 | |
|     - match: '([_$a-zA-Z][$\w]*)\s*(?=\()'
 | |
|       scope: meta.function-call.with-arguments.js
 | |
|       captures:
 | |
|         1: variable.function.js
 | |
|     - match: '([_$a-zA-Z][$\w]*)\s*(?=`)'
 | |
|       scope: meta.function-call.tagged-template.js
 | |
|       captures:
 | |
|         1: variable.function.js
 | |
|   literal-function-labels:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|           (([_$a-zA-Z][$\w]*|\d+))
 | |
|         )
 | |
|         \s*(:)
 | |
|         \s*(?:\b(async)\s+)?
 | |
|         \s*(function)(?>\s*(\*)|(?=[\s(<]))
 | |
|         \s*([_$a-zA-Z][$\w]*)?
 | |
|       captures:
 | |
|         1: string.quoted.js
 | |
|         2: punctuation.definition.string.begin.js
 | |
|         3: entity.name.function.js
 | |
|         4: punctuation.definition.string.end.js
 | |
|         5: string.quoted.js
 | |
|         6: punctuation.definition.string.begin.js
 | |
|         7: entity.name.function.js
 | |
|         8: punctuation.definition.string.end.js
 | |
|         9: string.unquoted.js
 | |
|         10: entity.name.function.js
 | |
|         11: punctuation.separator.key-value.js
 | |
|         12: storage.type.js
 | |
|         13: storage.type.function.js
 | |
|         14: keyword.generator.asterisk.js
 | |
|         15: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.function.json.js
 | |
|         - match: (?<=\))
 | |
|           pop: true
 | |
|         - include: flowtype-polymorph
 | |
|         - include: function-declaration-parameters
 | |
|   literal-jsx:
 | |
|     - match: '(?<=\(|\{|\[|,|&&|\|\||\?|:|=|=>|\Wreturn|^return|\Wdefault|^)(?=\s*<[_$a-zA-Z])'
 | |
|       push:
 | |
|         - meta_content_scope: meta.jsx.js
 | |
|         - match: (?<=/>|>)
 | |
|           pop: true
 | |
|         - include: jsx-tag-start
 | |
|   literal-keyword-storage:
 | |
|     - match: (?<!\.)\b(?>const|let|var)\b
 | |
|       scope: storage.type.js
 | |
|   literal-keywords:
 | |
|     - include: literal-keyword-storage
 | |
|     - match: (?<!\.)\b((?>await|yield))\b(?:\s*(\*))?
 | |
|       captures:
 | |
|         1: keyword.control.flow.js
 | |
|         2: keyword.generator.asterisk.js
 | |
|     - match: (?<!\.)\b(return)\b
 | |
|       scope: keyword.control.flow.js
 | |
|     - match: (?<!\.)\b(?>if|else)\b
 | |
|       scope: keyword.control.conditional.js
 | |
|     - match: (?<!\.)\b(?>catch|finally|throw|try)\b
 | |
|       scope: keyword.control.trycatch.js
 | |
|     - match: (?<!\.)\b(?>break|continue|do|goto|while|case|default)\b
 | |
|       scope: keyword.control.loop.js
 | |
|     - match: (?<!\.)\b(?>enum|module|public|package|private|interface|protected)\b
 | |
|       scope: keyword.other.reserved.js
 | |
|     - match: (?<!\.)\b(debugger)\b
 | |
|       scope: keyword.other.js
 | |
|   literal-labels:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?<!\?)(?<!\?\s)(?=(?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|         )\s*:)
 | |
|       push:
 | |
|         - match: ":"
 | |
|           captures:
 | |
|             0: punctuation.separator.key-value.js
 | |
|           pop: true
 | |
|         - include: literal-string
 | |
|     - match: '(?<!\.|\?|\?\s)([_$a-zA-Z][$\w]*)\s*(:)'
 | |
|       scope: constant.other.object.key.js
 | |
|       captures:
 | |
|         1: string.unquoted.label.js
 | |
|         2: punctuation.separator.key-value.js
 | |
|   literal-language-constant:
 | |
|     - match: (?<!\.)\b(true)\b
 | |
|       scope: constant.language.boolean.true.js
 | |
|     - match: (?<!\.)\b(false)\b
 | |
|       scope: constant.language.boolean.false.js
 | |
|     - match: (?<!\.)\b(null)\b
 | |
|       scope: constant.language.null.js
 | |
|     - match: (?<!\.)\b(undefined)\b
 | |
|       scope: constant.language.undefined.js
 | |
|     - match: (?<!\.)\b(NaN)\b
 | |
|       scope: constant.language.nan.js
 | |
|   literal-language-variable:
 | |
|     - match: (?<!(?<!\.\.)\.)\b(arguments)\b
 | |
|       scope: variable.language.arguments.js
 | |
|     - match: (?<!(?<!\.\.)\.)\b(super)\b
 | |
|       scope: variable.language.super.js
 | |
|     - match: (?<!(?<!\.\.)\.)\b(this)\b
 | |
|       scope: variable.language.this.js
 | |
|     - match: (?<!(?<!\.\.)\.)\b(self)\b
 | |
|       scope: variable.language.self.js
 | |
|     - match: (?<=\.)(__proto__)\b
 | |
|       scope: variable.language.proto.js
 | |
|     - match: (?<=\.)(constructor)\b
 | |
|       scope: variable.language.constructor.js
 | |
|     - match: (?<=\.)(prototype)\b
 | |
|       scope: variable.language.prototype.js
 | |
|   literal-method:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?:\b(static)\s+)?
 | |
|         (?:\b(async)\s+)?
 | |
|         (?:(\*)\s*)?
 | |
|         (?>
 | |
|           ((')((?>[^'\\]|\\.)*)('))|
 | |
|           ((")((?>[^"\\]|\\.)*)("))|
 | |
|           (([_$a-zA-Z][$\w]*|\d+))
 | |
|         )
 | |
|         (?=\s*(\((?>(?>[^()]+)|\g<-1>)*\))(?>\s|/\*.*\*/)*\{)
 | |
|       captures:
 | |
|         1: storage.type.js
 | |
|         2: storage.type.js
 | |
|         3: keyword.generator.asterisk.js
 | |
|         4: string.quoted.js
 | |
|         5: punctuation.definition.string.begin.js
 | |
|         6: entity.name.function.js
 | |
|         7: punctuation.definition.string.end.js
 | |
|         8: string.quoted.js
 | |
|         9: punctuation.definition.string.begin.js
 | |
|         10: entity.name.function.js
 | |
|         11: punctuation.definition.string.end.js
 | |
|         12: string.unquoted.js
 | |
|         13: entity.name.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.method.js
 | |
|         - match: (?<=\))
 | |
|           pop: true
 | |
|         - include: function-declaration-parameters
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         \b(?:(static)\s+)?
 | |
|         (get|set)\s+
 | |
|         ([_$a-zA-Z][$\w]*|\d+)\s*
 | |
|         (?=(\((?>(?>[^()]+)|\g<-1>)*\))(?>\s|/\*.*\*/)*\{)
 | |
|       captures:
 | |
|         1: storage.type.js
 | |
|         2: storage.type.accessor.js
 | |
|         3: entity.name.accessor.js
 | |
|       push:
 | |
|         - meta_scope: meta.accessor.js
 | |
|         - match: (?<=\))
 | |
|           pop: true
 | |
|         - include: function-declaration-parameters
 | |
|   literal-method-call:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?:(?<=\.)|\b)
 | |
|         ([A-Z][$\w]*)\s*(\.)
 | |
|         ([_$a-zA-Z][$\w]*)\s*
 | |
|         (\(\s*\))
 | |
|       scope: meta.function-call.static.without-arguments.js
 | |
|       captures:
 | |
|         1: variable.other.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.function.js
 | |
|         4: meta.group.braces.round.function.arguments.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?:(?<=\.)|\b)
 | |
|         ([A-Z][$\w]*)\s*(\.)
 | |
|         ([_$a-zA-Z][$\w]*)\s*
 | |
|         (?=\()
 | |
|       scope: meta.function-call.static.with-arguments.js
 | |
|       captures:
 | |
|         1: variable.other.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.function.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?<=\.)
 | |
|         ([_$a-zA-Z][$\w]*)\s*
 | |
|         (\(\s*\))
 | |
|       scope: meta.function-call.method.without-arguments.js
 | |
|       captures:
 | |
|         1: variable.function.js
 | |
|         2: meta.group.braces.round.function.arguments.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?<=\.)
 | |
|         ([_$a-zA-Z][$\w]*)\s*
 | |
|         (?=\()
 | |
|       scope: meta.function-call.method.with-arguments.js
 | |
|       captures:
 | |
|         1: variable.function.js
 | |
|   literal-module:
 | |
|     - match: (?<!\.)\b(?>import|export|default|from|as)\b
 | |
|       scope: keyword.operator.module.js
 | |
|   literal-number:
 | |
|     - match: '(?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+)'
 | |
|       scope: invalid.illegal.numeric.hex.js
 | |
|     - match: '(?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+)'
 | |
|       scope: invalid.illegal.numeric.octal.js
 | |
|     - match: |-
 | |
|         (?xi)
 | |
|         (?:\B[-+])?
 | |
|         (?:
 | |
|           \b0b[0-1]*|                 # binary
 | |
|           \b0o[0-7]*|                 # octal
 | |
|           \b0x[0-9a-f]*|              # hex
 | |
|           (
 | |
|             \B\.[0-9]+|               # e.g. .999
 | |
|             \b[0-9]+(\.[0-9]*)?       # e.g. 999.999, 999. or 999
 | |
|           )(e[-+]?[0-9]+)?            # e.g. e+123, E-123
 | |
|         )
 | |
|       scope: constant.numeric.js
 | |
|     - match: '(?:\B[-+]|\b)(Infinity)\b'
 | |
|       scope: constant.language.infinity.js
 | |
|   literal-operators:
 | |
|     - match: (?<!\.)\b(?>delete|instanceof|in|new|of|typeof|void|with)\b
 | |
|       scope: keyword.operator.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         !(?!=)| # logical-not     right-to-left   right
 | |
|         &&    | # logical-and     left-to-right   both
 | |
|         \|\|    # logical-or      left-to-right   both
 | |
|       scope: keyword.operator.logical.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         =(?!=)  # assignment      right-to-left   both
 | |
|       scope: keyword.operator.assignment.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         %=   | # assignment      right-to-left   both
 | |
|         &=   | # assignment      right-to-left   both
 | |
|         \*=  | # assignment      right-to-left   both
 | |
|         \+=  | # assignment      right-to-left   both
 | |
|         -=   | # assignment      right-to-left   both
 | |
|         /=   | # assignment      right-to-left   both
 | |
|         \^=  | # assignment      right-to-left   both
 | |
|         \|=  | # assignment      right-to-left   both
 | |
|         <<=  | # assignment      right-to-left   both
 | |
|         >>=  | # assignment      right-to-left   both
 | |
|         >>>=   # assignment      right-to-left   both
 | |
|       scope: keyword.operator.assignment.augmented.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         ~    | # bitwise-not     right-to-left   right
 | |
|         <<   | # bitwise-shift   left-to-right   both
 | |
|         >>>  | # bitwise-shift   left-to-right   both
 | |
|         >>   | # bitwise-shift   left-to-right   both
 | |
|         &    | # bitwise-and     left-to-right   both
 | |
|         \^   | # bitwise-xor     left-to-right   both
 | |
|         \|     # bitwise-or      left-to-right   both
 | |
|       scope: keyword.operator.bitwise.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         <=   | # relational      left-to-right   both
 | |
|         >=   | # relational      left-to-right   both
 | |
|         <    | # relational      left-to-right   both
 | |
|         >      # relational      left-to-right   both
 | |
|       scope: keyword.operator.relational.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         ===  | # equality        left-to-right   both
 | |
|         !==  | # equality        left-to-right   both
 | |
|         ==   | # equality        left-to-right   both
 | |
|         !=     # equality        left-to-right   both
 | |
|       scope: keyword.operator.comparison.js
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         --   | # decrement       n/a             right-or-left
 | |
|         \+\+ | # increment       n/a             right-or-left
 | |
|         /    | # division        left-to-right   both
 | |
|         %    | # modulus         left-to-right   both
 | |
|         \*   | # multiplication  left-to-right   both
 | |
|         \+   | # addition        left-to-right   both
 | |
|         -      # subtraction     left-to-right   both
 | |
|       scope: keyword.operator.arithmetic.js
 | |
|     - match: "[?:]"
 | |
|       scope: keyword.operator.ternary.js
 | |
|     - match: (?<!\.)\.\.\.
 | |
|       scope: keyword.operator.spread.js
 | |
|     - match: \.
 | |
|       scope: keyword.operator.accessor.js
 | |
|   literal-prototype:
 | |
|     - match: '([_$a-zA-Z][$\w]*)(\.)(prototype)\s*(=)\s*'
 | |
|       scope: meta.prototype.declaration.js
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.language.prototype.js
 | |
|         4: keyword.operator.assignment.js
 | |
|     - match: '([_$a-zA-Z][$\w]*)(\.)(prototype)\b'
 | |
|       scope: meta.prototype.access.js
 | |
|       captures:
 | |
|         1: entity.name.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.language.prototype.js
 | |
|   literal-punctuation:
 | |
|     - match: ;
 | |
|       scope: punctuation.terminator.statement.js
 | |
|     - match: ","
 | |
|       scope: meta.delimiter.comma.js
 | |
|   literal-regexp:
 | |
|     - match: |-
 | |
|         (?x)
 | |
|         (?<=
 | |
|           \.|\(|,|{|}|\[|;|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=|
 | |
|           \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow|\Wyield|
 | |
|           ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^yield|^
 | |
|         )\s*
 | |
|         (/)
 | |
|         (?!/|\*|$)
 | |
|       captures:
 | |
|         1: punctuation.definition.string.begin.js
 | |
|       push:
 | |
|         - meta_scope: string.regexp.js
 | |
|         - match: "(/)([gimy]*)"
 | |
|           captures:
 | |
|             1: punctuation.definition.string.end.js
 | |
|             2: keyword.other.js
 | |
|           pop: true
 | |
|         - include: scope:source.regexp.js
 | |
|   literal-string:
 | |
|     - match: '(["''])'
 | |
|       captures:
 | |
|         0: punctuation.definition.string.begin.js
 | |
|       push:
 | |
|         - meta_scope: string.quoted.js
 | |
|         - match: (\1)|(\n)
 | |
|           captures:
 | |
|             1: punctuation.definition.string.end.js
 | |
|             2: invalid.illegal.newline.js
 | |
|           pop: true
 | |
|         - include: string-content
 | |
|   literal-switch:
 | |
|     - match: (?<!\.)\b(switch)\b
 | |
|       captures:
 | |
|         1: keyword.control.switch.js
 | |
|       push:
 | |
|         - meta_scope: meta.switch.js
 | |
|         - match: '\}'
 | |
|           captures:
 | |
|             0: meta.brace.curly.end.js
 | |
|           pop: true
 | |
|         - include: comments
 | |
|         - include: round-brackets
 | |
|         - match: '\{'
 | |
|           captures:
 | |
|             0: meta.brace.curly.begin.js
 | |
|           push:
 | |
|             - match: "(?=})"
 | |
|               pop: true
 | |
|             - match: (?<!\.)\b(case|default)\b
 | |
|               captures:
 | |
|                 1: keyword.control.switch.js
 | |
|               push:
 | |
|                 - match: (?=:)
 | |
|                   pop: true
 | |
|                 - include: expression
 | |
|             - include: main
 | |
|   literal-template-string:
 | |
|     - match: "`"
 | |
|       captures:
 | |
|         0: string.interpolated.js keyword.other.template.begin.js
 | |
|       push:
 | |
|         - match: "`"
 | |
|           captures:
 | |
|             0: string.interpolated.js keyword.other.template.end.js
 | |
|           pop: true
 | |
|         - include: string-content
 | |
|         - match: \\`
 | |
|           scope: constant.character.escape.js
 | |
|         - match: '\${'
 | |
|           captures:
 | |
|             0: keyword.other.substitution.begin.js
 | |
|           push:
 | |
|             - match: "}"
 | |
|               captures:
 | |
|                 0: keyword.other.substitution.end.js
 | |
|               pop: true
 | |
|             - include: expression
 | |
|         - match: .
 | |
|           scope: string.interpolated.js
 | |
|   literal-variable:
 | |
|     - match: '_*?[A-Z][_$\dA-Z]*\b'
 | |
|       scope: variable.other.constant.js
 | |
|     - match: '\b([A-Z][$\w]*)\s*(\.)([_$a-zA-Z][$\w]*)'
 | |
|       scope: meta.property.class.js
 | |
|       captures:
 | |
|         1: variable.other.class.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: variable.other.property.static.js
 | |
|     - match: '(?<!\.)([_$a-zA-Z][$\w]*)\s*(?=[\[\.])'
 | |
|       scope: variable.other.object.js
 | |
|       captures:
 | |
|         1: variable.other.object.js
 | |
|     - match: '(?<=\.)\s*([_$a-zA-Z][$\w]*)'
 | |
|       scope: meta.property.object.js
 | |
|       captures:
 | |
|         1: variable.other.property.js
 | |
|     - match: '[_$a-zA-Z][$\w]*'
 | |
|       scope: variable.other.readwrite.js
 | |
|   merge-conflits:
 | |
|     - match: '^([<]{7})\s(.+)$'
 | |
|       captures:
 | |
|         1: invalid.illegal.conflict-marker.merge-into.js
 | |
|         2: invalid.illegal.string.js
 | |
|     - match: "^([=|]{7})$"
 | |
|       captures:
 | |
|         1: invalid.illegal.conflict-marker.separator.js
 | |
|     - match: '^([>]{7})\s(.+)$'
 | |
|       captures:
 | |
|         1: invalid.illegal.conflict-marker.other-commit.js
 | |
|         2: invalid.illegal.string.js
 | |
|   round-brackets:
 | |
|     - match: \(
 | |
|       captures:
 | |
|         0: meta.brace.round.begin.js
 | |
|       push:
 | |
|         - meta_scope: meta.group.braces.round.js
 | |
|         - match: \)
 | |
|           captures:
 | |
|             0: meta.brace.round.end.js
 | |
|           pop: true
 | |
|         - include: expression
 | |
|   square-brackets:
 | |
|     - match: '\['
 | |
|       captures:
 | |
|         0: meta.brace.square.begin.js
 | |
|       push:
 | |
|         - meta_scope: meta.group.braces.square.js
 | |
|         - match: '\]'
 | |
|           captures:
 | |
|             0: meta.brace.square.end.js
 | |
|           pop: true
 | |
|         - include: expression
 | |
|   string-content:
 | |
|     - match: \\\s*\n
 | |
|       scope: constant.character.escape.newline.js
 | |
|     - match: '\\([1-7][0-7]{0,2}|[0-7]{2,3}|[bfnrtv0''"\\]|x\h{2}|u\{\h+\}|u\h{4})'
 | |
|       scope: constant.character.escape.js
 | |
|   styled-components:
 | |
|     - match: (?<!\.)\b(injectGlobal|keyframes)\s*(`)
 | |
|       captures:
 | |
|         1: variable.function.tagged-template.js
 | |
|         2: punctuation.definition.string.template.begin.js
 | |
|       push:
 | |
|         - meta_scope: meta.styled-components.js
 | |
|         - meta_content_scope: source.css.embedded.js
 | |
|         - match: "`"
 | |
|           captures:
 | |
|             0: punctuation.definition.string.template.end.js
 | |
|           pop: true
 | |
|         - include: scope:source.js.css
 | |
|     - match: '(?<!\.)\b(styled)(\.)([_$a-zA-Z][$\w]*)\s*(`)'
 | |
|       captures:
 | |
|         1: variable.other.object.js
 | |
|         2: punctuation.accessor.js
 | |
|         3: variable.function.tagged-template.js
 | |
|         4: punctuation.definition.string.template.begin.js
 | |
|       push:
 | |
|         - meta_scope: meta.styled-components.js
 | |
|         - meta_content_scope: source.css.embedded.js
 | |
|         - match: "`"
 | |
|           captures:
 | |
|             0: punctuation.definition.string.template.end.js
 | |
|           pop: true
 | |
|         - include: scope:source.js.css
 | |
|     - match: '(?<!\.)\b(styled)\s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*`)'
 | |
|       captures:
 | |
|         1: meta.function-call.with-arguments.js variable.function.js
 | |
|       push:
 | |
|         - meta_scope: meta.styled-components.js
 | |
|         - match: (?<=`)
 | |
|           captures:
 | |
|             1: meta.function-call.with-arguments.js variable.function.js
 | |
|           pop: true
 | |
|         - match: \(
 | |
|           captures:
 | |
|             0: punctuation.definition.group.begin.js
 | |
|           push:
 | |
|             - meta_scope: meta.function-call.with-arguments.js meta.group.js
 | |
|             - match: \)
 | |
|               captures:
 | |
|                 0: punctuation.definition.group.end.js
 | |
|               pop: true
 | |
|             - include: expression
 | |
|         - match: "`"
 | |
|           captures:
 | |
|             0: punctuation.definition.string.template.begin.js
 | |
|           push:
 | |
|             - meta_content_scope: source.css.embedded.js
 | |
|             - match: "`"
 | |
|               captures:
 | |
|                 0: punctuation.definition.string.template.end.js
 | |
|               pop: true
 | |
|             - include: scope:source.js.css
 | |
|   support-class:
 | |
|     - match: (?<!\.)\b(Array|ArrayBuffer|Boolean|DataView|Date|Float32Array|Float64Array|Function|Infinity|Int16Array|Int32Array|Int8Array|JSON|Map|Math|NaN|Number|Object|Promise|Proxy|Reflect|RegExp|Set|String|Symbol|System|TypeError|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|WeakMap|WeakSet)\b
 | |
|       scope: support.class.builtin.js
 | |
|     - match: (?<!\.)\b((?>Eval|Range|Reference|Syntax|Type|URI)?Error)\b
 | |
|       scope: support.class.error.js
 | |
|     - match: \b(?>Buffer)\b
 | |
|       scope: support.class.node.js
 | |
|   support-other:
 | |
|     - match: (?<!\.)\b(constructor|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|hasOwnProperty|isFinite|isNaN|isPrototypeOf|parseFloat|parseInt|propertyIsEnumerable|toLocaleString|toString|unescape|valueOf)\b
 | |
|       scope: support.function.builtin.js
 | |
|     - match: (?<!\.)\b(clearImmediate|clearInterval|clearTimeout|require|setImmediate|setInterval|setTimeout)\b
 | |
|       scope: support.function.node.js
 | |
|     - match: (?<!\.)\b(?>document|window)\b
 | |
|       scope: support.type.object.dom.js
 | |
|     - match: (?<!\.)\b(?>global|GLOBAL|root|__dirname|__filename)\b
 | |
|       scope: support.type.object.node.js
 | |
|     - match: (?<!\.)\b(console)(?:(\.)(assert|count|dir|error|group|groupCollapsed|groupEnd|info|log|profile|profileEnd|table|time|timeEnd|trace|warn))?\b
 | |
|       captures:
 | |
|         1: support.type.object.console.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: support.function.console.js
 | |
|     - match: (?<!\.)\b(process)(?:(\.)(?:(arch|argv|config|env|execArgv|execPath|exitCode|mainModule|pid|platform|stderr|stdin|stdout|title|version|versions)|(abort|chdir|cwd|exit|getgid|getgroups|getuid|hrtime|initgroups|kill|memoryUsage|nextTick|setgid|setgroups|setuid|umask|uptime)))?\b
 | |
|       captures:
 | |
|         1: support.type.object.process.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: support.type.object.process.js
 | |
|         4: support.function.process.js
 | |
|     - match: (?<!\.)\b(exports|module)(?:(\.)(children|exports|filename|id|loaded|parent))?\b
 | |
|       captures:
 | |
|         1: support.type.object.module.js
 | |
|         2: keyword.operator.accessor.js
 | |
|         3: support.type.object.module.js
 | |
|     - match: "{{"
 | |
|       push:
 | |
|         - meta_scope: meta.tag.mustache.js
 | |
|         - match: "}}"
 | |
|           pop: true
 |