2018-09-05 09:49:33 +02:00
|
|
|
%YAML 1.2
|
|
|
|
---
|
|
|
|
# http://www.sublimetext.com/docs/3/syntax.html
|
|
|
|
name: JavaScript (Babel)
|
|
|
|
file_extensions:
|
|
|
|
- js
|
2020-03-06 23:43:04 +01:00
|
|
|
- mjs
|
2018-09-05 09:49:33 +02:00
|
|
|
- jsx
|
|
|
|
- babel
|
|
|
|
- es6
|
2020-03-06 23:43:04 +01:00
|
|
|
- cjs
|
2018-09-05 09:49:33 +02:00
|
|
|
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
|