%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: (?static|declare)\b scope: storage.modifier.js - 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: (?" 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: (?" captures: 0: meta.tag.jsx punctuation.definition.tag.end.jsx push: - match: (?=)|(/>) 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: (?\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: (?const|let|var)\b scope: storage.type.js literal-keywords: - include: literal-keyword-storage - match: (?await|yield))\b(?:\s*(\*))? captures: 1: keyword.control.flow.js 2: keyword.generator.asterisk.js - match: (?if|else)\b scope: keyword.control.conditional.js - match: (?catch|finally|throw|try)\b scope: keyword.control.trycatch.js - match: (?break|continue|do|goto|while|case|default)\b scope: keyword.control.loop.js - match: (?enum|module|public|package|private|interface|protected)\b scope: keyword.other.reserved.js - match: (? ((')((?>[^'\\]|\\.)*)('))| ((")((?>[^"\\]|\\.)*)("))| )\s*:) push: - match: ":" captures: 0: punctuation.separator.key-value.js pop: true - include: literal-string - match: '(? ((')((?>[^'\\]|\\.)*)('))| ((")((?>[^"\\]|\\.)*)("))| (([_$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: (?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: (?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: (?|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| \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: (?]{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: (?(?>[^()]+)|\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: (?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: (?document|window)\b scope: support.type.object.dom.js - match: (?global|GLOBAL|root|__dirname|__filename)\b scope: support.type.object.node.js - match: (?