github-linguist 4.8.9 → 4.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/git-linguist +2 -2
- data/grammars/source.ats.json +58 -128
- data/grammars/source.autoit.json +158 -153
- data/grammars/source.awk.json +333 -383
- data/grammars/source.batchfile.json +194 -0
- data/grammars/source.c.platform.json +359 -22
- data/grammars/source.changelogs.rpm-spec.json +99 -0
- data/grammars/source.clojure.json +9 -3
- data/grammars/source.dockerfile.json +67 -78
- data/grammars/source.elm.json +20 -379
- data/grammars/source.emacs.lisp.json +656 -0
- data/grammars/source.gdscript.json +233 -228
- data/grammars/source.graphql.json +75 -10
- data/grammars/source.js.json +2 -2
- data/grammars/source.js.jsx.json +247 -839
- data/grammars/source.js.regexp.json +1 -1
- data/grammars/source.nginx.json +882 -768
- data/grammars/source.nsis.json +151 -143
- data/grammars/source.objc.json +3 -0
- data/grammars/source.objc.platform.json +174 -104
- data/grammars/source.puppet.json +429 -396
- data/grammars/source.pyjade.json +11 -0
- data/grammars/source.regexp.babel.json +1 -1
- data/grammars/source.rpm-spec.json +770 -0
- data/grammars/source.systemverilog.json +1110 -961
- data/grammars/source.ts.json +57 -57
- data/grammars/source.tsx.json +57 -57
- data/grammars/text.dart-analysis-output.json +67 -152
- data/grammars/text.error-list.json +54 -0
- data/grammars/text.find-refs.json +927 -0
- data/grammars/text.html.basic.json +1 -1
- data/grammars/text.html.mediawiki.elm-build-output.json +108 -0
- data/grammars/text.html.mediawiki.elm-documentation.json +22 -0
- data/grammars/text.html.vue.json +35 -0
- data/grammars/text.jade.json +34 -12
- data/grammars/text.roff.json +1 -1
- data/lib/linguist/heuristics.rb +16 -4
- data/lib/linguist/languages.json +1 -1
- data/lib/linguist/languages.yml +25 -5
- data/lib/linguist/samples.json +1367 -163
- data/lib/linguist/version.rb +1 -1
- metadata +10 -3
- data/grammars/source.dosbatch.json +0 -70
| @@ -11,6 +11,18 @@ | |
| 11 11 | 
             
                {
         | 
| 12 12 | 
             
                  "include": "#comment"
         | 
| 13 13 | 
             
                },
         | 
| 14 | 
            +
                {
         | 
| 15 | 
            +
                  "include": "#typeDef"
         | 
| 16 | 
            +
                },
         | 
| 17 | 
            +
                {
         | 
| 18 | 
            +
                  "include": "#typeDefImplements"
         | 
| 19 | 
            +
                },
         | 
| 20 | 
            +
                {
         | 
| 21 | 
            +
                  "include": "#unionOptions"
         | 
| 22 | 
            +
                },
         | 
| 23 | 
            +
                {
         | 
| 24 | 
            +
                  "include": "#directive"
         | 
| 25 | 
            +
                },
         | 
| 14 26 | 
             
                {
         | 
| 15 27 | 
             
                  "name": "meta.fragment",
         | 
| 16 28 | 
             
                  "comment": "a fragment definintion",
         | 
| @@ -26,7 +38,7 @@ | |
| 26 38 | 
             
                      "name": "keyword.operator"
         | 
| 27 39 | 
             
                    },
         | 
| 28 40 | 
             
                    "4": {
         | 
| 29 | 
            -
                      "name": "support. | 
| 41 | 
            +
                      "name": "support.class"
         | 
| 30 42 | 
             
                    }
         | 
| 31 43 | 
             
                  }
         | 
| 32 44 | 
             
                },
         | 
| @@ -71,9 +83,20 @@ | |
| 71 83 | 
             
                    }
         | 
| 72 84 | 
             
                  ]
         | 
| 73 85 | 
             
                },
         | 
| 74 | 
            -
                " | 
| 75 | 
            -
                  " | 
| 76 | 
            -
                  " | 
| 86 | 
            +
                "variableDefinition": {
         | 
| 87 | 
            +
                  "match": "(\\$[_A-Za-z][_0-9A-Za-z]*)\\:\\s*([_A-Za-z][_0-9A-Za-z]*)",
         | 
| 88 | 
            +
                  "captures": {
         | 
| 89 | 
            +
                    "1": {
         | 
| 90 | 
            +
                      "name": "constant.other.symbol"
         | 
| 91 | 
            +
                    },
         | 
| 92 | 
            +
                    "2": {
         | 
| 93 | 
            +
                      "name": "support.class"
         | 
| 94 | 
            +
                    }
         | 
| 95 | 
            +
                  }
         | 
| 96 | 
            +
                },
         | 
| 97 | 
            +
                "variableUsage": {
         | 
| 98 | 
            +
                  "match": "\\$[_A-Za-z][_0-9A-Za-z]*",
         | 
| 99 | 
            +
                  "name": "constant.other.symbol"
         | 
| 77 100 | 
             
                },
         | 
| 78 101 | 
             
                "boolean": {
         | 
| 79 102 | 
             
                  "name": "constant.language.boolean",
         | 
| @@ -85,15 +108,15 @@ | |
| 85 108 | 
             
                },
         | 
| 86 109 | 
             
                "directive": {
         | 
| 87 110 | 
             
                  "name": "storage.modifier",
         | 
| 88 | 
            -
                  "match": "@[ | 
| 111 | 
            +
                  "match": "@[_A-Za-z][_0-9A-Za-z]+"
         | 
| 89 112 | 
             
                },
         | 
| 90 113 | 
             
                "argument": {
         | 
| 91 114 | 
             
                  "name": "variable.parameter",
         | 
| 92 115 | 
             
                  "match": "[_A-Za-z][_0-9A-Za-z]*:"
         | 
| 93 116 | 
             
                },
         | 
| 94 117 | 
             
                "enum": {
         | 
| 95 | 
            -
                  " | 
| 96 | 
            -
                  " | 
| 118 | 
            +
                  "match": "([A-Z][A-Z_]+)",
         | 
| 119 | 
            +
                  "name": "support.constant.enum"
         | 
| 97 120 | 
             
                },
         | 
| 98 121 | 
             
                "fragmentSpread": {
         | 
| 99 122 | 
             
                  "match": "(\\.\\.\\.)\\s*([_A-Za-z][_0-9A-Za-z]*)\\s*(on\\s*)?([_A-Za-z][_0-9A-Za-z]*)?",
         | 
| @@ -108,7 +131,7 @@ | |
| 108 131 | 
             
                      "name": "keyword.operator"
         | 
| 109 132 | 
             
                    },
         | 
| 110 133 | 
             
                    "4": {
         | 
| 111 | 
            -
                      "name": "support. | 
| 134 | 
            +
                      "name": "support.class"
         | 
| 112 135 | 
             
                    }
         | 
| 113 136 | 
             
                  }
         | 
| 114 137 | 
             
                },
         | 
| @@ -122,7 +145,7 @@ | |
| 122 145 | 
             
                      "name": "keyword.operator"
         | 
| 123 146 | 
             
                    },
         | 
| 124 147 | 
             
                    "3": {
         | 
| 125 | 
            -
                      "name": "support. | 
| 148 | 
            +
                      "name": "support.class"
         | 
| 126 149 | 
             
                    }
         | 
| 127 150 | 
             
                  }
         | 
| 128 151 | 
             
                },
         | 
| @@ -151,7 +174,10 @@ | |
| 151 174 | 
             
                      "include": "#boolean"
         | 
| 152 175 | 
             
                    },
         | 
| 153 176 | 
             
                    {
         | 
| 154 | 
            -
                      "include": "# | 
| 177 | 
            +
                      "include": "#variableDefinition"
         | 
| 178 | 
            +
                    },
         | 
| 179 | 
            +
                    {
         | 
| 180 | 
            +
                      "include": "#variableUsage"
         | 
| 155 181 | 
             
                    },
         | 
| 156 182 | 
             
                    {
         | 
| 157 183 | 
             
                      "include": "#number"
         | 
| @@ -159,6 +185,9 @@ | |
| 159 185 | 
             
                    {
         | 
| 160 186 | 
             
                      "include": "#enum"
         | 
| 161 187 | 
             
                    },
         | 
| 188 | 
            +
                    {
         | 
| 189 | 
            +
                      "include": "#directive"
         | 
| 190 | 
            +
                    },
         | 
| 162 191 | 
             
                    {
         | 
| 163 192 | 
             
                      "include": "#comment"
         | 
| 164 193 | 
             
                    }
         | 
| @@ -202,6 +231,9 @@ | |
| 202 231 | 
             
                    },
         | 
| 203 232 | 
             
                    {
         | 
| 204 233 | 
             
                      "include": "#builtInField"
         | 
| 234 | 
            +
                    },
         | 
| 235 | 
            +
                    {
         | 
| 236 | 
            +
                      "include": "#enum"
         | 
| 205 237 | 
             
                    }
         | 
| 206 238 | 
             
                  ]
         | 
| 207 239 | 
             
                },
         | 
| @@ -220,6 +252,39 @@ | |
| 220 252 | 
             
                "fieldAlias": {
         | 
| 221 253 | 
             
                  "match": "[_A-Za-z][_0-9A-Za-z]*:",
         | 
| 222 254 | 
             
                  "name": "variable.other.alias.graphql"
         | 
| 255 | 
            +
                },
         | 
| 256 | 
            +
                "typeDef": {
         | 
| 257 | 
            +
                  "match": "(type|interface|union|scalar|enum|input|directive|extend|schema)\\s+([_A-Za-z][_0-9A-Za-z]*)?",
         | 
| 258 | 
            +
                  "captures": {
         | 
| 259 | 
            +
                    "1": {
         | 
| 260 | 
            +
                      "name": "keyword.operator"
         | 
| 261 | 
            +
                    },
         | 
| 262 | 
            +
                    "2": {
         | 
| 263 | 
            +
                      "name": "support.class"
         | 
| 264 | 
            +
                    }
         | 
| 265 | 
            +
                  }
         | 
| 266 | 
            +
                },
         | 
| 267 | 
            +
                "typeDefImplements": {
         | 
| 268 | 
            +
                  "match": "(implements)\\s+([_A-Za-z][_0-9A-Za-z,\\s]*)",
         | 
| 269 | 
            +
                  "captures": {
         | 
| 270 | 
            +
                    "1": {
         | 
| 271 | 
            +
                      "name": "keyword.operator"
         | 
| 272 | 
            +
                    },
         | 
| 273 | 
            +
                    "2": {
         | 
| 274 | 
            +
                      "name": "support.class"
         | 
| 275 | 
            +
                    }
         | 
| 276 | 
            +
                  }
         | 
| 277 | 
            +
                },
         | 
| 278 | 
            +
                "unionOptions": {
         | 
| 279 | 
            +
                  "match": "(=|\\||on)\\s+([_A-Za-z][_0-9A-Za-z]*)",
         | 
| 280 | 
            +
                  "captures": {
         | 
| 281 | 
            +
                    "1": {
         | 
| 282 | 
            +
                      "name": "keyword.operator"
         | 
| 283 | 
            +
                    },
         | 
| 284 | 
            +
                    "2": {
         | 
| 285 | 
            +
                      "name": "support.class"
         | 
| 286 | 
            +
                    }
         | 
| 287 | 
            +
                  }
         | 
| 223 288 | 
             
                }
         | 
| 224 289 | 
             
              }
         | 
| 225 290 | 
             
            }
         | 
    
        data/grammars/source.js.json
    CHANGED
    
    | @@ -1671,7 +1671,7 @@ | |
| 1671 1671 | 
             
                      "name": "storage.type.class.jsdoc"
         | 
| 1672 1672 | 
             
                    },
         | 
| 1673 1673 | 
             
                    {
         | 
| 1674 | 
            -
                      "match": "(?x)\n({( | 
| 1674 | 
            +
                      "match": "(?x)\n(?:(?<=@param)|(?<=@type))\n\\s+\n({(?:\n  \\* |                                        # {*} any type\n  \\? |                                        # {?} unknown type\n\n  (?:                                          # Check for a prefix\n    \\? |                                      # {?string} nullable type\n    !   |                                      # {!string} non-nullable type\n    \\.{3}                                     # {...string} variable number of parameters\n  )?\n\n  (?:\n    \\(                                        # Opening bracket of multiple types with parenthesis {(string|number)}\n      [a-zA-Z_$]+\n      (?:\n        (?:\n          [\\w$]*\n          (?:\\[\\])?                          # {(string[]|number)} type application, an array of strings or a number\n        ) |\n        <[\\w$]+(?:,\\s+[\\w$]+)*>             # {Array<string>} or {Object<string, number>} type application\n      )\n      (?:\n        [\\.|~]                                # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n        [a-zA-Z_$]+\n        (?:\n          (?:\n            [\\w$]*\n            (?:\\[\\])?                        # {(string|number[])} type application, a string or an array of numbers\n          ) |\n          <[\\w$]+(?:,\\s+[\\w$]+)*>           # {Array<string>} or {Object<string, number>} type application\n        )\n      )*\n    \\) |\n    [a-zA-Z_$]+\n    (?:\n      (?:\n        [\\w$]*\n        (?:\\[\\])?                            # {string[]|number} type application, an array of strings or a number\n      ) |\n      <[\\w$]+(?:,\\s+[\\w$]+)*>               # {Array<string>} or {Object<string, number>} type application\n    )\n    (?:\n      [\\.|~]                                  # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n      [a-zA-Z_$]+\n      (?:\n        [\\w$]* |\n        <[\\w$]+(?:,\\s+[\\w$]+)*>             # {Array<string>} or {Object<string, number>} type application\n      )\n    )*\n  )\n                                               # Check for suffix\n  (?:\\[\\])?                                  # {string[]} type application, an array of strings\n  =?                                           # {string=} optional parameter\n)})\n\\s+\n(\n  \\[                                          # [foo] optional parameter\n    \\s*\n    (?:\n      [a-zA-Z_$][\\w$]*\n      (?:\n        (?:\\[\\])?                            # Foo[].bar properties within an array\n        \\.                                    # Foo.Bar namespaced parameter\n        [a-zA-Z_$][\\w$]*\n      )*\n      (?:\n        \\s*\n        =                                      # [foo=bar] Default parameter value\n        \\s*\n        [\\w$\\s]*\n      )?\n    )\n    \\s*\n  \\] |\n  (?:\n    [a-zA-Z_$][\\w$]*\n    (?:\n      (?:\\[\\])?                              # Foo[].bar properties within an array\n      \\.                                      # Foo.Bar namespaced parameter\n      [a-zA-Z_$][\\w$]*\n    )*\n  )?\n)\n\\s+\n((?:(?!\\*\\/).)*)                             # The type description",
         | 
| 1675 1675 | 
             
                      "captures": {
         | 
| 1676 1676 | 
             
                        "0": {
         | 
| 1677 1677 | 
             
                          "name": "other.meta.jsdoc"
         | 
| @@ -1688,7 +1688,7 @@ | |
| 1688 1688 | 
             
                      }
         | 
| 1689 1689 | 
             
                    },
         | 
| 1690 1690 | 
             
                    {
         | 
| 1691 | 
            -
                      "match": "(?x)\n( | 
| 1691 | 
            +
                      "match": "(?x)\n({(?:\n  \\* |                                        # {*} any type\n  \\? |                                        # {?} unknown type\n\n  (?:                                          # Check for a prefix\n    \\? |                                      # {?string} nullable type\n    !   |                                      # {!string} non-nullable type\n    \\.{3}                                     # {...string} variable number of parameters\n  )?\n\n  (?:\n    \\(                                        # Opening bracket of multiple types with parenthesis {(string|number)}\n      [a-zA-Z_$]+\n      (?:\n        [\\w$]* |\n        <[\\w$]+(?:,\\s+[\\w$]+)*>             # {Array<string>} or {Object<string, number>} type application\n      )\n      (?:\n        [\\.|~]                                # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n        [a-zA-Z_$]+\n        (?:\n          [\\w$]* |\n          <[\\w$]+(?:,\\s+[\\w$]+)*>           # {Array<string>} or {Object<string, number>} type application\n        )\n      )*\n    \\) |\n    [a-zA-Z_$]+\n    (?:\n      [\\w$]* |\n      <[\\w$]+(?:,\\s+[\\w$]+)*>               # {Array<string>} or {Object<string, number>} type application\n    )\n    (?:\n      [\\.|~]                                  # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n      [a-zA-Z_$]+\n      (?:\n        [\\w$]* |\n        <[\\w$]+(?:,\\s+[\\w$]+)*>             # {Array<string>} or {Object<string, number>} type application\n      )\n    )*\n  )\n                                               # Check for suffix\n  (?:\\[\\])?                                  # {string[]} type application, an array of strings\n  =?                                           # {string=} optional parameter\n)})\n\\s+\n((?:(?!\\*\\/).)*)                             # The type description",
         | 
| 1692 1692 | 
             
                      "captures": {
         | 
| 1693 1693 | 
             
                        "0": {
         | 
| 1694 1694 | 
             
                          "name": "other.meta.jsdoc"
         | 
    
        data/grammars/source.js.jsx.json
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "name": "Babel ES6 JavaScript",
         | 
| 3 3 | 
             
              "scopeName": "source.js.jsx",
         | 
| 4 | 
            -
              "foldingStartMarker": "( | 
| 4 | 
            +
              "foldingStartMarker": "(/\\*|\\{|\\()",
         | 
| 5 5 | 
             
              "foldingEndMarker": "(\\*/|\\}|\\))",
         | 
| 6 6 | 
             
              "firstLineMatch": "^#!\\s*/.*\\b(node|js)$\\n?",
         | 
| 7 7 | 
             
              "fileTypes": [
         | 
| @@ -105,8 +105,7 @@ | |
| 105 105 | 
             
                      "include": "#literal-language-variable"
         | 
| 106 106 | 
             
                    },
         | 
| 107 107 | 
             
                    {
         | 
| 108 | 
            -
                      "include": "#literal-object" | 
| 109 | 
            -
                      "comment": "before literal-module as it traps default {"
         | 
| 108 | 
            +
                      "include": "#literal-object"
         | 
| 110 109 | 
             
                    },
         | 
| 111 110 | 
             
                    {
         | 
| 112 111 | 
             
                      "include": "#literal-module"
         | 
| @@ -147,7 +146,7 @@ | |
| 147 146 | 
             
                  "comment": "so set at arbitary 1000 chars to avoid parsing minified files",
         | 
| 148 147 | 
             
                  "patterns": [
         | 
| 149 148 | 
             
                    {
         | 
| 150 | 
            -
                      "match": " | 
| 149 | 
            +
                      "match": "^(?:).{1000,}"
         | 
| 151 150 | 
             
                    }
         | 
| 152 151 | 
             
                  ]
         | 
| 153 152 | 
             
                },
         | 
| @@ -157,7 +156,7 @@ | |
| 157 156 | 
             
                      "comment": "e.g. play: function(arg1, arg2) { }",
         | 
| 158 157 | 
             
                      "name": "meta.function.json.js",
         | 
| 159 158 | 
             
                      "begin": "(?<=^|{|,)\\s*+([_$a-zA-Z][$\\w]*)\\s*+(:)\\s*+(?:(async)\\s+)?\\s*+((?<!\\.)\\bfunction\\b)\\s*+(?:(\\*)\\s*)?\\s*(?=\\(|<)",
         | 
| 160 | 
            -
                      "end": "( | 
| 159 | 
            +
                      "end": "(?=\\{)",
         | 
| 161 160 | 
             
                      "applyEndPatternLast": 1,
         | 
| 162 161 | 
             
                      "beginCaptures": {
         | 
| 163 162 | 
             
                        "1": {
         | 
| @@ -185,8 +184,8 @@ | |
| 185 184 | 
             
                    {
         | 
| 186 185 | 
             
                      "comment": "e.g. 'play': function(arg1, arg2) { }",
         | 
| 187 186 | 
             
                      "name": "meta.function.json.js",
         | 
| 188 | 
            -
                      "begin": "(?<=^|{|,)\\s*+((' | 
| 189 | 
            -
                      "end": "( | 
| 187 | 
            +
                      "begin": "(?<=^|{|,)\\s*+(('|\\\")([^\"']*)(\\k<-3>))\\s*+(:)\\s*+(async)?\\s*+((?<!\\.)\\bfunction\\b)\\s*(\\*\\s*)?\\s*(?=\\(|<)",
         | 
| 188 | 
            +
                      "end": "(?=\\{)",
         | 
| 190 189 | 
             
                      "applyEndPatternLast": 1,
         | 
| 191 190 | 
             
                      "beginCaptures": {
         | 
| 192 191 | 
             
                        "1": {
         | 
| @@ -227,7 +226,7 @@ | |
| 227 226 | 
             
                    {
         | 
| 228 227 | 
             
                      "comment": "e.g. play: async <T>(args) => { }",
         | 
| 229 228 | 
             
                      "name": "meta.function.json.arrow.js",
         | 
| 230 | 
            -
                      "begin": "(?<=^|{|,)\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(:)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(( | 
| 229 | 
            +
                      "begin": "(?<=^|{|,)\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(:)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 231 230 | 
             
                      "end": "\\s*(=>)",
         | 
| 232 231 | 
             
                      "beginCaptures": {
         | 
| 233 232 | 
             
                        "1": {
         | 
| @@ -254,7 +253,7 @@ | |
| 254 253 | 
             
                    {
         | 
| 255 254 | 
             
                      "comment": "e.g. play: arg => { }",
         | 
| 256 255 | 
             
                      "name": "meta.function.json.arrow.js",
         | 
| 257 | 
            -
                      "begin": "(?<=^|{|,)\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(:)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+([_$a-zA-Z][$\\w]*)\\s*+(( | 
| 256 | 
            +
                      "begin": "(?<=^|{|,)\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(:)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+([_$a-zA-Z][$\\w]*)\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 258 257 | 
             
                      "end": "\\s*(=>)",
         | 
| 259 258 | 
             
                      "beginCaptures": {
         | 
| 260 259 | 
             
                        "1": {
         | 
| @@ -284,7 +283,7 @@ | |
| 284 283 | 
             
                    {
         | 
| 285 284 | 
             
                      "comment": "e.g. 'play': (args) => { }",
         | 
| 286 285 | 
             
                      "name": "meta.function.json.arrow.js",
         | 
| 287 | 
            -
                      "begin": "(?<=^|{|,)\\s*+((' | 
| 286 | 
            +
                      "begin": "(?<=^|{|,)\\s*+(('|\\\")([^\"']*)(\\k<-3>))\\s*(:)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 288 287 | 
             
                      "end": "\\s*(=>)",
         | 
| 289 288 | 
             
                      "applyEndPatternLast": 1,
         | 
| 290 289 | 
             
                      "endCaptures": {
         | 
| @@ -321,7 +320,7 @@ | |
| 321 320 | 
             
                    {
         | 
| 322 321 | 
             
                      "comment": "e.g. 'play': arg => { }",
         | 
| 323 322 | 
             
                      "name": "meta.function.json.arrow.js",
         | 
| 324 | 
            -
                      "begin": "(?<=^|{|,)\\s*+((' | 
| 323 | 
            +
                      "begin": "(?<=^|{|,)\\s*+(('|\\\")([^\"']*)(\\k<-3>))\\s*+(:)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+([_$a-zA-Z][$\\w]*)\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 325 324 | 
             
                      "end": "\\s*(=>)",
         | 
| 326 325 | 
             
                      "beginCaptures": {
         | 
| 327 326 | 
             
                        "1": {
         | 
| @@ -363,7 +362,7 @@ | |
| 363 362 | 
             
                  "patterns": [
         | 
| 364 363 | 
             
                    {
         | 
| 365 364 | 
             
                      "comment": "string as a property name",
         | 
| 366 | 
            -
                      "match": "\\s*+(?<!\\.|\\?|\\?\\s|\\?\\s\\s)((( | 
| 365 | 
            +
                      "match": "\\s*+(?<!\\.|\\?|\\?\\s|\\?\\s\\s)(((\\\")(\\\\.|[^\\\\\"])*(\\\"))|((')(\\\\.|[^\\\\'])*(')))\\s*+(:)",
         | 
| 367 366 | 
             
                      "captures": {
         | 
| 368 367 | 
             
                        "1": {
         | 
| 369 368 | 
             
                          "name": "constant.other.object.key.js"
         | 
| @@ -434,6 +433,7 @@ | |
| 434 433 | 
             
                      "include": "#literal-keyword-storage"
         | 
| 435 434 | 
             
                    },
         | 
| 436 435 | 
             
                    {
         | 
| 436 | 
            +
                      "name": "keyword.control.flow.js",
         | 
| 437 437 | 
             
                      "match": "\\s*+(?<!\\.)\\b(yield)\\b(?:\\s*+(\\*))?",
         | 
| 438 438 | 
             
                      "captures": {
         | 
| 439 439 | 
             
                        "1": {
         | 
| @@ -445,36 +445,20 @@ | |
| 445 445 | 
             
                      }
         | 
| 446 446 | 
             
                    },
         | 
| 447 447 | 
             
                    {
         | 
| 448 | 
            -
                      " | 
| 449 | 
            -
                      " | 
| 450 | 
            -
                        "1": {
         | 
| 451 | 
            -
                          "name": "keyword.control.flow.js"
         | 
| 452 | 
            -
                        }
         | 
| 453 | 
            -
                      }
         | 
| 448 | 
            +
                      "name": "keyword.control.flow.js",
         | 
| 449 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(await|return)\\b"
         | 
| 454 450 | 
             
                    },
         | 
| 455 451 | 
             
                    {
         | 
| 456 | 
            -
                      " | 
| 457 | 
            -
                      " | 
| 458 | 
            -
                        "1": {
         | 
| 459 | 
            -
                          "name": "keyword.control.conditional.js"
         | 
| 460 | 
            -
                        }
         | 
| 461 | 
            -
                      }
         | 
| 452 | 
            +
                      "name": "keyword.control.conditional.js",
         | 
| 453 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(if|else)\\b"
         | 
| 462 454 | 
             
                    },
         | 
| 463 455 | 
             
                    {
         | 
| 464 | 
            -
                      " | 
| 465 | 
            -
                      " | 
| 466 | 
            -
                        "1": {
         | 
| 467 | 
            -
                          "name": "keyword.control.trycatch.js"
         | 
| 468 | 
            -
                        }
         | 
| 469 | 
            -
                      }
         | 
| 456 | 
            +
                      "name": "keyword.control.trycatch.js",
         | 
| 457 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(catch|finally|throw|try)\\b"
         | 
| 470 458 | 
             
                    },
         | 
| 471 459 | 
             
                    {
         | 
| 472 | 
            -
                      " | 
| 473 | 
            -
                      " | 
| 474 | 
            -
                        "1": {
         | 
| 475 | 
            -
                          "name": "keyword.control.loop.js"
         | 
| 476 | 
            -
                        }
         | 
| 477 | 
            -
                      }
         | 
| 460 | 
            +
                      "name": "keyword.control.loop.js",
         | 
| 461 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(break|continue|do|goto|while)\\b"
         | 
| 478 462 | 
             
                    }
         | 
| 479 463 | 
             
                  ]
         | 
| 480 464 | 
             
                },
         | 
| @@ -483,9 +467,9 @@ | |
| 483 467 | 
             
                    {
         | 
| 484 468 | 
             
                      "name": "meta.for.js",
         | 
| 485 469 | 
             
                      "begin": "\\s*+(?<!\\.)\\b(for)\\b",
         | 
| 486 | 
            -
                      "end": "\\s | 
| 470 | 
            +
                      "end": "\\s*\\)",
         | 
| 487 471 | 
             
                      "endCaptures": {
         | 
| 488 | 
            -
                        " | 
| 472 | 
            +
                        "0": {
         | 
| 489 473 | 
             
                          "name": "meta.brace.round.js"
         | 
| 490 474 | 
             
                        }
         | 
| 491 475 | 
             
                      },
         | 
| @@ -496,10 +480,10 @@ | |
| 496 480 | 
             
                      },
         | 
| 497 481 | 
             
                      "patterns": [
         | 
| 498 482 | 
             
                        {
         | 
| 499 | 
            -
                          "begin": "\\s | 
| 483 | 
            +
                          "begin": "\\s*+\\(",
         | 
| 500 484 | 
             
                          "end": "\\s*(?=\\))",
         | 
| 501 485 | 
             
                          "beginCaptures": {
         | 
| 502 | 
            -
                            " | 
| 486 | 
            +
                            "0": {
         | 
| 503 487 | 
             
                              "name": "meta.brace.round.js"
         | 
| 504 488 | 
             
                            }
         | 
| 505 489 | 
             
                          },
         | 
| @@ -524,14 +508,14 @@ | |
| 524 508 | 
             
                    {
         | 
| 525 509 | 
             
                      "name": "meta.switch.js",
         | 
| 526 510 | 
             
                      "begin": "\\s*+(?<!\\.)\\b(switch)\\b",
         | 
| 527 | 
            -
                      "end": "\\s | 
| 511 | 
            +
                      "end": "\\s*\\}",
         | 
| 528 512 | 
             
                      "beginCaptures": {
         | 
| 529 513 | 
             
                        "1": {
         | 
| 530 514 | 
             
                          "name": "keyword.control.switch.js"
         | 
| 531 515 | 
             
                        }
         | 
| 532 516 | 
             
                      },
         | 
| 533 517 | 
             
                      "endCaptures": {
         | 
| 534 | 
            -
                        " | 
| 518 | 
            +
                        "0": {
         | 
| 535 519 | 
             
                          "name": "meta.brace.curly.js"
         | 
| 536 520 | 
             
                        }
         | 
| 537 521 | 
             
                      },
         | 
| @@ -540,10 +524,10 @@ | |
| 540 524 | 
             
                          "include": "#round-brackets"
         | 
| 541 525 | 
             
                        },
         | 
| 542 526 | 
             
                        {
         | 
| 543 | 
            -
                          "begin": "\\s | 
| 527 | 
            +
                          "begin": "\\s*+\\{",
         | 
| 544 528 | 
             
                          "end": "\\s*(?=})",
         | 
| 545 529 | 
             
                          "beginCaptures": {
         | 
| 546 | 
            -
                            " | 
| 530 | 
            +
                            "0": {
         | 
| 547 531 | 
             
                              "name": "meta.brace.curly.js"
         | 
| 548 532 | 
             
                            }
         | 
| 549 533 | 
             
                          },
         | 
| @@ -594,14 +578,14 @@ | |
| 594 578 | 
             
                    {
         | 
| 595 579 | 
             
                      "comment": "try to avoid ternary operators which have a '? some chars :'",
         | 
| 596 580 | 
             
                      "begin": "(^|:|;|=|(?<=:|;|=))\\s*+(\\((?=((\"|').*?(?<=[^\\\\])\\k<-1>|[^?:])*(:|\\?\\s*+:)))",
         | 
| 597 | 
            -
                      "end": "\\s | 
| 581 | 
            +
                      "end": "\\s*\\)",
         | 
| 598 582 | 
             
                      "beginCaptures": {
         | 
| 599 583 | 
             
                        "2": {
         | 
| 600 584 | 
             
                          "name": "meta.brace.round.js"
         | 
| 601 585 | 
             
                        }
         | 
| 602 586 | 
             
                      },
         | 
| 603 587 | 
             
                      "endCaptures": {
         | 
| 604 | 
            -
                        " | 
| 588 | 
            +
                        "0": {
         | 
| 605 589 | 
             
                          "name": "meta.brace.round.js"
         | 
| 606 590 | 
             
                        }
         | 
| 607 591 | 
             
                      },
         | 
| @@ -615,15 +599,15 @@ | |
| 615 599 | 
             
                      ]
         | 
| 616 600 | 
             
                    },
         | 
| 617 601 | 
             
                    {
         | 
| 618 | 
            -
                      "begin": "\\s | 
| 619 | 
            -
                      "end": "\\s | 
| 602 | 
            +
                      "begin": "\\s*+\\(",
         | 
| 603 | 
            +
                      "end": "\\s*\\)",
         | 
| 620 604 | 
             
                      "endCaptures": {
         | 
| 621 | 
            -
                        " | 
| 605 | 
            +
                        "0": {
         | 
| 622 606 | 
             
                          "name": "meta.brace.round.js"
         | 
| 623 607 | 
             
                        }
         | 
| 624 608 | 
             
                      },
         | 
| 625 609 | 
             
                      "beginCaptures": {
         | 
| 626 | 
            -
                        " | 
| 610 | 
            +
                        "0": {
         | 
| 627 611 | 
             
                          "name": "meta.brace.round.js"
         | 
| 628 612 | 
             
                        }
         | 
| 629 613 | 
             
                      },
         | 
| @@ -638,15 +622,15 @@ | |
| 638 622 | 
             
                "square-brackets": {
         | 
| 639 623 | 
             
                  "patterns": [
         | 
| 640 624 | 
             
                    {
         | 
| 641 | 
            -
                      "begin": "\\s | 
| 642 | 
            -
                      "end": "\\s | 
| 625 | 
            +
                      "begin": "\\s*+\\[",
         | 
| 626 | 
            +
                      "end": "\\s*\\]",
         | 
| 643 627 | 
             
                      "endCaptures": {
         | 
| 644 | 
            -
                        " | 
| 628 | 
            +
                        "0": {
         | 
| 645 629 | 
             
                          "name": "meta.brace.square.js"
         | 
| 646 630 | 
             
                        }
         | 
| 647 631 | 
             
                      },
         | 
| 648 632 | 
             
                      "beginCaptures": {
         | 
| 649 | 
            -
                        " | 
| 633 | 
            +
                        "0": {
         | 
| 650 634 | 
             
                          "name": "meta.brace.square.js"
         | 
| 651 635 | 
             
                        }
         | 
| 652 636 | 
             
                      },
         | 
| @@ -661,15 +645,15 @@ | |
| 661 645 | 
             
                "curly-brackets": {
         | 
| 662 646 | 
             
                  "patterns": [
         | 
| 663 647 | 
             
                    {
         | 
| 664 | 
            -
                      "begin": "\\s | 
| 665 | 
            -
                      "end": "\\s | 
| 648 | 
            +
                      "begin": "\\s*+\\{",
         | 
| 649 | 
            +
                      "end": "\\s*\\}",
         | 
| 666 650 | 
             
                      "endCaptures": {
         | 
| 667 | 
            -
                        " | 
| 651 | 
            +
                        "0": {
         | 
| 668 652 | 
             
                          "name": "meta.brace.curly.js"
         | 
| 669 653 | 
             
                        }
         | 
| 670 654 | 
             
                      },
         | 
| 671 655 | 
             
                      "beginCaptures": {
         | 
| 672 | 
            -
                        " | 
| 656 | 
            +
                        "0": {
         | 
| 673 657 | 
             
                          "name": "meta.brace.curly.js"
         | 
| 674 658 | 
             
                        }
         | 
| 675 659 | 
             
                      },
         | 
| @@ -702,21 +686,15 @@ | |
| 702 686 | 
             
                },
         | 
| 703 687 | 
             
                "comments": {
         | 
| 704 688 | 
             
                  "patterns": [
         | 
| 705 | 
            -
                    {
         | 
| 706 | 
            -
                      "include": "#flowtype-comments"
         | 
| 707 | 
            -
                    },
         | 
| 708 689 | 
             
                    {
         | 
| 709 690 | 
             
                      "include": "#special-comments-conditional-compilation"
         | 
| 710 691 | 
             
                    },
         | 
| 711 692 | 
             
                    {
         | 
| 712 | 
            -
                      " | 
| 713 | 
            -
                      "begin": "\\s | 
| 714 | 
            -
                      "end": " | 
| 693 | 
            +
                      "name": "comment.block.documentation.js",
         | 
| 694 | 
            +
                      "begin": "\\s*+/\\*\\*(?!/)",
         | 
| 695 | 
            +
                      "end": "\\s*\\*/",
         | 
| 715 696 | 
             
                      "captures": {
         | 
| 716 | 
            -
                        " | 
| 717 | 
            -
                          "name": "comment.block.documentation.js"
         | 
| 718 | 
            -
                        },
         | 
| 719 | 
            -
                        "2": {
         | 
| 697 | 
            +
                        "0": {
         | 
| 720 698 | 
             
                          "name": "punctuation.definition.comment.js"
         | 
| 721 699 | 
             
                        }
         | 
| 722 700 | 
             
                      },
         | 
| @@ -727,45 +705,32 @@ | |
| 727 705 | 
             
                      ]
         | 
| 728 706 | 
             
                    },
         | 
| 729 707 | 
             
                    {
         | 
| 730 | 
            -
                      " | 
| 731 | 
            -
                      "begin": "\\s | 
| 732 | 
            -
                      "end": " | 
| 708 | 
            +
                      "name": "comment.block.js",
         | 
| 709 | 
            +
                      "begin": "\\s*+/\\*",
         | 
| 710 | 
            +
                      "end": "\\s*\\*/",
         | 
| 733 711 | 
             
                      "captures": {
         | 
| 734 | 
            -
                        " | 
| 735 | 
            -
                          "name": "comment.block.js"
         | 
| 736 | 
            -
                        },
         | 
| 737 | 
            -
                        "2": {
         | 
| 712 | 
            +
                        "0": {
         | 
| 738 713 | 
             
                          "name": "punctuation.definition.comment.js"
         | 
| 739 714 | 
             
                        }
         | 
| 740 715 | 
             
                      }
         | 
| 741 716 | 
             
                    },
         | 
| 742 717 | 
             
                    {
         | 
| 743 | 
            -
                      " | 
| 718 | 
            +
                      "name": "comment.block.html.js",
         | 
| 719 | 
            +
                      "match": "\\s*+(<!--|-->)",
         | 
| 744 720 | 
             
                      "captures": {
         | 
| 745 | 
            -
                        " | 
| 746 | 
            -
                          "name": "comment.block.html.js"
         | 
| 747 | 
            -
                        },
         | 
| 748 | 
            -
                        "2": {
         | 
| 721 | 
            +
                        "0": {
         | 
| 749 722 | 
             
                          "name": "punctuation.definition.comment.js"
         | 
| 750 723 | 
             
                        }
         | 
| 751 724 | 
             
                      }
         | 
| 752 725 | 
             
                    },
         | 
| 753 726 | 
             
                    {
         | 
| 754 | 
            -
                      " | 
| 755 | 
            -
                      "begin": "\\s*+( | 
| 727 | 
            +
                      "name": "comment.line.double-slash.js",
         | 
| 728 | 
            +
                      "begin": "\\s*+(//)",
         | 
| 756 729 | 
             
                      "end": "\\s*$",
         | 
| 757 730 | 
             
                      "beginCaptures": {
         | 
| 758 731 | 
             
                        "1": {
         | 
| 759 | 
            -
                          "name": "comment.line.double-slash.js"
         | 
| 760 | 
            -
                        },
         | 
| 761 | 
            -
                        "2": {
         | 
| 762 732 | 
             
                          "name": "punctuation.definition.comment.js"
         | 
| 763 733 | 
             
                        }
         | 
| 764 | 
            -
                      },
         | 
| 765 | 
            -
                      "endCaptures": {
         | 
| 766 | 
            -
                        "0": {
         | 
| 767 | 
            -
                          "name": "comment.line.double-slash.js"
         | 
| 768 | 
            -
                        }
         | 
| 769 734 | 
             
                      }
         | 
| 770 735 | 
             
                    },
         | 
| 771 736 | 
             
                    {
         | 
| @@ -782,14 +747,11 @@ | |
| 782 747 | 
             
                "special-comments-conditional-compilation": {
         | 
| 783 748 | 
             
                  "patterns": [
         | 
| 784 749 | 
             
                    {
         | 
| 785 | 
            -
                      " | 
| 786 | 
            -
                      "begin": "\\s | 
| 750 | 
            +
                      "name": "comment.block.conditional.js",
         | 
| 751 | 
            +
                      "begin": "\\s*+/\\*(?=@)",
         | 
| 787 752 | 
             
                      "end": "\\s*\\*/",
         | 
| 788 753 | 
             
                      "captures": {
         | 
| 789 | 
            -
                        " | 
| 790 | 
            -
                          "name": "comment.block.conditional.js"
         | 
| 791 | 
            -
                        },
         | 
| 792 | 
            -
                        "2": {
         | 
| 754 | 
            +
                        "0": {
         | 
| 793 755 | 
             
                          "name": "punctuation.definition.comment.js"
         | 
| 794 756 | 
             
                        }
         | 
| 795 757 | 
             
                      },
         | 
| @@ -844,24 +806,16 @@ | |
| 844 806 | 
             
                "literal-semi-colon": {
         | 
| 845 807 | 
             
                  "patterns": [
         | 
| 846 808 | 
             
                    {
         | 
| 847 | 
            -
                      " | 
| 848 | 
            -
                      " | 
| 849 | 
            -
                        "1": {
         | 
| 850 | 
            -
                          "name": "punctuation.terminator.statement.js"
         | 
| 851 | 
            -
                        }
         | 
| 852 | 
            -
                      }
         | 
| 809 | 
            +
                      "name": "punctuation.terminator.statement.js",
         | 
| 810 | 
            +
                      "match": "\\s*+\\;"
         | 
| 853 811 | 
             
                    }
         | 
| 854 812 | 
             
                  ]
         | 
| 855 813 | 
             
                },
         | 
| 856 814 | 
             
                "literal-comma": {
         | 
| 857 815 | 
             
                  "patterns": [
         | 
| 858 816 | 
             
                    {
         | 
| 859 | 
            -
                      " | 
| 860 | 
            -
                      " | 
| 861 | 
            -
                        "1": {
         | 
| 862 | 
            -
                          "name": "meta.delimiter.comma.js"
         | 
| 863 | 
            -
                        }
         | 
| 864 | 
            -
                      }
         | 
| 817 | 
            +
                      "name": "meta.delimiter.comma.js",
         | 
| 818 | 
            +
                      "match": "\\s*+,"
         | 
| 865 819 | 
             
                    }
         | 
| 866 820 | 
             
                  ]
         | 
| 867 821 | 
             
                },
         | 
| @@ -869,7 +823,7 @@ | |
| 869 823 | 
             
                  "patterns": [
         | 
| 870 824 | 
             
                    {
         | 
| 871 825 | 
             
                      "begin": "\\s*+(?<!\\.)\\b(const|let|var)\\b",
         | 
| 872 | 
            -
                      "end": "\\s*( | 
| 826 | 
            +
                      "end": "\\s*(?=\\;|\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|})",
         | 
| 873 827 | 
             
                      "beginCaptures": {
         | 
| 874 828 | 
             
                        "1": {
         | 
| 875 829 | 
             
                          "name": "storage.type.js"
         | 
| @@ -879,7 +833,7 @@ | |
| 879 833 | 
             
                        {
         | 
| 880 834 | 
             
                          "comment": "other variables",
         | 
| 881 835 | 
             
                          "begin": "\\s*",
         | 
| 882 | 
            -
                          "end": "\\s*((,)|(?=( | 
| 836 | 
            +
                          "end": "\\s*((,)|(?=(\\;)|\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|}))",
         | 
| 883 837 | 
             
                          "endCaptures": {
         | 
| 884 838 | 
             
                            "2": {
         | 
| 885 839 | 
             
                              "name": "punctuation.terminator.statement.js"
         | 
| @@ -901,7 +855,7 @@ | |
| 901 855 | 
             
                      "comment": "e.g. function play<T>(arg1, arg2) { }",
         | 
| 902 856 | 
             
                      "name": "meta.function.js",
         | 
| 903 857 | 
             
                      "begin": "\\s*+(?:\\b(async)\\b\\s+)?\\s*+(?:(?<=\\.\\.\\.)|(?<!\\.))(\\bfunction\\b)\\s*+(\\*?)\\s*+([_$a-zA-Z][$\\w]*)?\\s*+(?=\\(|<)",
         | 
| 904 | 
            -
                      "end": "\\s*( | 
| 858 | 
            +
                      "end": "\\s*(?=\\;|{|\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|})",
         | 
| 905 859 | 
             
                      "applyEndPatternLast": 1,
         | 
| 906 860 | 
             
                      "beginCaptures": {
         | 
| 907 861 | 
             
                        "1": {
         | 
| @@ -927,7 +881,7 @@ | |
| 927 881 | 
             
                      "comment": "e.g. play = function(arg1, arg2) { }",
         | 
| 928 882 | 
             
                      "name": "meta.function.js",
         | 
| 929 883 | 
             
                      "begin": "\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(?:(async)\\s+)?\\s*+((?<!\\.)\\bfunction\\b)\\s*+(\\*?)\\s*+([_$a-zA-Z][$\\w]*)?\\s*+(?=\\(|<)",
         | 
| 930 | 
            -
                      "end": "\\s*( | 
| 884 | 
            +
                      "end": "\\s*(?=\\;|{|\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|})",
         | 
| 931 885 | 
             
                      "applyEndPatternLast": 1,
         | 
| 932 886 | 
             
                      "beginCaptures": {
         | 
| 933 887 | 
             
                        "1": {
         | 
| @@ -959,7 +913,7 @@ | |
| 959 913 | 
             
                      "comment": "e.g. Sound.prototype.play = function(arg1, arg2) { }",
         | 
| 960 914 | 
             
                      "name": "meta.prototype.function.js",
         | 
| 961 915 | 
             
                      "begin": "\\s*+(\\b_?[A-Z][$\\w]*)?(\\.)(prototype)(\\.)([_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(?:(async)\\s+)?\\s*+((?<!\\.)\\bfunction\\b)\\s*+(\\*?)\\s*+([_$a-zA-Z][$\\w]*)?\\s*+(?=\\(|<)",
         | 
| 962 | 
            -
                      "end": "\\s*( | 
| 916 | 
            +
                      "end": "\\s*(?=\\;|{|\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|})",
         | 
| 963 917 | 
             
                      "applyEndPatternLast": 1,
         | 
| 964 918 | 
             
                      "beginCaptures": {
         | 
| 965 919 | 
             
                        "1": {
         | 
| @@ -1003,7 +957,7 @@ | |
| 1003 957 | 
             
                      "comment": "e.g. Sound.play = function(arg1, arg2) { }",
         | 
| 1004 958 | 
             
                      "name": "meta.function.static.js",
         | 
| 1005 959 | 
             
                      "begin": "\\s*+(\\b_?[A-Z][$\\w]*)?(\\.)([_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(?:(async)\\s+)?\\s*+((?<!\\.)\\bfunction\\b)\\s*+(\\*?)\\s*+([_$a-zA-Z][$\\w]*)?\\s*+(?=\\(|<)",
         | 
| 1006 | 
            -
                      "end": "\\s*( | 
| 960 | 
            +
                      "end": "\\s*(?=\\;|{|\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|})",
         | 
| 1007 961 | 
             
                      "applyEndPatternLast": 1,
         | 
| 1008 962 | 
             
                      "beginCaptures": {
         | 
| 1009 963 | 
             
                        "1": {
         | 
| @@ -1123,9 +1077,6 @@ | |
| 1123 1077 | 
             
                        }
         | 
| 1124 1078 | 
             
                      },
         | 
| 1125 1079 | 
             
                      "patterns": [
         | 
| 1126 | 
            -
                        {
         | 
| 1127 | 
            -
                          "include": "#html-template"
         | 
| 1128 | 
            -
                        },
         | 
| 1129 1080 | 
             
                        {
         | 
| 1130 1081 | 
             
                          "include": "#literal-function-labels"
         | 
| 1131 1082 | 
             
                        },
         | 
| @@ -1154,71 +1105,36 @@ | |
| 1154 1105 | 
             
                "literal-operators": {
         | 
| 1155 1106 | 
             
                  "patterns": [
         | 
| 1156 1107 | 
             
                    {
         | 
| 1157 | 
            -
                      " | 
| 1158 | 
            -
             | 
| 1159 | 
            -
                    {
         | 
| 1160 | 
            -
                      "match": "\\s*+(?<!\\.)\\b(delete|in|instanceof|new|of|typeof|void|with)\\b",
         | 
| 1161 | 
            -
                      "captures": {
         | 
| 1162 | 
            -
                        "1": {
         | 
| 1163 | 
            -
                          "name": "keyword.operator.js"
         | 
| 1164 | 
            -
                        }
         | 
| 1165 | 
            -
                      }
         | 
| 1108 | 
            +
                      "name": "keyword.operator.js",
         | 
| 1109 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(delete|in|instanceof|new|of|typeof|void|with)\\b"
         | 
| 1166 1110 | 
             
                    },
         | 
| 1167 1111 | 
             
                    {
         | 
| 1168 | 
            -
                      " | 
| 1169 | 
            -
                      " | 
| 1170 | 
            -
                        "1": {
         | 
| 1171 | 
            -
                          "name": "keyword.operator.logical.js"
         | 
| 1172 | 
            -
                        }
         | 
| 1173 | 
            -
                      }
         | 
| 1112 | 
            +
                      "name": "keyword.operator.logical.js",
         | 
| 1113 | 
            +
                      "match": "\\s*+(!(?!=)|&&|\\|\\|)"
         | 
| 1174 1114 | 
             
                    },
         | 
| 1175 1115 | 
             
                    {
         | 
| 1176 | 
            -
                      " | 
| 1177 | 
            -
                      " | 
| 1178 | 
            -
                        "1": {
         | 
| 1179 | 
            -
                          "name": "keyword.operator.assignment.js"
         | 
| 1180 | 
            -
                        }
         | 
| 1181 | 
            -
                      }
         | 
| 1116 | 
            +
                      "name": "keyword.operator.assignment.js",
         | 
| 1117 | 
            +
                      "match": "\\s*+(=(?!(=|>)))"
         | 
| 1182 1118 | 
             
                    },
         | 
| 1183 1119 | 
             
                    {
         | 
| 1184 | 
            -
                      " | 
| 1185 | 
            -
                      " | 
| 1186 | 
            -
                        "1": {
         | 
| 1187 | 
            -
                          "name": "keyword.operator.assignment.augmented.js"
         | 
| 1188 | 
            -
                        }
         | 
| 1189 | 
            -
                      }
         | 
| 1120 | 
            +
                      "name": "keyword.operator.assignment.augmented.js",
         | 
| 1121 | 
            +
                      "match": "\\s*+(%=|&=|\\*=|\\+=|-=|/=|\\^=|\\|=|<<=|>>=|>>>=)"
         | 
| 1190 1122 | 
             
                    },
         | 
| 1191 1123 | 
             
                    {
         | 
| 1192 | 
            -
                      " | 
| 1193 | 
            -
                      " | 
| 1194 | 
            -
                        "1": {
         | 
| 1195 | 
            -
                          "name": "keyword.operator.bitwise.js"
         | 
| 1196 | 
            -
                        }
         | 
| 1197 | 
            -
                      }
         | 
| 1124 | 
            +
                      "name": "keyword.operator.bitwise.js",
         | 
| 1125 | 
            +
                      "match": "\\s*+(~|<<|>>>|>>|&|\\^|\\|)"
         | 
| 1198 1126 | 
             
                    },
         | 
| 1199 1127 | 
             
                    {
         | 
| 1200 | 
            -
                      " | 
| 1201 | 
            -
                      " | 
| 1202 | 
            -
                        "1": {
         | 
| 1203 | 
            -
                          "name": "keyword.operator.relational.js"
         | 
| 1204 | 
            -
                        }
         | 
| 1205 | 
            -
                      }
         | 
| 1128 | 
            +
                      "name": "keyword.operator.relational.js",
         | 
| 1129 | 
            +
                      "match": "\\s*+(<=|>=|<|>)"
         | 
| 1206 1130 | 
             
                    },
         | 
| 1207 1131 | 
             
                    {
         | 
| 1208 | 
            -
                      " | 
| 1209 | 
            -
                      " | 
| 1210 | 
            -
                        "1": {
         | 
| 1211 | 
            -
                          "name": "keyword.operator.comparison.js"
         | 
| 1212 | 
            -
                        }
         | 
| 1213 | 
            -
                      }
         | 
| 1132 | 
            +
                      "name": "keyword.operator.comparison.js",
         | 
| 1133 | 
            +
                      "match": "\\s*+(===|!==|==|!=)"
         | 
| 1214 1134 | 
             
                    },
         | 
| 1215 1135 | 
             
                    {
         | 
| 1216 | 
            -
                      " | 
| 1217 | 
            -
                      " | 
| 1218 | 
            -
                        "1": {
         | 
| 1219 | 
            -
                          "name": "keyword.operator.arithmetic.js"
         | 
| 1220 | 
            -
                        }
         | 
| 1221 | 
            -
                      }
         | 
| 1136 | 
            +
                      "name": "keyword.operator.arithmetic.js",
         | 
| 1137 | 
            +
                      "match": "\\s*+(--|\\+\\+|/(?!/|\\*)|%|\\*(?<!/\\*)|\\+|-)"
         | 
| 1222 1138 | 
             
                    },
         | 
| 1223 1139 | 
             
                    {
         | 
| 1224 1140 | 
             
                      "comment": "ternary operator - make sure end : is consumed to avoid mistake as flow type",
         | 
| @@ -1241,12 +1157,8 @@ | |
| 1241 1157 | 
             
                      ]
         | 
| 1242 1158 | 
             
                    },
         | 
| 1243 1159 | 
             
                    {
         | 
| 1244 | 
            -
                      " | 
| 1245 | 
            -
                      " | 
| 1246 | 
            -
                        "1": {
         | 
| 1247 | 
            -
                          "name": "keyword.operator.spread.js"
         | 
| 1248 | 
            -
                        }
         | 
| 1249 | 
            -
                      }
         | 
| 1160 | 
            +
                      "name": "keyword.operator.spread.js",
         | 
| 1161 | 
            +
                      "match": "\\s*+(?<!\\.)\\.\\.\\."
         | 
| 1250 1162 | 
             
                    },
         | 
| 1251 1163 | 
             
                    {
         | 
| 1252 1164 | 
             
                      "name": "keyword.operator.accessor.js",
         | 
| @@ -1340,84 +1252,56 @@ | |
| 1340 1252 | 
             
                "literal-language-constant": {
         | 
| 1341 1253 | 
             
                  "patterns": [
         | 
| 1342 1254 | 
             
                    {
         | 
| 1343 | 
            -
                      " | 
| 1344 | 
            -
                      " | 
| 1345 | 
            -
             | 
| 1346 | 
            -
             | 
| 1347 | 
            -
             | 
| 1348 | 
            -
             | 
| 1349 | 
            -
             | 
| 1350 | 
            -
             | 
| 1351 | 
            -
             | 
| 1352 | 
            -
             | 
| 1353 | 
            -
             | 
| 1354 | 
            -
             | 
| 1355 | 
            -
             | 
| 1356 | 
            -
             | 
| 1357 | 
            -
             | 
| 1358 | 
            -
             | 
| 1359 | 
            -
             | 
| 1360 | 
            -
                       | 
| 1255 | 
            +
                      "name": "constant.language.boolean.true.js",
         | 
| 1256 | 
            +
                      "match": "\\s*+(?<!\\.)\\btrue\\b"
         | 
| 1257 | 
            +
                    },
         | 
| 1258 | 
            +
                    {
         | 
| 1259 | 
            +
                      "name": "constant.language.boolean.false.js",
         | 
| 1260 | 
            +
                      "match": "\\s*+(?<!\\.)\\bfalse\\b"
         | 
| 1261 | 
            +
                    },
         | 
| 1262 | 
            +
                    {
         | 
| 1263 | 
            +
                      "name": "constant.language.null.js",
         | 
| 1264 | 
            +
                      "match": "\\s*+(?<!\\.)\\bnull\\b"
         | 
| 1265 | 
            +
                    },
         | 
| 1266 | 
            +
                    {
         | 
| 1267 | 
            +
                      "name": "constant.language.undefined.js",
         | 
| 1268 | 
            +
                      "match": "\\s*+(?<!\\.)\\bundefined\\b"
         | 
| 1269 | 
            +
                    },
         | 
| 1270 | 
            +
                    {
         | 
| 1271 | 
            +
                      "name": "constant.language.nan.js",
         | 
| 1272 | 
            +
                      "match": "\\s*+(?<!\\.)\\bNaN\\b"
         | 
| 1361 1273 | 
             
                    }
         | 
| 1362 1274 | 
             
                  ]
         | 
| 1363 1275 | 
             
                },
         | 
| 1364 1276 | 
             
                "support": {
         | 
| 1365 1277 | 
             
                  "patterns": [
         | 
| 1366 1278 | 
             
                    {
         | 
| 1367 | 
            -
                      " | 
| 1368 | 
            -
                      " | 
| 1369 | 
            -
                        "1": {
         | 
| 1370 | 
            -
                          "name": "support.class.builtin.js"
         | 
| 1371 | 
            -
                        }
         | 
| 1372 | 
            -
                      }
         | 
| 1279 | 
            +
                      "name": "support.class.builtin.js",
         | 
| 1280 | 
            +
                      "match": "\\s*+\\b(Array|ArrayBuffer|Boolean|DataView|Date|Float(32|64)Array|Int(8|16|32)Array|Function|GeneratorFunction|Map|Math|Number|Object|Promise|Proxy|RegExp|Set|String|Uint(8|16|32)Array|Uint8ClampedArray|WeakMap|WeakSet)\\b"
         | 
| 1373 1281 | 
             
                    },
         | 
| 1374 1282 | 
             
                    {
         | 
| 1375 | 
            -
                      " | 
| 1376 | 
            -
                      " | 
| 1377 | 
            -
                        "1": {
         | 
| 1378 | 
            -
                          "name": "support.function.js"
         | 
| 1379 | 
            -
                        }
         | 
| 1380 | 
            -
                      }
         | 
| 1283 | 
            +
                      "name": "support.function.js",
         | 
| 1284 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\\b"
         | 
| 1381 1285 | 
             
                    },
         | 
| 1382 1286 | 
             
                    {
         | 
| 1383 | 
            -
                      " | 
| 1384 | 
            -
                      " | 
| 1385 | 
            -
                        "1": {
         | 
| 1386 | 
            -
                          "name": "support.function.mutator.js"
         | 
| 1387 | 
            -
                        }
         | 
| 1388 | 
            -
                      }
         | 
| 1287 | 
            +
                      "name": "support.function.mutator.js",
         | 
| 1288 | 
            +
                      "match": "(?<=\\.)(shift|sort|splice|unshift|pop|push|reverse)\\b"
         | 
| 1389 1289 | 
             
                    },
         | 
| 1390 1290 | 
             
                    {
         | 
| 1391 | 
            -
                      " | 
| 1392 | 
            -
                      " | 
| 1393 | 
            -
                        "1": {
         | 
| 1394 | 
            -
                          "name": "support.class.error.js"
         | 
| 1395 | 
            -
                        }
         | 
| 1396 | 
            -
                      }
         | 
| 1291 | 
            +
                      "name": "support.class.error.js",
         | 
| 1292 | 
            +
                      "match": "\\s*+(?<!\\.)\\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\\b"
         | 
| 1397 1293 | 
             
                    },
         | 
| 1398 1294 | 
             
                    {
         | 
| 1399 | 
            -
                      " | 
| 1400 | 
            -
                      " | 
| 1401 | 
            -
                        "1": {
         | 
| 1402 | 
            -
                          "name": "keyword.other.js"
         | 
| 1403 | 
            -
                        }
         | 
| 1404 | 
            -
                      }
         | 
| 1295 | 
            +
                      "name": "keyword.other.js",
         | 
| 1296 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(debugger)\\b"
         | 
| 1405 1297 | 
             
                    },
         | 
| 1406 1298 | 
             
                    {
         | 
| 1407 | 
            -
                      " | 
| 1408 | 
            -
                      " | 
| 1409 | 
            -
                        "1": {
         | 
| 1410 | 
            -
                          "name": "support.type.object.dom.js"
         | 
| 1411 | 
            -
                        }
         | 
| 1412 | 
            -
                      }
         | 
| 1299 | 
            +
                      "name": "support.type.object.dom.js",
         | 
| 1300 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(document|window)\\b"
         | 
| 1413 1301 | 
             
                    },
         | 
| 1414 1302 | 
             
                    {
         | 
| 1415 | 
            -
                      " | 
| 1416 | 
            -
                      " | 
| 1417 | 
            -
                        "1": {
         | 
| 1418 | 
            -
                          "name": "support.constant.dom.js"
         | 
| 1419 | 
            -
                        }
         | 
| 1420 | 
            -
                      }
         | 
| 1303 | 
            +
                      "name": "support.constant.dom.js",
         | 
| 1304 | 
            +
                      "match": "\\s*+\\b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\\b"
         | 
| 1421 1305 | 
             
                    },
         | 
| 1422 1306 | 
             
                    {
         | 
| 1423 1307 | 
             
                      "match": "\\s*+(?<!\\.)\\b(console)(?:(\\.)(warn|info|log|error|time|timeEnd|assert))?\\b",
         | 
| @@ -1476,30 +1360,17 @@ | |
| 1476 1360 | 
             
                      }
         | 
| 1477 1361 | 
             
                    },
         | 
| 1478 1362 | 
             
                    {
         | 
| 1479 | 
            -
                      " | 
| 1480 | 
            -
                      " | 
| 1481 | 
            -
                        "1": {
         | 
| 1482 | 
            -
                          "name": "support.type.object.node.js"
         | 
| 1483 | 
            -
                        }
         | 
| 1484 | 
            -
                      }
         | 
| 1363 | 
            +
                      "name": "support.type.object.node.js",
         | 
| 1364 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(global|GLOBAL|root|__dirname|__filename)\\b"
         | 
| 1485 1365 | 
             
                    },
         | 
| 1486 1366 | 
             
                    {
         | 
| 1487 | 
            -
                      " | 
| 1488 | 
            -
                      " | 
| 1489 | 
            -
                        "1": {
         | 
| 1490 | 
            -
                          "name": "support.class.node.js"
         | 
| 1491 | 
            -
                        }
         | 
| 1492 | 
            -
                      }
         | 
| 1367 | 
            +
                      "name": "support.class.node.js",
         | 
| 1368 | 
            +
                      "match": "\\s*+\\b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\\b"
         | 
| 1493 1369 | 
             
                    },
         | 
| 1494 1370 | 
             
                    {
         | 
| 1495 | 
            -
                      " | 
| 1496 | 
            -
                      "begin": "\\s*+ | 
| 1497 | 
            -
                      "end": " | 
| 1498 | 
            -
                      "captures": {
         | 
| 1499 | 
            -
                        "1": {
         | 
| 1500 | 
            -
                          "name": "meta.tag.mustache.js"
         | 
| 1501 | 
            -
                        }
         | 
| 1502 | 
            -
                      }
         | 
| 1371 | 
            +
                      "name": "meta.tag.mustache.js",
         | 
| 1372 | 
            +
                      "begin": "\\s*+{{",
         | 
| 1373 | 
            +
                      "end": "\\s*}}"
         | 
| 1503 1374 | 
             
                    }
         | 
| 1504 1375 | 
             
                  ]
         | 
| 1505 1376 | 
             
                },
         | 
| @@ -1507,24 +1378,24 @@ | |
| 1507 1378 | 
             
                  "patterns": [
         | 
| 1508 1379 | 
             
                    {
         | 
| 1509 1380 | 
             
                      "comment": "Classes",
         | 
| 1510 | 
            -
                      "begin": "\\s*+(?<!\\.)\\b( | 
| 1381 | 
            +
                      "begin": "\\s*+(?<!\\.)\\b(class)\\s+",
         | 
| 1511 1382 | 
             
                      "end": "\\s*(?<=})",
         | 
| 1512 1383 | 
             
                      "beginCaptures": {
         | 
| 1513 | 
            -
                        " | 
| 1384 | 
            +
                        "0": {
         | 
| 1514 1385 | 
             
                          "name": "meta.class.js"
         | 
| 1515 1386 | 
             
                        },
         | 
| 1516 | 
            -
                        " | 
| 1387 | 
            +
                        "1": {
         | 
| 1517 1388 | 
             
                          "name": "storage.type.class.js"
         | 
| 1518 1389 | 
             
                        }
         | 
| 1519 1390 | 
             
                      },
         | 
| 1520 1391 | 
             
                      "patterns": [
         | 
| 1521 1392 | 
             
                        {
         | 
| 1522 | 
            -
                          "match": "\\s*+\\b( | 
| 1393 | 
            +
                          "match": "\\s*+\\b(extends)\\b\\s*+",
         | 
| 1523 1394 | 
             
                          "captures": {
         | 
| 1524 | 
            -
                            " | 
| 1395 | 
            +
                            "0": {
         | 
| 1525 1396 | 
             
                              "name": "meta.class.extends.js"
         | 
| 1526 1397 | 
             
                            },
         | 
| 1527 | 
            -
                            " | 
| 1398 | 
            +
                            "1": {
         | 
| 1528 1399 | 
             
                              "name": "storage.type.extends.js"
         | 
| 1529 1400 | 
             
                            }
         | 
| 1530 1401 | 
             
                          }
         | 
| @@ -1532,21 +1403,17 @@ | |
| 1532 1403 | 
             
                        {
         | 
| 1533 1404 | 
             
                          "comment": "look for classes names but dont assume uppercase start char",
         | 
| 1534 1405 | 
             
                          "match": "(?<!\\.)\\s*+([$_\\p{L}](?:[$\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}])*+)",
         | 
| 1535 | 
            -
                          " | 
| 1536 | 
            -
                            "1": {
         | 
| 1537 | 
            -
                              "name": "entity.name.class.js"
         | 
| 1538 | 
            -
                            }
         | 
| 1539 | 
            -
                          }
         | 
| 1406 | 
            +
                          "name": "entity.name.class.js"
         | 
| 1540 1407 | 
             
                        },
         | 
| 1541 1408 | 
             
                        {
         | 
| 1542 1409 | 
             
                          "include": "#flowtype-polymorphs"
         | 
| 1543 1410 | 
             
                        },
         | 
| 1544 1411 | 
             
                        {
         | 
| 1545 | 
            -
                          "begin": "\\s*+ | 
| 1412 | 
            +
                          "begin": "\\s*+{",
         | 
| 1546 1413 | 
             
                          "end": "\\s*(})",
         | 
| 1547 1414 | 
             
                          "contentName": "meta.class.body.js",
         | 
| 1548 1415 | 
             
                          "beginCaptures": {
         | 
| 1549 | 
            -
                            " | 
| 1416 | 
            +
                            "0": {
         | 
| 1550 1417 | 
             
                              "name": "punctuation.section.class.begin.js"
         | 
| 1551 1418 | 
             
                            }
         | 
| 1552 1419 | 
             
                          },
         | 
| @@ -1601,12 +1468,8 @@ | |
| 1601 1468 | 
             
                      ]
         | 
| 1602 1469 | 
             
                    },
         | 
| 1603 1470 | 
             
                    {
         | 
| 1604 | 
            -
                      "match": "\\s | 
| 1605 | 
            -
                      " | 
| 1606 | 
            -
                        "1": {
         | 
| 1607 | 
            -
                          "name": "storage.modifier.js"
         | 
| 1608 | 
            -
                        }
         | 
| 1609 | 
            -
                      }
         | 
| 1471 | 
            +
                      "match": "\\s*+\\b(?<!\\.)static\\b(?!\\.)",
         | 
| 1472 | 
            +
                      "name": "storage.modifier.js"
         | 
| 1610 1473 | 
             
                    },
         | 
| 1611 1474 | 
             
                    {
         | 
| 1612 1475 | 
             
                      "include": "#flowtype-variable"
         | 
| @@ -1692,60 +1555,32 @@ | |
| 1692 1555 | 
             
                "literal-language-variable": {
         | 
| 1693 1556 | 
             
                  "patterns": [
         | 
| 1694 1557 | 
             
                    {
         | 
| 1695 | 
            -
                      " | 
| 1696 | 
            -
                      " | 
| 1697 | 
            -
                        "1": {
         | 
| 1698 | 
            -
                          "name": "variable.language.arguments.js"
         | 
| 1699 | 
            -
                        }
         | 
| 1700 | 
            -
                      }
         | 
| 1558 | 
            +
                      "name": "variable.language.arguments.js",
         | 
| 1559 | 
            +
                      "match": "\\s*+(?<!(?<!\\.\\.)\\.)\\b(arguments)\\b"
         | 
| 1701 1560 | 
             
                    },
         | 
| 1702 1561 | 
             
                    {
         | 
| 1703 | 
            -
                      " | 
| 1704 | 
            -
                      " | 
| 1705 | 
            -
                        "1": {
         | 
| 1706 | 
            -
                          "name": "variable.language.super.js"
         | 
| 1707 | 
            -
                        }
         | 
| 1708 | 
            -
                      }
         | 
| 1562 | 
            +
                      "name": "variable.language.super.js",
         | 
| 1563 | 
            +
                      "match": "\\s*+(?<!(?<!\\.\\.)\\.)\\b(super)\\b\\s*+(?!\\()"
         | 
| 1709 1564 | 
             
                    },
         | 
| 1710 1565 | 
             
                    {
         | 
| 1711 | 
            -
                      " | 
| 1712 | 
            -
                      " | 
| 1713 | 
            -
                        "1": {
         | 
| 1714 | 
            -
                          "name": "variable.language.this.js"
         | 
| 1715 | 
            -
                        }
         | 
| 1716 | 
            -
                      }
         | 
| 1566 | 
            +
                      "name": "variable.language.this.js",
         | 
| 1567 | 
            +
                      "match": "\\s*+(?<!(?<!\\.\\.)\\.)\\b(this)\\b"
         | 
| 1717 1568 | 
             
                    },
         | 
| 1718 1569 | 
             
                    {
         | 
| 1719 | 
            -
                      " | 
| 1720 | 
            -
                      " | 
| 1721 | 
            -
                        "1": {
         | 
| 1722 | 
            -
                          "name": "variable.language.self.js"
         | 
| 1723 | 
            -
                        }
         | 
| 1724 | 
            -
                      }
         | 
| 1570 | 
            +
                      "name": "variable.language.self.js",
         | 
| 1571 | 
            +
                      "match": "\\s*+(?<!(?<!\\.\\.)\\.)\\b(self)\\b\\s*+(?!\\()"
         | 
| 1725 1572 | 
             
                    },
         | 
| 1726 1573 | 
             
                    {
         | 
| 1727 | 
            -
                      " | 
| 1728 | 
            -
                      " | 
| 1729 | 
            -
                        "1": {
         | 
| 1730 | 
            -
                          "name": "variable.language.proto.js"
         | 
| 1731 | 
            -
                        }
         | 
| 1732 | 
            -
                      }
         | 
| 1574 | 
            +
                      "name": "variable.language.proto.js",
         | 
| 1575 | 
            +
                      "match": "\\s*+(?<=\\.)\\b(__proto__)\\b"
         | 
| 1733 1576 | 
             
                    },
         | 
| 1734 1577 | 
             
                    {
         | 
| 1735 | 
            -
                      " | 
| 1736 | 
            -
                      " | 
| 1737 | 
            -
                        "1": {
         | 
| 1738 | 
            -
                          "name": "variable.language.constructor.js"
         | 
| 1739 | 
            -
                        }
         | 
| 1740 | 
            -
                      }
         | 
| 1578 | 
            +
                      "name": "variable.language.constructor.js",
         | 
| 1579 | 
            +
                      "match": "\\s*+(?<=\\.)\\b(constructor)\\b\\s*+(?!\\()"
         | 
| 1741 1580 | 
             
                    },
         | 
| 1742 1581 | 
             
                    {
         | 
| 1743 | 
            -
                      " | 
| 1744 | 
            -
                      " | 
| 1745 | 
            -
                        "1": {
         | 
| 1746 | 
            -
                          "name": "variable.language.prototype.js"
         | 
| 1747 | 
            -
                        }
         | 
| 1748 | 
            -
                      }
         | 
| 1582 | 
            +
                      "name": "variable.language.prototype.js",
         | 
| 1583 | 
            +
                      "match": "\\s*+(?<=\\.)\\b(prototype)\\b"
         | 
| 1749 1584 | 
             
                    }
         | 
| 1750 1585 | 
             
                  ]
         | 
| 1751 1586 | 
             
                },
         | 
| @@ -1761,7 +1596,7 @@ | |
| 1761 1596 | 
             
                    },
         | 
| 1762 1597 | 
             
                    {
         | 
| 1763 1598 | 
             
                      "name": "constant.character.escape",
         | 
| 1764 | 
            -
                      "match": "\\\\u(({[0-9a-fA-F]+\\})|[0-9a-fA-F]{4})"
         | 
| 1599 | 
            +
                      "match": "\\\\u((\\{[0-9a-fA-F]+\\})|[0-9a-fA-F]{4})"
         | 
| 1765 1600 | 
             
                    },
         | 
| 1766 1601 | 
             
                    {
         | 
| 1767 1602 | 
             
                      "name": "constant.character.escape",
         | 
| @@ -1822,7 +1657,7 @@ | |
| 1822 1657 | 
             
                    {
         | 
| 1823 1658 | 
             
                      "comment": "e.g. (args) => { }",
         | 
| 1824 1659 | 
             
                      "name": "meta.function.arrow.js",
         | 
| 1825 | 
            -
                      "begin": "\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(( | 
| 1660 | 
            +
                      "begin": "\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 1826 1661 | 
             
                      "end": "\\s*(=>)",
         | 
| 1827 1662 | 
             
                      "applyEndPatternLast": 1,
         | 
| 1828 1663 | 
             
                      "endCaptures": {
         | 
| @@ -1860,7 +1695,7 @@ | |
| 1860 1695 | 
             
                    {
         | 
| 1861 1696 | 
             
                      "comment": "e.g. play = (args) => { }",
         | 
| 1862 1697 | 
             
                      "name": "meta.function.arrow.js",
         | 
| 1863 | 
            -
                      "begin": "\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(( | 
| 1698 | 
            +
                      "begin": "\\s*+(\\b[_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 1864 1699 | 
             
                      "end": "\\s*(=>)",
         | 
| 1865 1700 | 
             
                      "applyEndPatternLast": 1,
         | 
| 1866 1701 | 
             
                      "beginCaptures": {
         | 
| @@ -1910,7 +1745,7 @@ | |
| 1910 1745 | 
             
                    {
         | 
| 1911 1746 | 
             
                      "comment": "Sound.prototype.play = (args) => { }",
         | 
| 1912 1747 | 
             
                      "name": "meta.prototype.function.arrow.js",
         | 
| 1913 | 
            -
                      "begin": "\\s*+(\\b[A-Z][$\\w]*)?(\\.)(prototype)(\\.)([_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(( | 
| 1748 | 
            +
                      "begin": "\\s*+(\\b[A-Z][$\\w]*)?(\\.)(prototype)(\\.)([_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 1914 1749 | 
             
                      "end": "\\s*(=>)",
         | 
| 1915 1750 | 
             
                      "applyEndPatternLast": 1,
         | 
| 1916 1751 | 
             
                      "beginCaptures": {
         | 
| @@ -1984,7 +1819,7 @@ | |
| 1984 1819 | 
             
                    {
         | 
| 1985 1820 | 
             
                      "comment": "e.g. Sound.play = (args) => { }",
         | 
| 1986 1821 | 
             
                      "name": "meta.function.static.arrow.js",
         | 
| 1987 | 
            -
                      "begin": "\\s*+(\\b_?[A-Z][$\\w]*)?(\\.)([_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(( | 
| 1822 | 
            +
                      "begin": "\\s*+(\\b_?[A-Z][$\\w]*)?(\\.)([_$a-zA-Z][$\\w]*)\\s*+(=)\\s*+(\\basync\\b)?\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?\\s*+(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*=>)",
         | 
| 1988 1823 | 
             
                      "end": "\\s*(=>)",
         | 
| 1989 1824 | 
             
                      "applyEndPatternLast": 1,
         | 
| 1990 1825 | 
             
                      "beginCaptures": {
         | 
| @@ -2051,7 +1886,7 @@ | |
| 2051 1886 | 
             
                    {
         | 
| 2052 1887 | 
             
                      "comment": "e.g. play<T,T>(arg1, arg2): Type<T> { }",
         | 
| 2053 1888 | 
             
                      "name": "meta.function.method.js",
         | 
| 2054 | 
            -
                      "begin": "(?:^|;)\\s*+(\\bstatic\\b)?\\s*+(\\basync\\b)?\\s*+(\\*?)\\s*+(?<!\\.)(?!\\b(break|case|catch|continue|do|else|finally|for|function|if|export|import|package|return|switch|throw|try|while|with)\\b)([_$a-zA-Z][$\\w]*)\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+({(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s | 
| 1889 | 
            +
                      "begin": "(?:^|;)\\s*+(\\bstatic\\b)?\\s*+(\\basync\\b)?\\s*+(\\*?)\\s*+(?<!\\.)(?!\\b(break|case|catch|continue|do|else|finally|for|function|if|export|import|package|return|switch|throw|try|while|with)\\b)([_$a-zA-Z][$\\w]*)\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*+(?:\\s*:(\\s*+(&|\\|)?(\\s*+[$_a-zA-Z0-9]+(<(?:(?>[^<>]+)|\\g<-1>)*>)?|\\s*+(\\{(?:(?>[^{}]+)|\\g<-1>)*\\})|\\s*+(\\[(?:(?>[^\\[\\]]+)|\\g<-1>)*\\])|\\s*+(\\s*([\"']).*?\\k<-1>(?<!\\\\.))|\\s*[x0-9A-Fa-f]+))*+)*\\s*\\{)",
         | 
| 2055 1890 | 
             
                      "end": "\\s*(?=.)",
         | 
| 2056 1891 | 
             
                      "applyEndPatternLast": 1,
         | 
| 2057 1892 | 
             
                      "beginCaptures": {
         | 
| @@ -2107,7 +1942,7 @@ | |
| 2107 1942 | 
             
                    {
         | 
| 2108 1943 | 
             
                      "comment": "e.g. 'play'<T,T>(arg1, arg2): Type<T> { }",
         | 
| 2109 1944 | 
             
                      "name": "meta.function.method.js",
         | 
| 2110 | 
            -
                      "begin": "(?<!:)\\s*+(\\bstatic\\b)?\\s*+(\\basync\\b)?\\s*+(\\*?)\\s*+(?<!\\.)((' | 
| 1945 | 
            +
                      "begin": "(?<!:)\\s*+(\\bstatic\\b)?\\s*+(\\basync\\b)?\\s*+(\\*?)\\s*+(?<!\\.)(('|\\\")([^\"']*)(\\k<-3>))\\s*+(?=(<(?:(?>[^<>]+)|\\g<-1>)*>)?(\\())",
         | 
| 2111 1946 | 
             
                      "end": "\\s*(?=.)",
         | 
| 2112 1947 | 
             
                      "applyEndPatternLast": 1,
         | 
| 2113 1948 | 
             
                      "beginCaptures": {
         | 
| @@ -2305,209 +2140,16 @@ | |
| 2305 2140 | 
             
                "literal-module": {
         | 
| 2306 2141 | 
             
                  "patterns": [
         | 
| 2307 2142 | 
             
                    {
         | 
| 2308 | 
            -
                      " | 
| 2143 | 
            +
                      "name": "keyword.control.module.js",
         | 
| 2144 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(import|export|default)\\b"
         | 
| 2309 2145 | 
             
                    },
         | 
| 2310 2146 | 
             
                    {
         | 
| 2311 | 
            -
                      " | 
| 2147 | 
            +
                      "name": "keyword.control.module.reference.js",
         | 
| 2148 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(from|as)\\b"
         | 
| 2312 2149 | 
             
                    }
         | 
| 2313 2150 | 
             
                  ]
         | 
| 2314 2151 | 
             
                },
         | 
| 2315 | 
            -
                "literal- | 
| 2316 | 
            -
                  "begin": "\\s*+(?<!\\.)\\b(import)(?!\\s*:)\\b",
         | 
| 2317 | 
            -
                  "end": "\\s*(?:(?:(\\bfrom\\b)?+\\s++(('|\")([^\"']*)(\\k<-3>)))|(?=;|^\\s*\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|}))",
         | 
| 2318 | 
            -
                  "beginCaptures": {
         | 
| 2319 | 
            -
                    "1": {
         | 
| 2320 | 
            -
                      "name": "keyword.control.module.js"
         | 
| 2321 | 
            -
                    }
         | 
| 2322 | 
            -
                  },
         | 
| 2323 | 
            -
                  "endCaptures": {
         | 
| 2324 | 
            -
                    "1": {
         | 
| 2325 | 
            -
                      "name": "keyword.control.module.js"
         | 
| 2326 | 
            -
                    },
         | 
| 2327 | 
            -
                    "3": {
         | 
| 2328 | 
            -
                      "name": "punctuation.definition.string.begin.js"
         | 
| 2329 | 
            -
                    },
         | 
| 2330 | 
            -
                    "4": {
         | 
| 2331 | 
            -
                      "name": "string.quoted.module.js"
         | 
| 2332 | 
            -
                    },
         | 
| 2333 | 
            -
                    "5": {
         | 
| 2334 | 
            -
                      "name": "punctuation.definition.string.begin.js"
         | 
| 2335 | 
            -
                    }
         | 
| 2336 | 
            -
                  },
         | 
| 2337 | 
            -
                  "patterns": [
         | 
| 2338 | 
            -
                    {
         | 
| 2339 | 
            -
                      "match": "\\s*\\b(default)\\b",
         | 
| 2340 | 
            -
                      "captures": {
         | 
| 2341 | 
            -
                        "1": {
         | 
| 2342 | 
            -
                          "name": "keyword.control.module.js"
         | 
| 2343 | 
            -
                        }
         | 
| 2344 | 
            -
                      }
         | 
| 2345 | 
            -
                    },
         | 
| 2346 | 
            -
                    {
         | 
| 2347 | 
            -
                      "match": "\\s*\\b(typeof|type)\\b\\s++(?={|[$_a-zA-Z])(?!\\b(instanceof|in|as)\\b|,)",
         | 
| 2348 | 
            -
                      "captures": {
         | 
| 2349 | 
            -
                        "1": {
         | 
| 2350 | 
            -
                          "name": "keyword.other.typedef.flowtype"
         | 
| 2351 | 
            -
                        }
         | 
| 2352 | 
            -
                      }
         | 
| 2353 | 
            -
                    },
         | 
| 2354 | 
            -
                    {
         | 
| 2355 | 
            -
                      "name": "keyword.operator.module.all.js",
         | 
| 2356 | 
            -
                      "match": "\\*"
         | 
| 2357 | 
            -
                    },
         | 
| 2358 | 
            -
                    {
         | 
| 2359 | 
            -
                      "include": "#literal-module-as"
         | 
| 2360 | 
            -
                    },
         | 
| 2361 | 
            -
                    {
         | 
| 2362 | 
            -
                      "include": "#literal-module-brackets"
         | 
| 2363 | 
            -
                    },
         | 
| 2364 | 
            -
                    {
         | 
| 2365 | 
            -
                      "include": "#literal-variable"
         | 
| 2366 | 
            -
                    },
         | 
| 2367 | 
            -
                    {
         | 
| 2368 | 
            -
                      "include": "#comments"
         | 
| 2369 | 
            -
                    },
         | 
| 2370 | 
            -
                    {
         | 
| 2371 | 
            -
                      "include": "#literal-comma"
         | 
| 2372 | 
            -
                    }
         | 
| 2373 | 
            -
                  ]
         | 
| 2374 | 
            -
                },
         | 
| 2375 | 
            -
                "literal-module-export": {
         | 
| 2376 | 
            -
                  "patterns": [
         | 
| 2377 | 
            -
                    {
         | 
| 2378 | 
            -
                      "comment": "e.g. export let variable =, export type a=",
         | 
| 2379 | 
            -
                      "match": "\\s*+(?<!\\.)\\b(export)(?!\\s*:)\\b(?=\\s++(let|type|typeof)\\s++[$_a-zA-Z])",
         | 
| 2380 | 
            -
                      "captures": {
         | 
| 2381 | 
            -
                        "1": {
         | 
| 2382 | 
            -
                          "name": "keyword.control.module.js"
         | 
| 2383 | 
            -
                        }
         | 
| 2384 | 
            -
                      }
         | 
| 2385 | 
            -
                    },
         | 
| 2386 | 
            -
                    {
         | 
| 2387 | 
            -
                      "comment": "export {  or  export * or export var from module",
         | 
| 2388 | 
            -
                      "begin": "\\s*+(?<!\\.)\\b(export)\\b(?=\\s++({|\\*|[$_a-zA-Z][$_\\w]*(\\s++from\\b|\\s*,)))",
         | 
| 2389 | 
            -
                      "end": "\\s*(?:(?:(\\bfrom\\b)?+\\s++(('|\")([^\"']*)(\\k<-3>)))|(?=;|^\\s*\\b(if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b|\\)|}))",
         | 
| 2390 | 
            -
                      "beginCaptures": {
         | 
| 2391 | 
            -
                        "1": {
         | 
| 2392 | 
            -
                          "name": "keyword.control.module.js"
         | 
| 2393 | 
            -
                        }
         | 
| 2394 | 
            -
                      },
         | 
| 2395 | 
            -
                      "endCaptures": {
         | 
| 2396 | 
            -
                        "1": {
         | 
| 2397 | 
            -
                          "name": "keyword.control.module.js"
         | 
| 2398 | 
            -
                        },
         | 
| 2399 | 
            -
                        "3": {
         | 
| 2400 | 
            -
                          "name": "punctuation.definition.string.begin.js"
         | 
| 2401 | 
            -
                        },
         | 
| 2402 | 
            -
                        "4": {
         | 
| 2403 | 
            -
                          "name": "string.quoted.module.js"
         | 
| 2404 | 
            -
                        },
         | 
| 2405 | 
            -
                        "5": {
         | 
| 2406 | 
            -
                          "name": "punctuation.definition.string.begin.js"
         | 
| 2407 | 
            -
                        }
         | 
| 2408 | 
            -
                      },
         | 
| 2409 | 
            -
                      "patterns": [
         | 
| 2410 | 
            -
                        {
         | 
| 2411 | 
            -
                          "name": "keyword.operator.module.all.js",
         | 
| 2412 | 
            -
                          "match": "\\*"
         | 
| 2413 | 
            -
                        },
         | 
| 2414 | 
            -
                        {
         | 
| 2415 | 
            -
                          "include": "#literal-module-as"
         | 
| 2416 | 
            -
                        },
         | 
| 2417 | 
            -
                        {
         | 
| 2418 | 
            -
                          "include": "#literal-module-brackets"
         | 
| 2419 | 
            -
                        },
         | 
| 2420 | 
            -
                        {
         | 
| 2421 | 
            -
                          "include": "#literal-variable"
         | 
| 2422 | 
            -
                        },
         | 
| 2423 | 
            -
                        {
         | 
| 2424 | 
            -
                          "include": "#comments"
         | 
| 2425 | 
            -
                        },
         | 
| 2426 | 
            -
                        {
         | 
| 2427 | 
            -
                          "include": "#literal-comma"
         | 
| 2428 | 
            -
                        }
         | 
| 2429 | 
            -
                      ]
         | 
| 2430 | 
            -
                    },
         | 
| 2431 | 
            -
                    {
         | 
| 2432 | 
            -
                      "comment": "trap expressions among - export function* () {}",
         | 
| 2433 | 
            -
                      "match": "\\s*+(?<!\\.)\\b(export|default)(?!\\s*:)\\b",
         | 
| 2434 | 
            -
                      "captures": {
         | 
| 2435 | 
            -
                        "1": {
         | 
| 2436 | 
            -
                          "name": "keyword.control.module.js"
         | 
| 2437 | 
            -
                        }
         | 
| 2438 | 
            -
                      }
         | 
| 2439 | 
            -
                    }
         | 
| 2440 | 
            -
                  ]
         | 
| 2441 | 
            -
                },
         | 
| 2442 | 
            -
                "literal-module-as": {
         | 
| 2443 | 
            -
                  "match": "\\s*+(?:(\\*)|([$_a-zA-Z][$_\\w]*))\\s++(\\bas\\b)\\s++(?:(\\bdefault\\b)|([$_a-zA-Z][$_\\w]*))",
         | 
| 2444 | 
            -
                  "captures": {
         | 
| 2445 | 
            -
                    "1": {
         | 
| 2446 | 
            -
                      "name": "keyword.operator.module.all.js"
         | 
| 2447 | 
            -
                    },
         | 
| 2448 | 
            -
                    "2": {
         | 
| 2449 | 
            -
                      "name": "variable.other.readwrite.js"
         | 
| 2450 | 
            -
                    },
         | 
| 2451 | 
            -
                    "3": {
         | 
| 2452 | 
            -
                      "name": "keyword.control.module.reference.js"
         | 
| 2453 | 
            -
                    },
         | 
| 2454 | 
            -
                    "4": {
         | 
| 2455 | 
            -
                      "name": "keyword.control.module.js"
         | 
| 2456 | 
            -
                    },
         | 
| 2457 | 
            -
                    "5": {
         | 
| 2458 | 
            -
                      "name": "variable.other.readwrite.js"
         | 
| 2459 | 
            -
                    }
         | 
| 2460 | 
            -
                  }
         | 
| 2461 | 
            -
                },
         | 
| 2462 | 
            -
                "literal-module-brackets": {
         | 
| 2463 | 
            -
                  "patterns": [
         | 
| 2464 | 
            -
                    {
         | 
| 2465 | 
            -
                      "begin": "\\s*+(?:({)|(\\[))",
         | 
| 2466 | 
            -
                      "end": "\\s*(?:(\\})|(\\]))",
         | 
| 2467 | 
            -
                      "beginCaptures": {
         | 
| 2468 | 
            -
                        "1": {
         | 
| 2469 | 
            -
                          "name": "meta.brace.curly.js"
         | 
| 2470 | 
            -
                        },
         | 
| 2471 | 
            -
                        "2": {
         | 
| 2472 | 
            -
                          "name": "meta.brace.square.js"
         | 
| 2473 | 
            -
                        }
         | 
| 2474 | 
            -
                      },
         | 
| 2475 | 
            -
                      "endCaptures": {
         | 
| 2476 | 
            -
                        "1": {
         | 
| 2477 | 
            -
                          "name": "meta.brace.curly.js"
         | 
| 2478 | 
            -
                        },
         | 
| 2479 | 
            -
                        "2": {
         | 
| 2480 | 
            -
                          "name": "meta.brace.square.js"
         | 
| 2481 | 
            -
                        }
         | 
| 2482 | 
            -
                      },
         | 
| 2483 | 
            -
                      "patterns": [
         | 
| 2484 | 
            -
                        {
         | 
| 2485 | 
            -
                          "name": "keyword.operator.module.all.js",
         | 
| 2486 | 
            -
                          "match": "\\*"
         | 
| 2487 | 
            -
                        },
         | 
| 2488 | 
            -
                        {
         | 
| 2489 | 
            -
                          "include": "#literal-module-as"
         | 
| 2490 | 
            -
                        },
         | 
| 2491 | 
            -
                        {
         | 
| 2492 | 
            -
                          "include": "#literal-module-brackets"
         | 
| 2493 | 
            -
                        },
         | 
| 2494 | 
            -
                        {
         | 
| 2495 | 
            -
                          "include": "#literal-variable"
         | 
| 2496 | 
            -
                        },
         | 
| 2497 | 
            -
                        {
         | 
| 2498 | 
            -
                          "include": "#literal-string"
         | 
| 2499 | 
            -
                        },
         | 
| 2500 | 
            -
                        {
         | 
| 2501 | 
            -
                          "include": "#comments"
         | 
| 2502 | 
            -
                        },
         | 
| 2503 | 
            -
                        {
         | 
| 2504 | 
            -
                          "include": "#literal-comma"
         | 
| 2505 | 
            -
                        }
         | 
| 2506 | 
            -
                      ]
         | 
| 2507 | 
            -
                    }
         | 
| 2508 | 
            -
                  ]
         | 
| 2509 | 
            -
                },
         | 
| 2510 | 
            -
                "literal-variable": {
         | 
| 2152 | 
            +
                "literal-variable": {
         | 
| 2511 2153 | 
             
                  "patterns": [
         | 
| 2512 2154 | 
             
                    {
         | 
| 2513 2155 | 
             
                      "comment": "e.g. CONSTANT",
         | 
| @@ -2614,24 +2256,11 @@ | |
| 2614 2256 | 
             
                    }
         | 
| 2615 2257 | 
             
                  ]
         | 
| 2616 2258 | 
             
                },
         | 
| 2617 | 
            -
                "es7-function-bind": {
         | 
| 2618 | 
            -
                  "patterns": [
         | 
| 2619 | 
            -
                    {
         | 
| 2620 | 
            -
                      "comment": "https://github.com/zenparsing/es-function-bind#examples",
         | 
| 2621 | 
            -
                      "match": "\\s*(::)",
         | 
| 2622 | 
            -
                      "captures": {
         | 
| 2623 | 
            -
                        "1": {
         | 
| 2624 | 
            -
                          "name": "keyword.operator.accessor.js"
         | 
| 2625 | 
            -
                        }
         | 
| 2626 | 
            -
                      }
         | 
| 2627 | 
            -
                    }
         | 
| 2628 | 
            -
                  ]
         | 
| 2629 | 
            -
                },
         | 
| 2630 2259 | 
             
                "jsx": {
         | 
| 2631 2260 | 
             
                  "comment": "Avoid < operator expressions as best we can using Zertosh's regex",
         | 
| 2632 2261 | 
             
                  "patterns": [
         | 
| 2633 2262 | 
             
                    {
         | 
| 2634 | 
            -
                      "begin": "(?<=\\( | 
| 2263 | 
            +
                      "begin": "(?<=\\(|\\{|\\[|,|&&|\\|\\||\\?|:|=|=>|\\Wreturn|^return|\\Wdefault|^)\\s*+(?=<[$_\\p{L}])",
         | 
| 2635 2264 | 
             
                      "end": "(?=.)",
         | 
| 2636 2265 | 
             
                      "applyEndPatternLast": 1,
         | 
| 2637 2266 | 
             
                      "patterns": [
         | 
| @@ -2647,7 +2276,6 @@ | |
| 2647 2276 | 
             
                    {
         | 
| 2648 2277 | 
             
                      "comment": "Tags that end > are trapped in #jsx-tag-termination",
         | 
| 2649 2278 | 
             
                      "name": "meta.tag.jsx",
         | 
| 2650 | 
            -
                      "contentName": "JSXAttrs",
         | 
| 2651 2279 | 
             
                      "begin": "\\s*+(<)((\\p{Ll}[\\p{Ll}0-9]*)|((?:[$_\\p{L}\\p{Nl}][$_\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}-]*?:)?+(?:[$_\\p{L}\\p{Nl}](?:[$_\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}\\.-](?<!\\.\\.))*+)+))(?=[ />\\s])(?![:])(?<!\\.|:)",
         | 
| 2652 2280 | 
             
                      "end": "\\s*(?<=</)((\\4)|\\2)(>)|(/>)|((?<=</)[\\S ]*?)>",
         | 
| 2653 2281 | 
             
                      "beginCaptures": {
         | 
| @@ -2693,7 +2321,6 @@ | |
| 2693 2321 | 
             
                  "patterns": [
         | 
| 2694 2322 | 
             
                    {
         | 
| 2695 2323 | 
             
                      "comment": "uses non consuming search for </ in </tag>",
         | 
| 2696 | 
            -
                      "contentName": "JSXNested",
         | 
| 2697 2324 | 
             
                      "begin": "(>)",
         | 
| 2698 2325 | 
             
                      "end": "(</)",
         | 
| 2699 2326 | 
             
                      "beginCaptures": {
         | 
| @@ -2823,52 +2450,32 @@ | |
| 2823 2450 | 
             
                  ]
         | 
| 2824 2451 | 
             
                },
         | 
| 2825 2452 | 
             
                "jsx-evaluated-code": {
         | 
| 2453 | 
            +
                  "name": "meta.embedded.expression.js",
         | 
| 2454 | 
            +
                  "begin": "{",
         | 
| 2455 | 
            +
                  "end": "}",
         | 
| 2456 | 
            +
                  "beginCaptures": {
         | 
| 2457 | 
            +
                    "0": {
         | 
| 2458 | 
            +
                      "name": "punctuation.section.embedded.begin.jsx"
         | 
| 2459 | 
            +
                    }
         | 
| 2460 | 
            +
                  },
         | 
| 2461 | 
            +
                  "endCaptures": {
         | 
| 2462 | 
            +
                    "0": {
         | 
| 2463 | 
            +
                      "name": "punctuation.section.embedded.end.jsx"
         | 
| 2464 | 
            +
                    }
         | 
| 2465 | 
            +
                  },
         | 
| 2466 | 
            +
                  "contentName": "source.js.jsx",
         | 
| 2826 2467 | 
             
                  "patterns": [
         | 
| 2827 2468 | 
             
                    {
         | 
| 2828 | 
            -
                      " | 
| 2829 | 
            -
                      "contentName": "comment.embedded.jsx",
         | 
| 2830 | 
            -
                      "begin": "^\\s*({/\\*)",
         | 
| 2831 | 
            -
                      "end": "\\s*(\\*/})",
         | 
| 2832 | 
            -
                      "beginCaptures": {
         | 
| 2833 | 
            -
                        "1": {
         | 
| 2834 | 
            -
                          "name": "punctuation.section.embedded.begin.jsx"
         | 
| 2835 | 
            -
                        }
         | 
| 2836 | 
            -
                      },
         | 
| 2837 | 
            -
                      "endCaptures": {
         | 
| 2838 | 
            -
                        "1": {
         | 
| 2839 | 
            -
                          "name": "punctuation.section.embedded.end.jsx"
         | 
| 2840 | 
            -
                        }
         | 
| 2841 | 
            -
                      }
         | 
| 2469 | 
            +
                      "include": "#jsx-string-double-quoted"
         | 
| 2842 2470 | 
             
                    },
         | 
| 2843 2471 | 
             
                    {
         | 
| 2844 | 
            -
                      " | 
| 2845 | 
            -
             | 
| 2846 | 
            -
             | 
| 2847 | 
            -
                      " | 
| 2848 | 
            -
             | 
| 2849 | 
            -
             | 
| 2850 | 
            -
             | 
| 2851 | 
            -
                        }
         | 
| 2852 | 
            -
                      },
         | 
| 2853 | 
            -
                      "endCaptures": {
         | 
| 2854 | 
            -
                        "0": {
         | 
| 2855 | 
            -
                          "name": "punctuation.section.embedded.end.jsx"
         | 
| 2856 | 
            -
                        }
         | 
| 2857 | 
            -
                      },
         | 
| 2858 | 
            -
                      "patterns": [
         | 
| 2859 | 
            -
                        {
         | 
| 2860 | 
            -
                          "include": "#jsx-string-double-quoted"
         | 
| 2861 | 
            -
                        },
         | 
| 2862 | 
            -
                        {
         | 
| 2863 | 
            -
                          "include": "#jsx-string-single-quoted"
         | 
| 2864 | 
            -
                        },
         | 
| 2865 | 
            -
                        {
         | 
| 2866 | 
            -
                          "include": "#jsx-spread-attribute"
         | 
| 2867 | 
            -
                        },
         | 
| 2868 | 
            -
                        {
         | 
| 2869 | 
            -
                          "include": "#expression"
         | 
| 2870 | 
            -
                        }
         | 
| 2871 | 
            -
                      ]
         | 
| 2472 | 
            +
                      "include": "#jsx-string-single-quoted"
         | 
| 2473 | 
            +
                    },
         | 
| 2474 | 
            +
                    {
         | 
| 2475 | 
            +
                      "include": "#jsx-spread-attribute"
         | 
| 2476 | 
            +
                    },
         | 
| 2477 | 
            +
                    {
         | 
| 2478 | 
            +
                      "include": "#expression"
         | 
| 2872 2479 | 
             
                    }
         | 
| 2873 2480 | 
             
                  ]
         | 
| 2874 2481 | 
             
                },
         | 
| @@ -2928,32 +2535,10 @@ | |
| 2928 2535 | 
             
                        }
         | 
| 2929 2536 | 
             
                      },
         | 
| 2930 2537 | 
             
                      "patterns": [
         | 
| 2931 | 
            -
                        {
         | 
| 2932 | 
            -
                          "include": "#flowtype-predicate"
         | 
| 2933 | 
            -
                        },
         | 
| 2934 2538 | 
             
                        {
         | 
| 2935 2539 | 
             
                          "include": "#flowtype-parse-types"
         | 
| 2936 2540 | 
             
                        }
         | 
| 2937 2541 | 
             
                      ]
         | 
| 2938 | 
            -
                    },
         | 
| 2939 | 
            -
                    {
         | 
| 2940 | 
            -
                      "include": "#flowtype-predicate"
         | 
| 2941 | 
            -
                    }
         | 
| 2942 | 
            -
                  ]
         | 
| 2943 | 
            -
                },
         | 
| 2944 | 
            -
                "flowtype-predicate": {
         | 
| 2945 | 
            -
                  "comment": "flow predicate checks",
         | 
| 2946 | 
            -
                  "begin": "\\s*\\b(checks)\\b(?=(\\s*(\\((?:(?>[^()]+)|\\g<-1>)*\\))?)?\\s*(=>|{|;|$))",
         | 
| 2947 | 
            -
                  "end": "(?=.)",
         | 
| 2948 | 
            -
                  "applyEndPatternLast": 1,
         | 
| 2949 | 
            -
                  "beginCaptures": {
         | 
| 2950 | 
            -
                    "1": {
         | 
| 2951 | 
            -
                      "name": "entity.name.function.predicate.flowtype"
         | 
| 2952 | 
            -
                    }
         | 
| 2953 | 
            -
                  },
         | 
| 2954 | 
            -
                  "patterns": [
         | 
| 2955 | 
            -
                    {
         | 
| 2956 | 
            -
                      "include": "#round-brackets"
         | 
| 2957 2542 | 
             
                    }
         | 
| 2958 2543 | 
             
                  ]
         | 
| 2959 2544 | 
             
                },
         | 
| @@ -2961,7 +2546,7 @@ | |
| 2961 2546 | 
             
                  "patterns": [
         | 
| 2962 2547 | 
             
                    {
         | 
| 2963 2548 | 
             
                      "comment": "e.g. let a: ()=>null  =  function() {return null}",
         | 
| 2964 | 
            -
                      "match": "(?<!\\.)\\s*+([$_\\p{L}](?:[$.\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}])*+)\\s*+(\\??)\\s*+(?=:\\s*( | 
| 2549 | 
            +
                      "match": "(?<!\\.)\\s*+([$_\\p{L}](?:[$.\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}])*+)\\s*+(\\??)\\s*+(?=:\\s*(\\bFunction\\b|(\\((?:(?>[^()]+)|\\g<-1>)*\\))\\s*=>|\\(\\s*$))",
         | 
| 2965 2550 | 
             
                      "captures": {
         | 
| 2966 2551 | 
             
                        "1": {
         | 
| 2967 2552 | 
             
                          "name": "storage.type.function.js"
         | 
| @@ -2995,30 +2580,18 @@ | |
| 2995 2580 | 
             
                  "patterns": [
         | 
| 2996 2581 | 
             
                    {
         | 
| 2997 2582 | 
             
                      "comment": "flowtype optional arg/parameter e.g. protocol? : string",
         | 
| 2998 | 
            -
                      " | 
| 2999 | 
            -
                      " | 
| 3000 | 
            -
                        "1": {
         | 
| 3001 | 
            -
                          "name": "punctuation.type.flowtype"
         | 
| 3002 | 
            -
                        }
         | 
| 3003 | 
            -
                      }
         | 
| 2583 | 
            +
                      "name": "punctuation.type.flowtype",
         | 
| 2584 | 
            +
                      "match": "\\s*+\\?"
         | 
| 3004 2585 | 
             
                    },
         | 
| 3005 2586 | 
             
                    {
         | 
| 3006 2587 | 
             
                      "comment": "Type Unions |",
         | 
| 3007 | 
            -
                      " | 
| 3008 | 
            -
                      " | 
| 3009 | 
            -
                        "1": {
         | 
| 3010 | 
            -
                          "name": "kewyword.operator.union.flowtype"
         | 
| 3011 | 
            -
                        }
         | 
| 3012 | 
            -
                      }
         | 
| 2588 | 
            +
                      "name": "kewyword.operator.union.flowtype",
         | 
| 2589 | 
            +
                      "match": "\\s*+\\|"
         | 
| 3013 2590 | 
             
                    },
         | 
| 3014 2591 | 
             
                    {
         | 
| 3015 2592 | 
             
                      "comment": "intersection of types &",
         | 
| 3016 | 
            -
                      " | 
| 3017 | 
            -
                      " | 
| 3018 | 
            -
                        "1": {
         | 
| 3019 | 
            -
                          "name": "kewyword.operator.intersection.flowtype"
         | 
| 3020 | 
            -
                        }
         | 
| 3021 | 
            -
                      }
         | 
| 2593 | 
            +
                      "name": "kewyword.operator.intersection.flowtype",
         | 
| 2594 | 
            +
                      "match": "\\s*+\\&"
         | 
| 3022 2595 | 
             
                    },
         | 
| 3023 2596 | 
             
                    {
         | 
| 3024 2597 | 
             
                      "comment": "typed entity :",
         | 
| @@ -3041,7 +2614,7 @@ | |
| 3041 2614 | 
             
                    },
         | 
| 3042 2615 | 
             
                    {
         | 
| 3043 2616 | 
             
                      "comment": "An Iterator prefix?",
         | 
| 3044 | 
            -
                      "match": "\\s | 
| 2617 | 
            +
                      "match": "\\s*+@@"
         | 
| 3045 2618 | 
             
                    },
         | 
| 3046 2619 | 
             
                    {
         | 
| 3047 2620 | 
             
                      "begin": "\\s*+(=>)",
         | 
| @@ -3083,20 +2656,12 @@ | |
| 3083 2656 | 
             
                  "patterns": [
         | 
| 3084 2657 | 
             
                    {
         | 
| 3085 2658 | 
             
                      "comment": "Maybe types",
         | 
| 3086 | 
            -
                      " | 
| 3087 | 
            -
                      " | 
| 3088 | 
            -
                        "1": {
         | 
| 3089 | 
            -
                          "name": "keyword.operator.maybe.flowtype"
         | 
| 3090 | 
            -
                        }
         | 
| 3091 | 
            -
                      }
         | 
| 2659 | 
            +
                      "name": "keyword.operator.maybe.flowtype",
         | 
| 2660 | 
            +
                      "match": "\\s*+\\?"
         | 
| 3092 2661 | 
             
                    },
         | 
| 3093 2662 | 
             
                    {
         | 
| 3094 | 
            -
                      " | 
| 3095 | 
            -
                      " | 
| 3096 | 
            -
                        "1": {
         | 
| 3097 | 
            -
                          "name": "keyword.operator.flowtype"
         | 
| 3098 | 
            -
                        }
         | 
| 3099 | 
            -
                      }
         | 
| 2663 | 
            +
                      "name": "keyword.operator.flowtype",
         | 
| 2664 | 
            +
                      "match": "\\s*+\\btypeof\\b\\s*+"
         | 
| 3100 2665 | 
             
                    },
         | 
| 3101 2666 | 
             
                    {
         | 
| 3102 2667 | 
             
                      "comment": "primitive flowtypes",
         | 
| @@ -3139,40 +2704,23 @@ | |
| 3139 2704 | 
             
                    },
         | 
| 3140 2705 | 
             
                    {
         | 
| 3141 2706 | 
             
                      "comment": "Type Unions |",
         | 
| 3142 | 
            -
                      " | 
| 3143 | 
            -
                      " | 
| 3144 | 
            -
                        "1": {
         | 
| 3145 | 
            -
                          "name": "kewyword.operator.union.flowtype"
         | 
| 3146 | 
            -
                        }
         | 
| 3147 | 
            -
                      }
         | 
| 2707 | 
            +
                      "name": "kewyword.operator.union.flowtype",
         | 
| 2708 | 
            +
                      "match": "\\s*+\\|"
         | 
| 3148 2709 | 
             
                    },
         | 
| 3149 2710 | 
             
                    {
         | 
| 3150 2711 | 
             
                      "comment": "intersection of types &",
         | 
| 3151 | 
            -
                      " | 
| 3152 | 
            -
                      " | 
| 3153 | 
            -
                        "1": {
         | 
| 3154 | 
            -
                          "name": "kewyword.operator.intersection.flowtype"
         | 
| 3155 | 
            -
                        }
         | 
| 3156 | 
            -
                      }
         | 
| 2712 | 
            +
                      "name": "kewyword.operator.intersection.flowtype",
         | 
| 2713 | 
            +
                      "match": "\\s*+\\&"
         | 
| 3157 2714 | 
             
                    },
         | 
| 3158 2715 | 
             
                    {
         | 
| 3159 2716 | 
             
                      "comment": "as per React declares in flowtype github",
         | 
| 3160 | 
            -
                      " | 
| 3161 | 
            -
                      " | 
| 3162 | 
            -
                        "1": {
         | 
| 3163 | 
            -
                          "name": "kewyword.operator.existential.flowtype"
         | 
| 3164 | 
            -
                        }
         | 
| 3165 | 
            -
                      }
         | 
| 2717 | 
            +
                      "name": "kewyword.operator.existential.flowtype",
         | 
| 2718 | 
            +
                      "match": "\\s*+\\*"
         | 
| 3166 2719 | 
             
                    },
         | 
| 3167 2720 | 
             
                    {
         | 
| 3168 2721 | 
             
                      "comment": "types of type marker e.g. <T: number | string>",
         | 
| 3169 2722 | 
             
                      "name": "punctuation.type.flowtype",
         | 
| 3170 | 
            -
                      "match": "\\s*+(:)" | 
| 3171 | 
            -
                      "captures": {
         | 
| 3172 | 
            -
                        "1": {
         | 
| 3173 | 
            -
                          "name": "support.type.builtin.primitive.flowtype"
         | 
| 3174 | 
            -
                        }
         | 
| 3175 | 
            -
                      }
         | 
| 2723 | 
            +
                      "match": "\\s*+(:)"
         | 
| 3176 2724 | 
             
                    },
         | 
| 3177 2725 | 
             
                    {
         | 
| 3178 2726 | 
             
                      "comment": "call back with a form  ) => type",
         | 
| @@ -3220,9 +2768,6 @@ | |
| 3220 2768 | 
             
                        }
         | 
| 3221 2769 | 
             
                      },
         | 
| 3222 2770 | 
             
                      "patterns": [
         | 
| 3223 | 
            -
                        {
         | 
| 3224 | 
            -
                          "include": "#flowtype-polymorphs"
         | 
| 3225 | 
            -
                        },
         | 
| 3226 2771 | 
             
                        {
         | 
| 3227 2772 | 
             
                          "include": "#flowtype-variable"
         | 
| 3228 2773 | 
             
                        }
         | 
| @@ -3302,7 +2847,7 @@ | |
| 3302 2847 | 
             
                },
         | 
| 3303 2848 | 
             
                "flowtype-parse-objects": {
         | 
| 3304 2849 | 
             
                  "comment": "object literal flowtype  preceded by either => : | & ? symbols",
         | 
| 3305 | 
            -
                  "begin": "(?<=:|\\||&|\\?|=>|<)\\s*+({)",
         | 
| 2850 | 
            +
                  "begin": "(?<=:|\\||&|\\?|=>|<)\\s*+(\\{)",
         | 
| 3306 2851 | 
             
                  "end": "\\s*(\\})",
         | 
| 3307 2852 | 
             
                  "applyEndPatternLast": 1,
         | 
| 3308 2853 | 
             
                  "beginCaptures": {
         | 
| @@ -3324,13 +2869,19 @@ | |
| 3324 2869 | 
             
                "flowtype-object-property": {
         | 
| 3325 2870 | 
             
                  "patterns": [
         | 
| 3326 2871 | 
             
                    {
         | 
| 3327 | 
            -
                      " | 
| 3328 | 
            -
             | 
| 3329 | 
            -
             | 
| 3330 | 
            -
             | 
| 2872 | 
            +
                      "comment": "name of property which can be a string",
         | 
| 2873 | 
            +
                      "match": "\\s*+(((\"|').*?(?<=[^\\\\])\\k<-1>)|([$_\\p{L}](?:[$.\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}])*+))\\s*+(\\??)\\s*+(?=:)",
         | 
| 2874 | 
            +
                      "captures": {
         | 
| 2875 | 
            +
                        "1": {
         | 
| 2876 | 
            +
                          "name": "variable.other.property.flowtype"
         | 
| 2877 | 
            +
                        },
         | 
| 2878 | 
            +
                        "5": {
         | 
| 2879 | 
            +
                          "name": "keyword.operator.optional.parameter.flowtype"
         | 
| 2880 | 
            +
                        }
         | 
| 2881 | 
            +
                      }
         | 
| 3331 2882 | 
             
                    },
         | 
| 3332 2883 | 
             
                    {
         | 
| 3333 | 
            -
                      "include": "#flowtype- | 
| 2884 | 
            +
                      "include": "#flowtype-vars-and-props"
         | 
| 3334 2885 | 
             
                    }
         | 
| 3335 2886 | 
             
                  ]
         | 
| 3336 2887 | 
             
                },
         | 
| @@ -3358,10 +2909,13 @@ | |
| 3358 2909 | 
             
                  "patterns": [
         | 
| 3359 2910 | 
             
                    {
         | 
| 3360 2911 | 
             
                      "comment": "type aliases for export but avoid type instaceof or type in operators",
         | 
| 3361 | 
            -
                      "begin": "( | 
| 3362 | 
            -
                      "end": "\\s*( | 
| 2912 | 
            +
                      "begin": "\\s*+(?:\\b(import|export))?\\b\\s*(type)\\b\\s*(?!(instanceof|in)\\b)(?=[$_A-Za-z{\\[])",
         | 
| 2913 | 
            +
                      "end": "\\s*(\\;)|\\b(?=if|switch|try|var|let|const|static|function|return|class|do|for|while|debugger|export|import|yield|type|declare|interface)\\b",
         | 
| 3363 2914 | 
             
                      "beginCaptures": {
         | 
| 3364 2915 | 
             
                        "1": {
         | 
| 2916 | 
            +
                          "name": "keyword.control.module.js"
         | 
| 2917 | 
            +
                        },
         | 
| 2918 | 
            +
                        "2": {
         | 
| 3365 2919 | 
             
                          "name": "keyword.other.typedef.flowtype"
         | 
| 3366 2920 | 
             
                        }
         | 
| 3367 2921 | 
             
                      },
         | 
| @@ -3375,17 +2929,31 @@ | |
| 3375 2929 | 
             
                          "match": "\\s*+="
         | 
| 3376 2930 | 
             
                        },
         | 
| 3377 2931 | 
             
                        {
         | 
| 3378 | 
            -
                          "begin": "\\s*+ | 
| 3379 | 
            -
                          "end": "\\s* | 
| 2932 | 
            +
                          "begin": "\\s*+{",
         | 
| 2933 | 
            +
                          "end": "\\s*}",
         | 
| 3380 2934 | 
             
                          "applyEndPatternLast": 1,
         | 
| 3381 | 
            -
                          " | 
| 3382 | 
            -
                            " | 
| 2935 | 
            +
                          "beginCaptures": {
         | 
| 2936 | 
            +
                            "0": {
         | 
| 2937 | 
            +
                              "name": "meta.brace.curly.js"
         | 
| 2938 | 
            +
                            }
         | 
| 2939 | 
            +
                          },
         | 
| 2940 | 
            +
                          "endCaptures": {
         | 
| 2941 | 
            +
                            "0": {
         | 
| 3383 2942 | 
             
                              "name": "meta.brace.curly.js"
         | 
| 3384 2943 | 
             
                            }
         | 
| 3385 2944 | 
             
                          },
         | 
| 3386 2945 | 
             
                          "patterns": [
         | 
| 3387 2946 | 
             
                            {
         | 
| 3388 | 
            -
                              "include": "#flowtype | 
| 2947 | 
            +
                              "include": "#flowtype"
         | 
| 2948 | 
            +
                            },
         | 
| 2949 | 
            +
                            {
         | 
| 2950 | 
            +
                              "include": "#flowtype-variable"
         | 
| 2951 | 
            +
                            },
         | 
| 2952 | 
            +
                            {
         | 
| 2953 | 
            +
                              "include": "#comments"
         | 
| 2954 | 
            +
                            },
         | 
| 2955 | 
            +
                            {
         | 
| 2956 | 
            +
                              "include": "#flowtype-function-name"
         | 
| 3389 2957 | 
             
                            }
         | 
| 3390 2958 | 
             
                          ]
         | 
| 3391 2959 | 
             
                        },
         | 
| @@ -3423,11 +2991,11 @@ | |
| 3423 2991 | 
             
                      "include": "#flowtype-polymorphs"
         | 
| 3424 2992 | 
             
                    },
         | 
| 3425 2993 | 
             
                    {
         | 
| 3426 | 
            -
                      "begin": "\\s*+ | 
| 2994 | 
            +
                      "begin": "\\s*+{",
         | 
| 3427 2995 | 
             
                      "end": "\\s*(})",
         | 
| 3428 2996 | 
             
                      "contentName": "meta.class.body.js",
         | 
| 3429 2997 | 
             
                      "beginCaptures": {
         | 
| 3430 | 
            -
                        " | 
| 2998 | 
            +
                        "0": {
         | 
| 3431 2999 | 
             
                          "name": "punctuation.section.class.begin.js"
         | 
| 3432 3000 | 
             
                        }
         | 
| 3433 3001 | 
             
                      },
         | 
| @@ -3450,7 +3018,7 @@ | |
| 3450 3018 | 
             
                "flowtype-declare": {
         | 
| 3451 3019 | 
             
                  "patterns": [
         | 
| 3452 3020 | 
             
                    {
         | 
| 3453 | 
            -
                      "match": "\\s*+(?<!\\.)\\b(declare)(?=\\ | 
| 3021 | 
            +
                      "match": "\\s*+(?<!\\.)\\b(declare)\\b\\s++(?=\\b(function|var|type|interface)\\s++)",
         | 
| 3454 3022 | 
             
                      "captures": {
         | 
| 3455 3023 | 
             
                        "1": {
         | 
| 3456 3024 | 
             
                          "name": "keyword.other.declare.flowtype"
         | 
| @@ -3480,9 +3048,6 @@ | |
| 3480 3048 | 
             
                        }
         | 
| 3481 3049 | 
             
                      },
         | 
| 3482 3050 | 
             
                      "patterns": [
         | 
| 3483 | 
            -
                        {
         | 
| 3484 | 
            -
                          "include": "#flowtype-parse-objects"
         | 
| 3485 | 
            -
                        },
         | 
| 3486 3051 | 
             
                        {
         | 
| 3487 3052 | 
             
                          "include": "#flowtype-parse-types"
         | 
| 3488 3053 | 
             
                        }
         | 
| @@ -3507,11 +3072,7 @@ | |
| 3507 3072 | 
             
                        {
         | 
| 3508 3073 | 
             
                          "comment": "look for module names but dont assume uppercase start char",
         | 
| 3509 3074 | 
             
                          "match": "(?<!\\.)\\s*+([$_\\p{L}](?:[$\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}])*+)",
         | 
| 3510 | 
            -
                          " | 
| 3511 | 
            -
                            "1": {
         | 
| 3512 | 
            -
                              "name": "entity.name.class.js"
         | 
| 3513 | 
            -
                            }
         | 
| 3514 | 
            -
                          }
         | 
| 3075 | 
            +
                          "name": "entity.name.class.js"
         | 
| 3515 3076 | 
             
                        },
         | 
| 3516 3077 | 
             
                        {
         | 
| 3517 3078 | 
             
                          "comment": "look for module names in quoted string forms",
         | 
| @@ -3589,18 +3150,14 @@ | |
| 3589 3150 | 
             
                              "name": "entity.name.class.js"
         | 
| 3590 3151 | 
             
                            },
         | 
| 3591 3152 | 
             
                            {
         | 
| 3592 | 
            -
                              "include": "#literal- | 
| 3153 | 
            +
                              "include": "#literal-coma"
         | 
| 3593 3154 | 
             
                            }
         | 
| 3594 3155 | 
             
                          ]
         | 
| 3595 3156 | 
             
                        },
         | 
| 3596 3157 | 
             
                        {
         | 
| 3597 3158 | 
             
                          "comment": "look for class names but dont assume uppercase start char",
         | 
| 3598 3159 | 
             
                          "match": "(?<!\\.)\\s*+([$_\\p{L}](?:[$\\p{L}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Nl}\\p{Pc}])*+)",
         | 
| 3599 | 
            -
                          " | 
| 3600 | 
            -
                            "1": {
         | 
| 3601 | 
            -
                              "name": "entity.name.class.js"
         | 
| 3602 | 
            -
                            }
         | 
| 3603 | 
            -
                          }
         | 
| 3160 | 
            +
                          "name": "entity.name.class.js"
         | 
| 3604 3161 | 
             
                        },
         | 
| 3605 3162 | 
             
                        {
         | 
| 3606 3163 | 
             
                          "begin": "\\s*+({)",
         | 
| @@ -3667,7 +3224,7 @@ | |
| 3667 3224 | 
             
                "flowtype-typecast": {
         | 
| 3668 3225 | 
             
                  "patterns": [
         | 
| 3669 3226 | 
             
                    {
         | 
| 3670 | 
            -
                      "begin": "\\s | 
| 3227 | 
            +
                      "begin": "\\s*+:",
         | 
| 3671 3228 | 
             
                      "end": "(?=\\s*+\\))",
         | 
| 3672 3229 | 
             
                      "patterns": [
         | 
| 3673 3230 | 
             
                        {
         | 
| @@ -3677,106 +3234,6 @@ | |
| 3677 3234 | 
             
                    }
         | 
| 3678 3235 | 
             
                  ]
         | 
| 3679 3236 | 
             
                },
         | 
| 3680 | 
            -
                "flowtype-comments": {
         | 
| 3681 | 
            -
                  "patterns": [
         | 
| 3682 | 
            -
                    {
         | 
| 3683 | 
            -
                      "begin": "\\s*+(/\\*)\\s*(::)",
         | 
| 3684 | 
            -
                      "end": "\\s*(\\*/)",
         | 
| 3685 | 
            -
                      "beginCaptures": {
         | 
| 3686 | 
            -
                        "1": {
         | 
| 3687 | 
            -
                          "name": "punctuation.definition.comment.js"
         | 
| 3688 | 
            -
                        },
         | 
| 3689 | 
            -
                        "2": {
         | 
| 3690 | 
            -
                          "name": "punctuation.type.flowtype"
         | 
| 3691 | 
            -
                        }
         | 
| 3692 | 
            -
                      },
         | 
| 3693 | 
            -
                      "endCaptures": {
         | 
| 3694 | 
            -
                        "1": {
         | 
| 3695 | 
            -
                          "name": "punctuation.definition.comment.js"
         | 
| 3696 | 
            -
                        }
         | 
| 3697 | 
            -
                      },
         | 
| 3698 | 
            -
                      "patterns": [
         | 
| 3699 | 
            -
                        {
         | 
| 3700 | 
            -
                          "include": "#flowtype-comments-optional-parameter"
         | 
| 3701 | 
            -
                        },
         | 
| 3702 | 
            -
                        {
         | 
| 3703 | 
            -
                          "include": "#literal-module"
         | 
| 3704 | 
            -
                        },
         | 
| 3705 | 
            -
                        {
         | 
| 3706 | 
            -
                          "include": "#flowtype-keywords"
         | 
| 3707 | 
            -
                        },
         | 
| 3708 | 
            -
                        {
         | 
| 3709 | 
            -
                          "include": "#flowtype-parse-types"
         | 
| 3710 | 
            -
                        }
         | 
| 3711 | 
            -
                      ]
         | 
| 3712 | 
            -
                    },
         | 
| 3713 | 
            -
                    {
         | 
| 3714 | 
            -
                      "begin": "\\s*+(/\\*)\\s*(flow-include)\\b",
         | 
| 3715 | 
            -
                      "end": "\\s*(\\*/)",
         | 
| 3716 | 
            -
                      "beginCaptures": {
         | 
| 3717 | 
            -
                        "1": {
         | 
| 3718 | 
            -
                          "name": "punctuation.definition.comment.js"
         | 
| 3719 | 
            -
                        },
         | 
| 3720 | 
            -
                        "2": {
         | 
| 3721 | 
            -
                          "name": "punctuation.definition.variable.flowtype"
         | 
| 3722 | 
            -
                        }
         | 
| 3723 | 
            -
                      },
         | 
| 3724 | 
            -
                      "endCaptures": {
         | 
| 3725 | 
            -
                        "1": {
         | 
| 3726 | 
            -
                          "name": "punctuation.definition.comment.js"
         | 
| 3727 | 
            -
                        }
         | 
| 3728 | 
            -
                      },
         | 
| 3729 | 
            -
                      "patterns": [
         | 
| 3730 | 
            -
                        {
         | 
| 3731 | 
            -
                          "include": "#flowtype-comments-optional-parameter"
         | 
| 3732 | 
            -
                        },
         | 
| 3733 | 
            -
                        {
         | 
| 3734 | 
            -
                          "include": "#literal-module"
         | 
| 3735 | 
            -
                        },
         | 
| 3736 | 
            -
                        {
         | 
| 3737 | 
            -
                          "include": "#flowtype-keywords"
         | 
| 3738 | 
            -
                        },
         | 
| 3739 | 
            -
                        {
         | 
| 3740 | 
            -
                          "include": "#flowtype-parse-types"
         | 
| 3741 | 
            -
                        }
         | 
| 3742 | 
            -
                      ]
         | 
| 3743 | 
            -
                    },
         | 
| 3744 | 
            -
                    {
         | 
| 3745 | 
            -
                      "begin": "\\s*+(/\\*)\\s*(:)",
         | 
| 3746 | 
            -
                      "end": "\\s*(\\*/)",
         | 
| 3747 | 
            -
                      "beginCaptures": {
         | 
| 3748 | 
            -
                        "1": {
         | 
| 3749 | 
            -
                          "name": "punctuation.definition.comment.js"
         | 
| 3750 | 
            -
                        },
         | 
| 3751 | 
            -
                        "2": {
         | 
| 3752 | 
            -
                          "name": "punctuation.type.flowtype"
         | 
| 3753 | 
            -
                        }
         | 
| 3754 | 
            -
                      },
         | 
| 3755 | 
            -
                      "endCaptures": {
         | 
| 3756 | 
            -
                        "1": {
         | 
| 3757 | 
            -
                          "name": "punctuation.definition.comment.js"
         | 
| 3758 | 
            -
                        }
         | 
| 3759 | 
            -
                      },
         | 
| 3760 | 
            -
                      "patterns": [
         | 
| 3761 | 
            -
                        {
         | 
| 3762 | 
            -
                          "include": "#flowtype-parse-types"
         | 
| 3763 | 
            -
                        }
         | 
| 3764 | 
            -
                      ]
         | 
| 3765 | 
            -
                    }
         | 
| 3766 | 
            -
                  ]
         | 
| 3767 | 
            -
                },
         | 
| 3768 | 
            -
                "flowtype-comments-optional-parameter": {
         | 
| 3769 | 
            -
                  "patterns": [
         | 
| 3770 | 
            -
                    {
         | 
| 3771 | 
            -
                      "match": "(?<=::|flow-include)\\s*(\\?)",
         | 
| 3772 | 
            -
                      "captures": {
         | 
| 3773 | 
            -
                        "1": {
         | 
| 3774 | 
            -
                          "name": "keyword.operator.optional.parameter.flowtype"
         | 
| 3775 | 
            -
                        }
         | 
| 3776 | 
            -
                      }
         | 
| 3777 | 
            -
                    }
         | 
| 3778 | 
            -
                  ]
         | 
| 3779 | 
            -
                },
         | 
| 3780 3237 | 
             
                "miscellaneous": {
         | 
| 3781 3238 | 
             
                  "comment": "trap miscellaneous stuff",
         | 
| 3782 3239 | 
             
                  "patterns": [
         | 
| @@ -3790,55 +3247,6 @@ | |
| 3790 3247 | 
             
                      }
         | 
| 3791 3248 | 
             
                    }
         | 
| 3792 3249 | 
             
                  ]
         | 
| 3793 | 
            -
                },
         | 
| 3794 | 
            -
                "html-template": {
         | 
| 3795 | 
            -
                  "comment": "Assume object properties of template: `some html` contain html",
         | 
| 3796 | 
            -
                  "begin": "(?:(?:^|(?<=,|{))\\s*\\b((template))\\b\\s*(:)\\s*(`))",
         | 
| 3797 | 
            -
                  "end": "\\s*(`)",
         | 
| 3798 | 
            -
                  "beginCaptures": {
         | 
| 3799 | 
            -
                    "1": {
         | 
| 3800 | 
            -
                      "name": "constant.other.object.key.js"
         | 
| 3801 | 
            -
                    },
         | 
| 3802 | 
            -
                    "2": {
         | 
| 3803 | 
            -
                      "name": "string.unquoted.js"
         | 
| 3804 | 
            -
                    },
         | 
| 3805 | 
            -
                    "3": {
         | 
| 3806 | 
            -
                      "name": "punctuation.separator.key-value.js"
         | 
| 3807 | 
            -
                    },
         | 
| 3808 | 
            -
                    "4": {
         | 
| 3809 | 
            -
                      "name": "punctuation.definition.quasi.begin.js"
         | 
| 3810 | 
            -
                    }
         | 
| 3811 | 
            -
                  },
         | 
| 3812 | 
            -
                  "endCaptures": {
         | 
| 3813 | 
            -
                    "1": {
         | 
| 3814 | 
            -
                      "name": "punctuation.definition.quasi.end.js"
         | 
| 3815 | 
            -
                    }
         | 
| 3816 | 
            -
                  },
         | 
| 3817 | 
            -
                  "patterns": [
         | 
| 3818 | 
            -
                    {
         | 
| 3819 | 
            -
                      "name": "entity.quasi.element.js",
         | 
| 3820 | 
            -
                      "begin": "(?<!\\\\)\\${",
         | 
| 3821 | 
            -
                      "end": "\\s*}",
         | 
| 3822 | 
            -
                      "beginCaptures": {
         | 
| 3823 | 
            -
                        "0": {
         | 
| 3824 | 
            -
                          "name": "punctuation.quasi.element.begin.js"
         | 
| 3825 | 
            -
                        }
         | 
| 3826 | 
            -
                      },
         | 
| 3827 | 
            -
                      "endCaptures": {
         | 
| 3828 | 
            -
                        "0": {
         | 
| 3829 | 
            -
                          "name": "punctuation.quasi.element.end.js"
         | 
| 3830 | 
            -
                        }
         | 
| 3831 | 
            -
                      },
         | 
| 3832 | 
            -
                      "patterns": [
         | 
| 3833 | 
            -
                        {
         | 
| 3834 | 
            -
                          "include": "#expression"
         | 
| 3835 | 
            -
                        }
         | 
| 3836 | 
            -
                      ]
         | 
| 3837 | 
            -
                    },
         | 
| 3838 | 
            -
                    {
         | 
| 3839 | 
            -
                      "include": "text.html.mustache"
         | 
| 3840 | 
            -
                    }
         | 
| 3841 | 
            -
                  ]
         | 
| 3842 3250 | 
             
                }
         | 
| 3843 3251 | 
             
              }
         | 
| 3844 3252 | 
             
            }
         |