├── .editorconfig ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .markdownlint.json ├── .prettierrc ├── .vscode └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── README.md ├── img └── code.png ├── language-configuration.json ├── package-lock.json ├── package.json ├── syntaxes └── userjs.tmLanguage.json └── vsc-extension-quickstart.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true 7 | indent_style = tabs 8 | indent_size = 4 9 | 10 | [{*.json,*.md,.eslintrc,.prettierrc}] 11 | indent_style = space 12 | indent_size = 2 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["adpyke-es6", "prettier"], 3 | "env": { 4 | "browser": false, 5 | "node": true 6 | }, 7 | "parserOptions": { 8 | "sourceType": "module" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | *.vsix 4 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD013": false, 3 | "MD034": false 4 | } 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "printWidth": 100, 4 | "useTabs": true, 5 | "overrides": [ 6 | { 7 | "files": ["*.json", ".prettierrc", ".eslintrc", "*.md"], 8 | "options": { 9 | "useTabs": false, 10 | "tabWidth": 2 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"] 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .gitignore 4 | vsc-extension-quickstart.md 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "vscode-userscript" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## [1.1.1] 8 | 9 | ### Fixed 10 | 11 | - Fixed some inconsistencies in the highlighting 12 | - Don't highlight invalid values 13 | 14 | ## [1.1.0] 15 | 16 | ### Changed 17 | 18 | - Context aware highlighting 19 | 20 | ## [1.0.0] 21 | 22 | ### Added 23 | 24 | - Initial release 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UserScript 2 | 3 | A VS Code extension to provide syntax highlighting to UserScript headers. 4 | 5 | ![Screenshot](img/code.png) 6 | -------------------------------------------------------------------------------- /img/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kufii/vscode-userscript/5255466a93c87d7db50dbe87048f3b3d7faf6e72/img/code.png -------------------------------------------------------------------------------- /language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "//", 4 | "blockComment": ["/*", "*/"] 5 | }, 6 | "brackets": [["{", "}"], ["[", "]"], ["(", ")"]], 7 | "autoClosingPairs": [ 8 | { "open": "{", "close": "}" }, 9 | { "open": "[", "close": "]" }, 10 | { "open": "(", "close": ")" }, 11 | { "open": "'", "close": "'", "notIn": ["string", "comment"] }, 12 | { "open": "\"", "close": "\"", "notIn": ["string"] }, 13 | { "open": "`", "close": "`", "notIn": ["string", "comment"] }, 14 | { "open": "/**", "close": " */", "notIn": ["string"] } 15 | ], 16 | "surroundingPairs": [["{", "}"], ["[", "]"], ["(", ")"], ["'", "'"], ["\"", "\""], ["`", "`"]], 17 | "autoCloseBefore": ";:.,=}])>` \n\t", 18 | "folding": { 19 | "markers": { 20 | "start": "^\\s*//\\s*#?region\\b", 21 | "end": "^\\s*//\\s*#?endregion\\b" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-userscript", 3 | "version": "1.3.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.5.5", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", 10 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/highlight": { 17 | "version": "7.5.0", 18 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", 19 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", 20 | "dev": true, 21 | "requires": { 22 | "chalk": "^2.0.0", 23 | "esutils": "^2.0.2", 24 | "js-tokens": "^4.0.0" 25 | } 26 | }, 27 | "acorn": { 28 | "version": "7.0.0", 29 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", 30 | "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==", 31 | "dev": true 32 | }, 33 | "acorn-jsx": { 34 | "version": "5.0.2", 35 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", 36 | "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", 37 | "dev": true 38 | }, 39 | "ajv": { 40 | "version": "6.10.2", 41 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", 42 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", 43 | "dev": true, 44 | "requires": { 45 | "fast-deep-equal": "^2.0.1", 46 | "fast-json-stable-stringify": "^2.0.0", 47 | "json-schema-traverse": "^0.4.1", 48 | "uri-js": "^4.2.2" 49 | } 50 | }, 51 | "ansi-escapes": { 52 | "version": "3.2.0", 53 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 54 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 55 | "dev": true 56 | }, 57 | "ansi-regex": { 58 | "version": "3.0.0", 59 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 60 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 61 | "dev": true 62 | }, 63 | "ansi-styles": { 64 | "version": "3.2.1", 65 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 66 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 67 | "dev": true, 68 | "requires": { 69 | "color-convert": "^1.9.0" 70 | } 71 | }, 72 | "argparse": { 73 | "version": "1.0.10", 74 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 75 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 76 | "dev": true, 77 | "requires": { 78 | "sprintf-js": "~1.0.2" 79 | } 80 | }, 81 | "astral-regex": { 82 | "version": "1.0.0", 83 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 84 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 85 | "dev": true 86 | }, 87 | "balanced-match": { 88 | "version": "1.0.0", 89 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 90 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 91 | "dev": true 92 | }, 93 | "brace-expansion": { 94 | "version": "1.1.11", 95 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 96 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 97 | "dev": true, 98 | "requires": { 99 | "balanced-match": "^1.0.0", 100 | "concat-map": "0.0.1" 101 | } 102 | }, 103 | "callsites": { 104 | "version": "3.1.0", 105 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 106 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 107 | "dev": true 108 | }, 109 | "chalk": { 110 | "version": "2.4.2", 111 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 112 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 113 | "dev": true, 114 | "requires": { 115 | "ansi-styles": "^3.2.1", 116 | "escape-string-regexp": "^1.0.5", 117 | "supports-color": "^5.3.0" 118 | } 119 | }, 120 | "chardet": { 121 | "version": "0.7.0", 122 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 123 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 124 | "dev": true 125 | }, 126 | "cli-cursor": { 127 | "version": "2.1.0", 128 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 129 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 130 | "dev": true, 131 | "requires": { 132 | "restore-cursor": "^2.0.0" 133 | } 134 | }, 135 | "cli-width": { 136 | "version": "2.2.0", 137 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 138 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 139 | "dev": true 140 | }, 141 | "color-convert": { 142 | "version": "1.9.3", 143 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 144 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 145 | "dev": true, 146 | "requires": { 147 | "color-name": "1.1.3" 148 | } 149 | }, 150 | "color-name": { 151 | "version": "1.1.3", 152 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 153 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 154 | "dev": true 155 | }, 156 | "concat-map": { 157 | "version": "0.0.1", 158 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 159 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 160 | "dev": true 161 | }, 162 | "cross-spawn": { 163 | "version": "6.0.5", 164 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 165 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 166 | "dev": true, 167 | "requires": { 168 | "nice-try": "^1.0.4", 169 | "path-key": "^2.0.1", 170 | "semver": "^5.5.0", 171 | "shebang-command": "^1.2.0", 172 | "which": "^1.2.9" 173 | }, 174 | "dependencies": { 175 | "semver": { 176 | "version": "5.7.1", 177 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 178 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 179 | "dev": true 180 | } 181 | } 182 | }, 183 | "debug": { 184 | "version": "4.1.1", 185 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 186 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 187 | "dev": true, 188 | "requires": { 189 | "ms": "^2.1.1" 190 | } 191 | }, 192 | "deep-is": { 193 | "version": "0.1.3", 194 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 195 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 196 | "dev": true 197 | }, 198 | "doctrine": { 199 | "version": "3.0.0", 200 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 201 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 202 | "dev": true, 203 | "requires": { 204 | "esutils": "^2.0.2" 205 | } 206 | }, 207 | "emoji-regex": { 208 | "version": "7.0.3", 209 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 210 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 211 | "dev": true 212 | }, 213 | "escape-string-regexp": { 214 | "version": "1.0.5", 215 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 216 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 217 | "dev": true 218 | }, 219 | "eslint": { 220 | "version": "6.4.0", 221 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.4.0.tgz", 222 | "integrity": "sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA==", 223 | "dev": true, 224 | "requires": { 225 | "@babel/code-frame": "^7.0.0", 226 | "ajv": "^6.10.0", 227 | "chalk": "^2.1.0", 228 | "cross-spawn": "^6.0.5", 229 | "debug": "^4.0.1", 230 | "doctrine": "^3.0.0", 231 | "eslint-scope": "^5.0.0", 232 | "eslint-utils": "^1.4.2", 233 | "eslint-visitor-keys": "^1.1.0", 234 | "espree": "^6.1.1", 235 | "esquery": "^1.0.1", 236 | "esutils": "^2.0.2", 237 | "file-entry-cache": "^5.0.1", 238 | "functional-red-black-tree": "^1.0.1", 239 | "glob-parent": "^5.0.0", 240 | "globals": "^11.7.0", 241 | "ignore": "^4.0.6", 242 | "import-fresh": "^3.0.0", 243 | "imurmurhash": "^0.1.4", 244 | "inquirer": "^6.4.1", 245 | "is-glob": "^4.0.0", 246 | "js-yaml": "^3.13.1", 247 | "json-stable-stringify-without-jsonify": "^1.0.1", 248 | "levn": "^0.3.0", 249 | "lodash": "^4.17.14", 250 | "minimatch": "^3.0.4", 251 | "mkdirp": "^0.5.1", 252 | "natural-compare": "^1.4.0", 253 | "optionator": "^0.8.2", 254 | "progress": "^2.0.0", 255 | "regexpp": "^2.0.1", 256 | "semver": "^6.1.2", 257 | "strip-ansi": "^5.2.0", 258 | "strip-json-comments": "^3.0.1", 259 | "table": "^5.2.3", 260 | "text-table": "^0.2.0", 261 | "v8-compile-cache": "^2.0.3" 262 | } 263 | }, 264 | "eslint-config-adpyke-es6": { 265 | "version": "1.4.12", 266 | "resolved": "https://registry.npmjs.org/eslint-config-adpyke-es6/-/eslint-config-adpyke-es6-1.4.12.tgz", 267 | "integrity": "sha512-iwVfOG6SBKCI/BnXAeTMz9C6n31CZEyv7rsEt7yjUXsj31LGV1u5LOZ4GO4QMCZzaBr6UKTEX8YMCFxhUdOaWQ==", 268 | "dev": true 269 | }, 270 | "eslint-config-prettier": { 271 | "version": "6.3.0", 272 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.3.0.tgz", 273 | "integrity": "sha512-EWaGjlDAZRzVFveh2Jsglcere2KK5CJBhkNSa1xs3KfMUGdRiT7lG089eqPdvlzWHpAqaekubOsOMu8W8Yk71A==", 274 | "dev": true, 275 | "requires": { 276 | "get-stdin": "^6.0.0" 277 | } 278 | }, 279 | "eslint-scope": { 280 | "version": "5.0.0", 281 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 282 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 283 | "dev": true, 284 | "requires": { 285 | "esrecurse": "^4.1.0", 286 | "estraverse": "^4.1.1" 287 | } 288 | }, 289 | "eslint-utils": { 290 | "version": "1.4.2", 291 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", 292 | "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", 293 | "dev": true, 294 | "requires": { 295 | "eslint-visitor-keys": "^1.0.0" 296 | } 297 | }, 298 | "eslint-visitor-keys": { 299 | "version": "1.1.0", 300 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 301 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 302 | "dev": true 303 | }, 304 | "espree": { 305 | "version": "6.1.1", 306 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", 307 | "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", 308 | "dev": true, 309 | "requires": { 310 | "acorn": "^7.0.0", 311 | "acorn-jsx": "^5.0.2", 312 | "eslint-visitor-keys": "^1.1.0" 313 | } 314 | }, 315 | "esprima": { 316 | "version": "4.0.1", 317 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 318 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 319 | "dev": true 320 | }, 321 | "esquery": { 322 | "version": "1.0.1", 323 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 324 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 325 | "dev": true, 326 | "requires": { 327 | "estraverse": "^4.0.0" 328 | } 329 | }, 330 | "esrecurse": { 331 | "version": "4.2.1", 332 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 333 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 334 | "dev": true, 335 | "requires": { 336 | "estraverse": "^4.1.0" 337 | } 338 | }, 339 | "estraverse": { 340 | "version": "4.3.0", 341 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 342 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 343 | "dev": true 344 | }, 345 | "esutils": { 346 | "version": "2.0.3", 347 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 348 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 349 | "dev": true 350 | }, 351 | "external-editor": { 352 | "version": "3.1.0", 353 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 354 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 355 | "dev": true, 356 | "requires": { 357 | "chardet": "^0.7.0", 358 | "iconv-lite": "^0.4.24", 359 | "tmp": "^0.0.33" 360 | } 361 | }, 362 | "fast-deep-equal": { 363 | "version": "2.0.1", 364 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 365 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 366 | "dev": true 367 | }, 368 | "fast-json-stable-stringify": { 369 | "version": "2.0.0", 370 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 371 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 372 | "dev": true 373 | }, 374 | "fast-levenshtein": { 375 | "version": "2.0.6", 376 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 377 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 378 | "dev": true 379 | }, 380 | "figures": { 381 | "version": "2.0.0", 382 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 383 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 384 | "dev": true, 385 | "requires": { 386 | "escape-string-regexp": "^1.0.5" 387 | } 388 | }, 389 | "file-entry-cache": { 390 | "version": "5.0.1", 391 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 392 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 393 | "dev": true, 394 | "requires": { 395 | "flat-cache": "^2.0.1" 396 | } 397 | }, 398 | "flat-cache": { 399 | "version": "2.0.1", 400 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 401 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 402 | "dev": true, 403 | "requires": { 404 | "flatted": "^2.0.0", 405 | "rimraf": "2.6.3", 406 | "write": "1.0.3" 407 | } 408 | }, 409 | "flatted": { 410 | "version": "2.0.1", 411 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", 412 | "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", 413 | "dev": true 414 | }, 415 | "fs.realpath": { 416 | "version": "1.0.0", 417 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 418 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 419 | "dev": true 420 | }, 421 | "functional-red-black-tree": { 422 | "version": "1.0.1", 423 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 424 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 425 | "dev": true 426 | }, 427 | "get-stdin": { 428 | "version": "6.0.0", 429 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", 430 | "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", 431 | "dev": true 432 | }, 433 | "glob": { 434 | "version": "7.1.4", 435 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 436 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 437 | "dev": true, 438 | "requires": { 439 | "fs.realpath": "^1.0.0", 440 | "inflight": "^1.0.4", 441 | "inherits": "2", 442 | "minimatch": "^3.0.4", 443 | "once": "^1.3.0", 444 | "path-is-absolute": "^1.0.0" 445 | } 446 | }, 447 | "glob-parent": { 448 | "version": "5.0.0", 449 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", 450 | "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", 451 | "dev": true, 452 | "requires": { 453 | "is-glob": "^4.0.1" 454 | } 455 | }, 456 | "globals": { 457 | "version": "11.12.0", 458 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 459 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 460 | "dev": true 461 | }, 462 | "has-flag": { 463 | "version": "3.0.0", 464 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 465 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 466 | "dev": true 467 | }, 468 | "iconv-lite": { 469 | "version": "0.4.24", 470 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 471 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 472 | "dev": true, 473 | "requires": { 474 | "safer-buffer": ">= 2.1.2 < 3" 475 | } 476 | }, 477 | "ignore": { 478 | "version": "4.0.6", 479 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 480 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 481 | "dev": true 482 | }, 483 | "import-fresh": { 484 | "version": "3.1.0", 485 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", 486 | "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", 487 | "dev": true, 488 | "requires": { 489 | "parent-module": "^1.0.0", 490 | "resolve-from": "^4.0.0" 491 | } 492 | }, 493 | "imurmurhash": { 494 | "version": "0.1.4", 495 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 496 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 497 | "dev": true 498 | }, 499 | "inflight": { 500 | "version": "1.0.6", 501 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 502 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 503 | "dev": true, 504 | "requires": { 505 | "once": "^1.3.0", 506 | "wrappy": "1" 507 | } 508 | }, 509 | "inherits": { 510 | "version": "2.0.4", 511 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 512 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 513 | "dev": true 514 | }, 515 | "inquirer": { 516 | "version": "6.5.2", 517 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", 518 | "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", 519 | "dev": true, 520 | "requires": { 521 | "ansi-escapes": "^3.2.0", 522 | "chalk": "^2.4.2", 523 | "cli-cursor": "^2.1.0", 524 | "cli-width": "^2.0.0", 525 | "external-editor": "^3.0.3", 526 | "figures": "^2.0.0", 527 | "lodash": "^4.17.12", 528 | "mute-stream": "0.0.7", 529 | "run-async": "^2.2.0", 530 | "rxjs": "^6.4.0", 531 | "string-width": "^2.1.0", 532 | "strip-ansi": "^5.1.0", 533 | "through": "^2.3.6" 534 | } 535 | }, 536 | "is-extglob": { 537 | "version": "2.1.1", 538 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 539 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 540 | "dev": true 541 | }, 542 | "is-fullwidth-code-point": { 543 | "version": "2.0.0", 544 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 545 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 546 | "dev": true 547 | }, 548 | "is-glob": { 549 | "version": "4.0.1", 550 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 551 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 552 | "dev": true, 553 | "requires": { 554 | "is-extglob": "^2.1.1" 555 | } 556 | }, 557 | "is-promise": { 558 | "version": "2.1.0", 559 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 560 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 561 | "dev": true 562 | }, 563 | "isexe": { 564 | "version": "2.0.0", 565 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 566 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 567 | "dev": true 568 | }, 569 | "js-tokens": { 570 | "version": "4.0.0", 571 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 572 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 573 | "dev": true 574 | }, 575 | "js-yaml": { 576 | "version": "3.13.1", 577 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 578 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 579 | "dev": true, 580 | "requires": { 581 | "argparse": "^1.0.7", 582 | "esprima": "^4.0.0" 583 | } 584 | }, 585 | "json-schema-traverse": { 586 | "version": "0.4.1", 587 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 588 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 589 | "dev": true 590 | }, 591 | "json-stable-stringify-without-jsonify": { 592 | "version": "1.0.1", 593 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 594 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 595 | "dev": true 596 | }, 597 | "levn": { 598 | "version": "0.3.0", 599 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 600 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 601 | "dev": true, 602 | "requires": { 603 | "prelude-ls": "~1.1.2", 604 | "type-check": "~0.3.2" 605 | } 606 | }, 607 | "lodash": { 608 | "version": "4.17.15", 609 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 610 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 611 | "dev": true 612 | }, 613 | "mimic-fn": { 614 | "version": "1.2.0", 615 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 616 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 617 | "dev": true 618 | }, 619 | "minimatch": { 620 | "version": "3.0.4", 621 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 622 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 623 | "dev": true, 624 | "requires": { 625 | "brace-expansion": "^1.1.7" 626 | } 627 | }, 628 | "minimist": { 629 | "version": "0.0.8", 630 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 631 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 632 | "dev": true 633 | }, 634 | "mkdirp": { 635 | "version": "0.5.1", 636 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 637 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 638 | "dev": true, 639 | "requires": { 640 | "minimist": "0.0.8" 641 | } 642 | }, 643 | "ms": { 644 | "version": "2.1.2", 645 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 646 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 647 | "dev": true 648 | }, 649 | "mute-stream": { 650 | "version": "0.0.7", 651 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 652 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 653 | "dev": true 654 | }, 655 | "natural-compare": { 656 | "version": "1.4.0", 657 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 658 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 659 | "dev": true 660 | }, 661 | "nice-try": { 662 | "version": "1.0.5", 663 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 664 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 665 | "dev": true 666 | }, 667 | "once": { 668 | "version": "1.4.0", 669 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 670 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 671 | "dev": true, 672 | "requires": { 673 | "wrappy": "1" 674 | } 675 | }, 676 | "onetime": { 677 | "version": "2.0.1", 678 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 679 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 680 | "dev": true, 681 | "requires": { 682 | "mimic-fn": "^1.0.0" 683 | } 684 | }, 685 | "optionator": { 686 | "version": "0.8.2", 687 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 688 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 689 | "dev": true, 690 | "requires": { 691 | "deep-is": "~0.1.3", 692 | "fast-levenshtein": "~2.0.4", 693 | "levn": "~0.3.0", 694 | "prelude-ls": "~1.1.2", 695 | "type-check": "~0.3.2", 696 | "wordwrap": "~1.0.0" 697 | } 698 | }, 699 | "os-tmpdir": { 700 | "version": "1.0.2", 701 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 702 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 703 | "dev": true 704 | }, 705 | "parent-module": { 706 | "version": "1.0.1", 707 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 708 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 709 | "dev": true, 710 | "requires": { 711 | "callsites": "^3.0.0" 712 | } 713 | }, 714 | "path-is-absolute": { 715 | "version": "1.0.1", 716 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 717 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 718 | "dev": true 719 | }, 720 | "path-key": { 721 | "version": "2.0.1", 722 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 723 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 724 | "dev": true 725 | }, 726 | "prelude-ls": { 727 | "version": "1.1.2", 728 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 729 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 730 | "dev": true 731 | }, 732 | "prettier": { 733 | "version": "1.18.2", 734 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", 735 | "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", 736 | "dev": true 737 | }, 738 | "progress": { 739 | "version": "2.0.3", 740 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 741 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 742 | "dev": true 743 | }, 744 | "punycode": { 745 | "version": "2.1.1", 746 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 747 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 748 | "dev": true 749 | }, 750 | "regexpp": { 751 | "version": "2.0.1", 752 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 753 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 754 | "dev": true 755 | }, 756 | "resolve-from": { 757 | "version": "4.0.0", 758 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 759 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 760 | "dev": true 761 | }, 762 | "restore-cursor": { 763 | "version": "2.0.0", 764 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 765 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 766 | "dev": true, 767 | "requires": { 768 | "onetime": "^2.0.0", 769 | "signal-exit": "^3.0.2" 770 | } 771 | }, 772 | "rimraf": { 773 | "version": "2.6.3", 774 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 775 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 776 | "dev": true, 777 | "requires": { 778 | "glob": "^7.1.3" 779 | } 780 | }, 781 | "run-async": { 782 | "version": "2.3.0", 783 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 784 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 785 | "dev": true, 786 | "requires": { 787 | "is-promise": "^2.1.0" 788 | } 789 | }, 790 | "rxjs": { 791 | "version": "6.5.3", 792 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", 793 | "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", 794 | "dev": true, 795 | "requires": { 796 | "tslib": "^1.9.0" 797 | } 798 | }, 799 | "safer-buffer": { 800 | "version": "2.1.2", 801 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 802 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 803 | "dev": true 804 | }, 805 | "semver": { 806 | "version": "6.3.0", 807 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 808 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 809 | "dev": true 810 | }, 811 | "shebang-command": { 812 | "version": "1.2.0", 813 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 814 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 815 | "dev": true, 816 | "requires": { 817 | "shebang-regex": "^1.0.0" 818 | } 819 | }, 820 | "shebang-regex": { 821 | "version": "1.0.0", 822 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 823 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 824 | "dev": true 825 | }, 826 | "signal-exit": { 827 | "version": "3.0.2", 828 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 829 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 830 | "dev": true 831 | }, 832 | "slice-ansi": { 833 | "version": "2.1.0", 834 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 835 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 836 | "dev": true, 837 | "requires": { 838 | "ansi-styles": "^3.2.0", 839 | "astral-regex": "^1.0.0", 840 | "is-fullwidth-code-point": "^2.0.0" 841 | } 842 | }, 843 | "sprintf-js": { 844 | "version": "1.0.3", 845 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 846 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 847 | "dev": true 848 | }, 849 | "string-width": { 850 | "version": "2.1.1", 851 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 852 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 853 | "dev": true, 854 | "requires": { 855 | "is-fullwidth-code-point": "^2.0.0", 856 | "strip-ansi": "^4.0.0" 857 | }, 858 | "dependencies": { 859 | "strip-ansi": { 860 | "version": "4.0.0", 861 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 862 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 863 | "dev": true, 864 | "requires": { 865 | "ansi-regex": "^3.0.0" 866 | } 867 | } 868 | } 869 | }, 870 | "strip-ansi": { 871 | "version": "5.2.0", 872 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 873 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 874 | "dev": true, 875 | "requires": { 876 | "ansi-regex": "^4.1.0" 877 | }, 878 | "dependencies": { 879 | "ansi-regex": { 880 | "version": "4.1.0", 881 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 882 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 883 | "dev": true 884 | } 885 | } 886 | }, 887 | "strip-json-comments": { 888 | "version": "3.0.1", 889 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", 890 | "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", 891 | "dev": true 892 | }, 893 | "supports-color": { 894 | "version": "5.5.0", 895 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 896 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 897 | "dev": true, 898 | "requires": { 899 | "has-flag": "^3.0.0" 900 | } 901 | }, 902 | "table": { 903 | "version": "5.4.6", 904 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 905 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 906 | "dev": true, 907 | "requires": { 908 | "ajv": "^6.10.2", 909 | "lodash": "^4.17.14", 910 | "slice-ansi": "^2.1.0", 911 | "string-width": "^3.0.0" 912 | }, 913 | "dependencies": { 914 | "string-width": { 915 | "version": "3.1.0", 916 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 917 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 918 | "dev": true, 919 | "requires": { 920 | "emoji-regex": "^7.0.1", 921 | "is-fullwidth-code-point": "^2.0.0", 922 | "strip-ansi": "^5.1.0" 923 | } 924 | } 925 | } 926 | }, 927 | "text-table": { 928 | "version": "0.2.0", 929 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 930 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 931 | "dev": true 932 | }, 933 | "through": { 934 | "version": "2.3.8", 935 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 936 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 937 | "dev": true 938 | }, 939 | "tmp": { 940 | "version": "0.0.33", 941 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 942 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 943 | "dev": true, 944 | "requires": { 945 | "os-tmpdir": "~1.0.2" 946 | } 947 | }, 948 | "tslib": { 949 | "version": "1.10.0", 950 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 951 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", 952 | "dev": true 953 | }, 954 | "type-check": { 955 | "version": "0.3.2", 956 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 957 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 958 | "dev": true, 959 | "requires": { 960 | "prelude-ls": "~1.1.2" 961 | } 962 | }, 963 | "uri-js": { 964 | "version": "4.2.2", 965 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 966 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 967 | "dev": true, 968 | "requires": { 969 | "punycode": "^2.1.0" 970 | } 971 | }, 972 | "v8-compile-cache": { 973 | "version": "2.1.0", 974 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 975 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 976 | "dev": true 977 | }, 978 | "which": { 979 | "version": "1.3.1", 980 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 981 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 982 | "dev": true, 983 | "requires": { 984 | "isexe": "^2.0.0" 985 | } 986 | }, 987 | "wordwrap": { 988 | "version": "1.0.0", 989 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 990 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 991 | "dev": true 992 | }, 993 | "wrappy": { 994 | "version": "1.0.2", 995 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 996 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 997 | "dev": true 998 | }, 999 | "write": { 1000 | "version": "1.0.3", 1001 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1002 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1003 | "dev": true, 1004 | "requires": { 1005 | "mkdirp": "^0.5.1" 1006 | } 1007 | } 1008 | } 1009 | } 1010 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-userscript", 3 | "displayName": "UserScript", 4 | "description": "UserScript language support for VS Code", 5 | "version": "1.3.2", 6 | "publisher": "adpyke", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/kufii/vscode-userscript.git" 10 | }, 11 | "scripts": { 12 | "lint": "eslint .", 13 | "format": "prettier --write \"**/*.{js,jsx,md,json,css,prettierrc,eslintrc}\"" 14 | }, 15 | "engines": { 16 | "vscode": "^1.38.0" 17 | }, 18 | "categories": [ 19 | "Programming Languages" 20 | ], 21 | "keywords": [ 22 | "userscript", 23 | "greasemonkey", 24 | "tampermonkey", 25 | "violentmonkey", 26 | "greasyfork" 27 | ], 28 | "contributes": { 29 | "grammars": [ 30 | { 31 | "scopeName": "text.userjs", 32 | "path": "./syntaxes/userjs.tmLanguage.json", 33 | "injectTo": [ 34 | "source.js", 35 | "source.mjs", 36 | "source.ts", 37 | "source.jsx", 38 | "source.tsx" 39 | ] 40 | } 41 | ] 42 | }, 43 | "devDependencies": { 44 | "eslint": "^6.4.0", 45 | "eslint-config-adpyke-es6": "^1.4.12", 46 | "eslint-config-prettier": "^6.3.0", 47 | "prettier": "^1.18.2" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /syntaxes/userjs.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", 3 | "scopeName": "text.userjs", 4 | "fileTypes": ["user.js"], 5 | "injectionSelector": "L:source.js -comment -(string -meta.embedded), L:source.jsx -comment -(string -meta.embedded), L:source.js.jsx -comment -(string -meta.embedded), L:source.ts -comment -(string -meta.embedded), L:source.tsx -comment -(string -meta.embedded)", 6 | "patterns": [ 7 | { 8 | "begin": "//\\s*==UserScript==", 9 | "beginCaptures": { 10 | "0": { 11 | "name": "comment.block.documentation.js" 12 | } 13 | }, 14 | "end": "//\\s*==/UserScript==", 15 | "endCaptures": { 16 | "0": { 17 | "name": "comment.block.documentation.js" 18 | } 19 | }, 20 | "patterns": [{ "include": "#userscript-header" }] 21 | } 22 | ], 23 | "repository": { 24 | "userscript-header": { 25 | "patterns": [ 26 | { 27 | "match": "^//\\s*((@)(?:name(?::[^\\s]+)?|author|description|nocompat|license|copyright))\\s+(.*)", 28 | "captures": { 29 | "0": { 30 | "name": "comment.block.documentation.js" 31 | }, 32 | "1": { 33 | "name": "storage.type.class.jsdoc" 34 | }, 35 | "2": { 36 | "name": "punctuation.definition.block.tag.jsdoc" 37 | }, 38 | "3": { 39 | "name": "entity.name.type.instance.jsdoc" 40 | } 41 | } 42 | }, 43 | { 44 | "match": "^//\\s*((@)grant)\\s+(.*)", 45 | "captures": { 46 | "0": { 47 | "name": "comment.block.documentation.js" 48 | }, 49 | "1": { 50 | "name": "storage.type.class.jsdoc" 51 | }, 52 | "2": { 53 | "name": "punctuation.definition.block.tag.jsdoc" 54 | }, 55 | "3": { 56 | "name": "comment.block.documentation.js", 57 | "patterns": [ 58 | { 59 | "match": "\\b(?:none|unsafeWindow|window.close|window.focus|GM[_\\.]addStyle|GM[_\\.]deleteValue|GM[_\\.]listValues|GM[_\\.]addValueChangeListener|GM[_\\.]removeValueChangeListener|GM[_\\.]setValue|GM[_\\.]getValue|GM[_\\.]log|GM[_\\.]getResourceText|GM[_\\.]getResourceURL|GM[_\\.]registerMenuCommand|GM[_\\.]unregisterMenuCommand|GM[_\\.]openInTab|GM[_\\.]xmlhttpRequest|GM[_\\.]download|GM[_\\.]getTab|GM[_\\.]saveTab|GM[_\\.]getTabs|GM[_\\.]notification|GM[_\\.]setClipboard|GM[_\\.]info)\\s*$", 60 | "name": "constant.language.symbol-type.jsdoc" 61 | }, 62 | { "match": ".*", "name": "comment.block.documentation.js" } 63 | ] 64 | } 65 | } 66 | }, 67 | { 68 | "match": "^//\\s*((@)run-at)\\s+(.*)", 69 | "captures": { 70 | "0": { 71 | "name": "comment.block.documentation.js" 72 | }, 73 | "1": { 74 | "name": "storage.type.class.jsdoc" 75 | }, 76 | "2": { 77 | "name": "punctuation.definition.block.tag.jsdoc" 78 | }, 79 | "3": { 80 | "name": "comment.block.documentation.js", 81 | "patterns": [ 82 | { 83 | "match": "\\b(?:document-start|document-body|document-end|document-idle|context-menu)\\s*$", 84 | "name": "constant.language.symbol-type.jsdoc" 85 | }, 86 | { "match": ".*", "name": "comment.block.documentation.js" } 87 | ] 88 | } 89 | } 90 | }, 91 | { 92 | "match": "^//\\s*((@)inject-into)\\s+(.*)", 93 | "captures": { 94 | "0": { 95 | "name": "comment.block.documentation.js" 96 | }, 97 | "1": { 98 | "name": "storage.type.class.jsdoc" 99 | }, 100 | "2": { 101 | "name": "punctuation.definition.block.tag.jsdoc" 102 | }, 103 | "3": { 104 | "name": "comment.block.documentation.js", 105 | "patterns": [ 106 | { 107 | "match": "\\b(?:page|content|auto)\\s*$", 108 | "name": "constant.language.symbol-type.jsdoc" 109 | }, 110 | { "match": ".*", "name": "comment.block.documentation.js" } 111 | ] 112 | } 113 | } 114 | }, 115 | { 116 | "match": "^//\\s*((@)(?:namespace|homepage|homepageURL|website|source|icon|iconURL|defaulticon|icon64|icon64URL|updateURL|downloadURL|supportURL|require|connect))\\s+(.*)", 117 | "captures": { 118 | "0": { 119 | "name": "comment.block.documentation.js" 120 | }, 121 | "1": { 122 | "name": "storage.type.class.jsdoc" 123 | }, 124 | "2": { 125 | "name": "punctuation.definition.block.tag.jsdoc" 126 | }, 127 | "3": { 128 | "name": "comment.block.documentation.js", 129 | "patterns": [ 130 | { 131 | "match": "\\b[^\\s]+\\s+[^\\s]+", 132 | "name": "comment.block.documentation.js" 133 | }, 134 | { "match": ".*", "name": "variable.other.link.underline.jsdoc" } 135 | ] 136 | } 137 | } 138 | }, 139 | { 140 | "match": "^//\\s*((@)version)\\s+(.*)", 141 | "captures": { 142 | "0": { 143 | "name": "comment.block.documentation.js" 144 | }, 145 | "1": { 146 | "name": "storage.type.class.jsdoc" 147 | }, 148 | "2": { 149 | "name": "punctuation.definition.block.tag.jsdoc" 150 | }, 151 | "3": { 152 | "name": "comment.block.documentation.js", 153 | "patterns": [ 154 | { 155 | "match": "\\b[^\\s]+\\s+[^\\s]+", 156 | "name": "comment.block.documentation.js" 157 | }, 158 | { "match": ".*", "name": "variable.other.jsdoc" } 159 | ] 160 | } 161 | } 162 | }, 163 | { 164 | "match": "^//\\s*((@)(?:include|exclude))\\s+(.*)", 165 | "captures": { 166 | "0": { 167 | "name": "comment.block.documentation.js" 168 | }, 169 | "1": { 170 | "name": "storage.type.class.jsdoc" 171 | }, 172 | "2": { 173 | "name": "punctuation.definition.block.tag.jsdoc" 174 | }, 175 | "3": { 176 | "patterns": [{ "match": "^/", "include": "source.js#regex" }, { "include": "#glob" }] 177 | } 178 | } 179 | }, 180 | { 181 | "match": "^//\\s*((@)match)\\s+(.*)", 182 | "captures": { 183 | "0": { 184 | "name": "comment.block.documentation.js" 185 | }, 186 | "1": { 187 | "name": "storage.type.class.jsdoc" 188 | }, 189 | "2": { 190 | "name": "punctuation.definition.block.tag.jsdoc" 191 | }, 192 | "3": { 193 | "patterns": [{ "include": "#glob" }] 194 | } 195 | } 196 | }, 197 | { 198 | "match": "^//\\s*((@)resource)\\s+([^\\s]*)\\s+(.*)", 199 | "captures": { 200 | "0": { 201 | "name": "comment.block.documentation.js" 202 | }, 203 | "1": { 204 | "name": "storage.type.class.jsdoc" 205 | }, 206 | "2": { 207 | "name": "punctuation.definition.block.tag.jsdoc" 208 | }, 209 | "3": { 210 | "name": "constant.language.symbol-type.jsdoc" 211 | }, 212 | "4": { 213 | "name": "comment.block.documentation.js", 214 | "patterns": [ 215 | { 216 | "match": "\\b[^\\s]+\\s+[^\\s]+", 217 | "name": "comment.block.documentation.js" 218 | }, 219 | { "match": ".*", "name": "variable.other.link.underline.jsdoc" } 220 | ] 221 | } 222 | } 223 | }, 224 | { 225 | "match": "^//\\s*((@)(?:noframes|unwrap))\\s*.*", 226 | "captures": { 227 | "0": { 228 | "name": "comment.block.documentation.js" 229 | }, 230 | "1": { 231 | "name": "storage.type.class.jsdoc" 232 | }, 233 | "2": { 234 | "name": "punctuation.definition.block.tag.jsdoc" 235 | } 236 | } 237 | }, 238 | { 239 | "match": "^//.*", 240 | "captures": { 241 | "0": { 242 | "name": "comment.block.documentation.js" 243 | } 244 | } 245 | } 246 | ] 247 | }, 248 | "glob": { 249 | "patterns": [ 250 | { 251 | "match": "\\s*[^\\s]+\\s+[^\\s]+.*", 252 | "captures": { 253 | "0": { 254 | "name": "comment.block.documentation.js" 255 | } 256 | } 257 | }, 258 | { 259 | "match": "\\*", 260 | "captures": { 261 | "0": { 262 | "name": "keyword.operator.quantifier.regexp" 263 | } 264 | } 265 | }, 266 | { 267 | "match": "[^\\*]", 268 | "captures": { 269 | "0": { 270 | "name": "string.regexp.js" 271 | } 272 | } 273 | } 274 | ] 275 | } 276 | } 277 | } 278 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | - This folder contains all of the files necessary for your extension. 6 | - `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension. 7 | - `syntaxes/userjs.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization. 8 | - `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets. 9 | 10 | ## Get up and running straight away 11 | 12 | - Make sure the language configuration settings in `language-configuration.json` are accurate. 13 | - Press `F5` to open a new window with your extension loaded. 14 | - Create a new file with a file name suffix matching your language. 15 | - Verify that syntax highlighting works and that the language configuration settings are working. 16 | 17 | ## Make changes 18 | 19 | - You can relaunch the extension from the debug toolbar after making changes to the files listed above. 20 | - You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 21 | 22 | ## Add more language features 23 | 24 | - To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs 25 | 26 | ## Install your extension 27 | 28 | - To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. 29 | - To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. 30 | --------------------------------------------------------------------------------