├── .gitignore ├── .gitmodules ├── .vscode ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md ├── README.md ├── eex-language-configuration.json ├── elixir-language-configuration.json ├── images ├── logo.png └── screenshot.png ├── package-lock.json ├── package.json ├── src └── extension.ts ├── syntaxes ├── eex.json ├── elixir.json └── html (eex).json ├── test ├── extension.test.ts └── index.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | *.vsix 4 | 5 | # We store the build artifacts from ElixirLS here 6 | /elixir-ls-release 7 | 8 | # We copy the CHANGELOG.md from ./elixir-ls/CHANGELOG.md in vscode:prepublish 9 | /CHANGELOG.md 10 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "elixir-ls"] 2 | path = elixir-ls 3 | url = https://github.com/JakeBecker/elixir-ls 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | { 3 | "version": "0.1.0", 4 | "configurations": [ 5 | 6 | { 7 | "name": "Launch Extension", 8 | "type": "extensionHost", 9 | "request": "launch", 10 | "runtimeExecutable": "${execPath}", 11 | "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], 12 | "stopOnEntry": false, 13 | "sourceMaps": true, 14 | "outFiles": [ "${workspaceRoot}/out/src/**/*.js" ], 15 | "preLaunchTask": "build" 16 | }, 17 | { 18 | "name": "Launch Tests", 19 | "type": "extensionHost", 20 | "request": "launch", 21 | "runtimeExecutable": "${execPath}", 22 | "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ], 23 | "stopOnEntry": false, 24 | "sourceMaps": true, 25 | "outFiles": [ "${workspaceRoot}/out/test/**/*.js" ], 26 | "preLaunchTask": "build" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | "typescript.tsdk": "./node_modules/typescript/lib", // we want to use the TS server from our node_modules folder to control its version 10 | "elixirLS.projectDir": "elixir-ls" 11 | } 12 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // Available variables which can be used inside of strings. 2 | // ${workspaceRoot}: the root folder of the team 3 | // ${file}: the current opened file 4 | // ${fileBasename}: the current opened file's basename 5 | // ${fileDirname}: the current opened file's dirname 6 | // ${fileExtname}: the current opened file's extension 7 | // ${cwd}: the current working directory of the spawned process 8 | 9 | // A task runner that calls a custom npm script that compiles the extension. 10 | { 11 | "version": "0.1.0", 12 | "command": "npm", 13 | "isShellCommand": true, 14 | "suppressTaskName": true, 15 | "tasks": [ 16 | { 17 | "taskName": "build", 18 | "args": ["run", "compile"], 19 | "echoCommand": true, 20 | "isBuildCommand": true, 21 | "showOutput": "always", 22 | "problemMatcher": "$tsc-watch" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | elixir-ls/** 2 | .vscode/** 3 | typings/** 4 | out/test/** 5 | test/** 6 | src/** 7 | **/*.map 8 | .gitignore 9 | tsconfig.json 10 | vsc-extension-quickstart.md 11 | *.vsix 12 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # This project has moved! 2 | 3 | It's now being maintained by proactive volunteers from the Elixir community over at [elixir-lsp](https://github.com/elixir-lsp)/[vscode-elixir-ls](https://github.com/elixir-lsp/vscode-elixir-ls). Updates will continue to be published from that repo to the original VS Code extension, so no need to switch plugins. 4 | 5 | All new contributions should be made on that repo instead. 6 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # This project has moved! 2 | 3 | It's now being maintained by proactive volunteers from the Elixir community over at [elixir-lsp](https://github.com/elixir-lsp)/[vscode-elixir-ls](https://github.com/elixir-lsp/vscode-elixir-ls). Updates will continue to be published from that repo to the original VS Code extension, so no need to switch plugins. 4 | 5 | Please file any new issues on that repo instead. 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ElixirLS: Elixir support and debugger for VS Code 2 | 3 | Provides Elixir language support and debugger. This extension is powered by the [Elixir Language Server (ElixirLS)](https://github.com/JakeBecker/elixir-ls), an Elixir implementation of Microsoft's IDE-agnostic [Language Server Protocol](https://github.com/Microsoft/language-server-protocol) and [VS Code debug protocol](https://code.visualstudio.com/docs/extensionAPI/api-debugging). Visit its page for more information. For a guide to debugger usage in Elixir, read [this blog post](https://medium.com/@JakeBeckerCode/debugging-elixir-in-vs-code-400e21814614). 4 | 5 | # This project has moved! 6 | 7 | It's now being maintained by proactive volunteers from the Elixir community over at [elixir-lsp](https://github.com/elixir-lsp)/[vscode-elixir-ls](https://github.com/elixir-lsp/vscode-elixir-ls). Updates will continue to be published from that repo to the original VS Code extension, so no need to switch plugins. 8 | 9 | Thanks for using ElixirLS! 10 | -------------------------------------------------------------------------------- /eex-language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "blockComment": ["<%#", "%>"] 4 | }, 5 | "brackets": [ 6 | ["<", ">"], 7 | ["{", "}"], 8 | ["(", ")"], 9 | ["[", "]"] 10 | ], 11 | "autoClosingPairs": [ 12 | ["{", "}"], 13 | ["[", "]"], 14 | ["(", ")"], 15 | ["<%", " %>"], 16 | ["'", "'"], 17 | ["\"", "\""] 18 | ], 19 | "surroundingPairs": [ 20 | ["'", "'"], 21 | ["{", "}"], 22 | ["[", "]"], 23 | ["(", ")"], 24 | ["<", ">"], 25 | ["%", "%"], 26 | ["\"", "\""] 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /elixir-language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "#" 4 | }, 5 | "brackets": [ 6 | ["{", "}"], 7 | ["[", "]"], 8 | ["(", ")"] 9 | ], 10 | "surroundingPairs": [ 11 | ["{", "}"], 12 | ["[", "]"], 13 | ["(", ")"], 14 | ["'", "'"], 15 | ["\"", "\""] 16 | ], 17 | "autoClosingPairs": [ 18 | {"open": "'", "close": "'", "notIn": ["string", "comment"]}, 19 | {"open": "\"", "close": "\"", "notIn": ["comment"]}, 20 | {"open": "`", "close": "`", "notIn": ["string", "comment"]}, 21 | {"open": "(", "close": ")"}, 22 | {"open": "{", "close": "}"}, 23 | {"open": "[", "close": "]"} 24 | {"open": "<<", "close": ">>"} 25 | ], 26 | "indentationRules": { 27 | "increaseIndentPattern": "(after|else|catch|rescue|fn|^.*(do|<\\-|\\->|\\{|\\[|\\=))\\s*$", 28 | "decreaseIndentPattern": "^\\s*((\\}|\\])\\s*$|(after|else|catch|rescue|end)\\b)" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JakeBecker/vscode-elixir-ls/c5d8bb8926db615df0f8c1147c3d862a27c9c2f6/images/logo.png -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JakeBecker/vscode-elixir-ls/c5d8bb8926db615df0f8c1147c3d862a27c9c2f6/images/screenshot.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "elixir-ls", 3 | "version": "0.2.24", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/mocha": { 8 | "version": "2.2.48", 9 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 10 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 11 | "dev": true 12 | }, 13 | "@types/node": { 14 | "version": "6.14.4", 15 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.4.tgz", 16 | "integrity": "sha512-UqB7h2dVJr/KdZXRMJIhNUWT0HXVe9UNvfLCOsqiSGKAVaAp0QniYHlU9yegxyG6Ug2rc7VdAD4hYj3VghqvAw==", 17 | "dev": true 18 | }, 19 | "ajv": { 20 | "version": "6.10.0", 21 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 22 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 23 | "dev": true, 24 | "requires": { 25 | "fast-deep-equal": "^2.0.1", 26 | "fast-json-stable-stringify": "^2.0.0", 27 | "json-schema-traverse": "^0.4.1", 28 | "uri-js": "^4.2.2" 29 | } 30 | }, 31 | "ansi-cyan": { 32 | "version": "0.1.1", 33 | "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", 34 | "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", 35 | "dev": true, 36 | "requires": { 37 | "ansi-wrap": "0.1.0" 38 | } 39 | }, 40 | "ansi-red": { 41 | "version": "0.1.1", 42 | "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", 43 | "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", 44 | "dev": true, 45 | "requires": { 46 | "ansi-wrap": "0.1.0" 47 | } 48 | }, 49 | "ansi-wrap": { 50 | "version": "0.1.0", 51 | "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", 52 | "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", 53 | "dev": true 54 | }, 55 | "append-buffer": { 56 | "version": "1.0.2", 57 | "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", 58 | "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", 59 | "dev": true, 60 | "requires": { 61 | "buffer-equal": "^1.0.0" 62 | } 63 | }, 64 | "arr-diff": { 65 | "version": "1.1.0", 66 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", 67 | "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", 68 | "dev": true, 69 | "requires": { 70 | "arr-flatten": "^1.0.1", 71 | "array-slice": "^0.2.3" 72 | } 73 | }, 74 | "arr-flatten": { 75 | "version": "1.1.0", 76 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 77 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 78 | "dev": true 79 | }, 80 | "arr-union": { 81 | "version": "2.1.0", 82 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", 83 | "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", 84 | "dev": true 85 | }, 86 | "array-differ": { 87 | "version": "1.0.0", 88 | "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", 89 | "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", 90 | "dev": true 91 | }, 92 | "array-slice": { 93 | "version": "0.2.3", 94 | "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", 95 | "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", 96 | "dev": true 97 | }, 98 | "array-union": { 99 | "version": "1.0.2", 100 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 101 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 102 | "dev": true, 103 | "requires": { 104 | "array-uniq": "^1.0.1" 105 | } 106 | }, 107 | "array-uniq": { 108 | "version": "1.0.3", 109 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 110 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 111 | "dev": true 112 | }, 113 | "arrify": { 114 | "version": "1.0.1", 115 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 116 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 117 | "dev": true 118 | }, 119 | "asn1": { 120 | "version": "0.2.4", 121 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 122 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 123 | "dev": true, 124 | "requires": { 125 | "safer-buffer": "~2.1.0" 126 | } 127 | }, 128 | "assert-plus": { 129 | "version": "1.0.0", 130 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 131 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 132 | "dev": true 133 | }, 134 | "asynckit": { 135 | "version": "0.4.0", 136 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 137 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 138 | "dev": true 139 | }, 140 | "aws-sign2": { 141 | "version": "0.7.0", 142 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 143 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 144 | "dev": true 145 | }, 146 | "aws4": { 147 | "version": "1.8.0", 148 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 149 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 150 | "dev": true 151 | }, 152 | "balanced-match": { 153 | "version": "1.0.0", 154 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 155 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 156 | }, 157 | "bcrypt-pbkdf": { 158 | "version": "1.0.2", 159 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 160 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 161 | "dev": true, 162 | "requires": { 163 | "tweetnacl": "^0.14.3" 164 | } 165 | }, 166 | "block-stream": { 167 | "version": "0.0.9", 168 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 169 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 170 | "dev": true, 171 | "requires": { 172 | "inherits": "~2.0.0" 173 | } 174 | }, 175 | "brace-expansion": { 176 | "version": "1.1.11", 177 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 178 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 179 | "requires": { 180 | "balanced-match": "^1.0.0", 181 | "concat-map": "0.0.1" 182 | } 183 | }, 184 | "browser-stdout": { 185 | "version": "1.3.0", 186 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 187 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 188 | "dev": true 189 | }, 190 | "buffer-crc32": { 191 | "version": "0.2.13", 192 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 193 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 194 | "dev": true 195 | }, 196 | "buffer-equal": { 197 | "version": "1.0.0", 198 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", 199 | "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", 200 | "dev": true 201 | }, 202 | "buffer-from": { 203 | "version": "1.1.1", 204 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 205 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 206 | "dev": true 207 | }, 208 | "caseless": { 209 | "version": "0.12.0", 210 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 211 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 212 | "dev": true 213 | }, 214 | "clone": { 215 | "version": "0.2.0", 216 | "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", 217 | "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", 218 | "dev": true 219 | }, 220 | "clone-buffer": { 221 | "version": "1.0.0", 222 | "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", 223 | "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", 224 | "dev": true 225 | }, 226 | "clone-stats": { 227 | "version": "0.0.1", 228 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", 229 | "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", 230 | "dev": true 231 | }, 232 | "cloneable-readable": { 233 | "version": "1.1.2", 234 | "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", 235 | "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", 236 | "dev": true, 237 | "requires": { 238 | "inherits": "^2.0.1", 239 | "process-nextick-args": "^2.0.0", 240 | "readable-stream": "^2.3.5" 241 | } 242 | }, 243 | "combined-stream": { 244 | "version": "1.0.7", 245 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 246 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 247 | "dev": true, 248 | "requires": { 249 | "delayed-stream": "~1.0.0" 250 | } 251 | }, 252 | "commander": { 253 | "version": "2.11.0", 254 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 255 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 256 | "dev": true 257 | }, 258 | "concat-map": { 259 | "version": "0.0.1", 260 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 261 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 262 | }, 263 | "convert-source-map": { 264 | "version": "1.6.0", 265 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 266 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 267 | "dev": true, 268 | "requires": { 269 | "safe-buffer": "~5.1.1" 270 | } 271 | }, 272 | "core-util-is": { 273 | "version": "1.0.2", 274 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 275 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 276 | "dev": true 277 | }, 278 | "dashdash": { 279 | "version": "1.14.1", 280 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 281 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 282 | "dev": true, 283 | "requires": { 284 | "assert-plus": "^1.0.0" 285 | } 286 | }, 287 | "debug": { 288 | "version": "3.1.0", 289 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 290 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 291 | "dev": true, 292 | "requires": { 293 | "ms": "2.0.0" 294 | } 295 | }, 296 | "deep-assign": { 297 | "version": "1.0.0", 298 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", 299 | "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", 300 | "dev": true, 301 | "requires": { 302 | "is-obj": "^1.0.0" 303 | } 304 | }, 305 | "define-properties": { 306 | "version": "1.1.3", 307 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 308 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 309 | "dev": true, 310 | "requires": { 311 | "object-keys": "^1.0.12" 312 | } 313 | }, 314 | "delayed-stream": { 315 | "version": "1.0.0", 316 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 317 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 318 | "dev": true 319 | }, 320 | "diff": { 321 | "version": "3.3.1", 322 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", 323 | "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", 324 | "dev": true 325 | }, 326 | "duplexer": { 327 | "version": "0.1.1", 328 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 329 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 330 | "dev": true 331 | }, 332 | "duplexify": { 333 | "version": "3.7.1", 334 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", 335 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", 336 | "dev": true, 337 | "requires": { 338 | "end-of-stream": "^1.0.0", 339 | "inherits": "^2.0.1", 340 | "readable-stream": "^2.0.0", 341 | "stream-shift": "^1.0.0" 342 | } 343 | }, 344 | "ecc-jsbn": { 345 | "version": "0.1.2", 346 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 347 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 348 | "dev": true, 349 | "requires": { 350 | "jsbn": "~0.1.0", 351 | "safer-buffer": "^2.1.0" 352 | } 353 | }, 354 | "end-of-stream": { 355 | "version": "1.4.1", 356 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 357 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 358 | "dev": true, 359 | "requires": { 360 | "once": "^1.4.0" 361 | } 362 | }, 363 | "escape-string-regexp": { 364 | "version": "1.0.5", 365 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 366 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 367 | "dev": true 368 | }, 369 | "event-stream": { 370 | "version": "3.3.4", 371 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 372 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 373 | "dev": true, 374 | "requires": { 375 | "duplexer": "~0.1.1", 376 | "from": "~0", 377 | "map-stream": "~0.1.0", 378 | "pause-stream": "0.0.11", 379 | "split": "0.3", 380 | "stream-combiner": "~0.0.4", 381 | "through": "~2.3.1" 382 | } 383 | }, 384 | "extend": { 385 | "version": "3.0.2", 386 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 387 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 388 | "dev": true 389 | }, 390 | "extend-shallow": { 391 | "version": "1.1.4", 392 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", 393 | "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", 394 | "dev": true, 395 | "requires": { 396 | "kind-of": "^1.1.0" 397 | } 398 | }, 399 | "extsprintf": { 400 | "version": "1.3.0", 401 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 402 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 403 | "dev": true 404 | }, 405 | "fast-deep-equal": { 406 | "version": "2.0.1", 407 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 408 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 409 | "dev": true 410 | }, 411 | "fast-json-stable-stringify": { 412 | "version": "2.0.0", 413 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 414 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 415 | "dev": true 416 | }, 417 | "fd-slicer": { 418 | "version": "1.1.0", 419 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 420 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 421 | "dev": true, 422 | "requires": { 423 | "pend": "~1.2.0" 424 | } 425 | }, 426 | "flush-write-stream": { 427 | "version": "1.1.1", 428 | "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", 429 | "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", 430 | "dev": true, 431 | "requires": { 432 | "inherits": "^2.0.3", 433 | "readable-stream": "^2.3.6" 434 | } 435 | }, 436 | "forever-agent": { 437 | "version": "0.6.1", 438 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 439 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 440 | "dev": true 441 | }, 442 | "form-data": { 443 | "version": "2.3.3", 444 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 445 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 446 | "dev": true, 447 | "requires": { 448 | "asynckit": "^0.4.0", 449 | "combined-stream": "^1.0.6", 450 | "mime-types": "^2.1.12" 451 | } 452 | }, 453 | "from": { 454 | "version": "0.1.7", 455 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 456 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 457 | "dev": true 458 | }, 459 | "fs-mkdirp-stream": { 460 | "version": "1.0.0", 461 | "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", 462 | "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", 463 | "dev": true, 464 | "requires": { 465 | "graceful-fs": "^4.1.11", 466 | "through2": "^2.0.3" 467 | } 468 | }, 469 | "fs.realpath": { 470 | "version": "1.0.0", 471 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 472 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 473 | }, 474 | "fstream": { 475 | "version": "1.0.12", 476 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", 477 | "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", 478 | "dev": true, 479 | "requires": { 480 | "graceful-fs": "^4.1.2", 481 | "inherits": "~2.0.0", 482 | "mkdirp": ">=0.5 0", 483 | "rimraf": "2" 484 | } 485 | }, 486 | "function-bind": { 487 | "version": "1.1.1", 488 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 489 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 490 | "dev": true 491 | }, 492 | "getpass": { 493 | "version": "0.1.7", 494 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 495 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 496 | "dev": true, 497 | "requires": { 498 | "assert-plus": "^1.0.0" 499 | } 500 | }, 501 | "glob": { 502 | "version": "7.1.3", 503 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 504 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 505 | "requires": { 506 | "fs.realpath": "^1.0.0", 507 | "inflight": "^1.0.4", 508 | "inherits": "2", 509 | "minimatch": "^3.0.4", 510 | "once": "^1.3.0", 511 | "path-is-absolute": "^1.0.0" 512 | } 513 | }, 514 | "glob-parent": { 515 | "version": "3.1.0", 516 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 517 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 518 | "dev": true, 519 | "requires": { 520 | "is-glob": "^3.1.0", 521 | "path-dirname": "^1.0.0" 522 | } 523 | }, 524 | "glob-stream": { 525 | "version": "6.1.0", 526 | "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", 527 | "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", 528 | "dev": true, 529 | "requires": { 530 | "extend": "^3.0.0", 531 | "glob": "^7.1.1", 532 | "glob-parent": "^3.1.0", 533 | "is-negated-glob": "^1.0.0", 534 | "ordered-read-streams": "^1.0.0", 535 | "pumpify": "^1.3.5", 536 | "readable-stream": "^2.1.5", 537 | "remove-trailing-separator": "^1.0.1", 538 | "to-absolute-glob": "^2.0.0", 539 | "unique-stream": "^2.0.2" 540 | } 541 | }, 542 | "graceful-fs": { 543 | "version": "4.1.15", 544 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 545 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 546 | "dev": true 547 | }, 548 | "growl": { 549 | "version": "1.10.3", 550 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 551 | "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", 552 | "dev": true 553 | }, 554 | "gulp-chmod": { 555 | "version": "2.0.0", 556 | "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", 557 | "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", 558 | "dev": true, 559 | "requires": { 560 | "deep-assign": "^1.0.0", 561 | "stat-mode": "^0.2.0", 562 | "through2": "^2.0.0" 563 | } 564 | }, 565 | "gulp-filter": { 566 | "version": "5.1.0", 567 | "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", 568 | "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", 569 | "dev": true, 570 | "requires": { 571 | "multimatch": "^2.0.0", 572 | "plugin-error": "^0.1.2", 573 | "streamfilter": "^1.0.5" 574 | } 575 | }, 576 | "gulp-gunzip": { 577 | "version": "1.0.0", 578 | "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz", 579 | "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=", 580 | "dev": true, 581 | "requires": { 582 | "through2": "~0.6.5", 583 | "vinyl": "~0.4.6" 584 | }, 585 | "dependencies": { 586 | "isarray": { 587 | "version": "0.0.1", 588 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 589 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 590 | "dev": true 591 | }, 592 | "readable-stream": { 593 | "version": "1.0.34", 594 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 595 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 596 | "dev": true, 597 | "requires": { 598 | "core-util-is": "~1.0.0", 599 | "inherits": "~2.0.1", 600 | "isarray": "0.0.1", 601 | "string_decoder": "~0.10.x" 602 | } 603 | }, 604 | "string_decoder": { 605 | "version": "0.10.31", 606 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 607 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 608 | "dev": true 609 | }, 610 | "through2": { 611 | "version": "0.6.5", 612 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 613 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 614 | "dev": true, 615 | "requires": { 616 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 617 | "xtend": ">=4.0.0 <4.1.0-0" 618 | } 619 | } 620 | } 621 | }, 622 | "gulp-remote-src-vscode": { 623 | "version": "0.5.1", 624 | "resolved": "https://registry.npmjs.org/gulp-remote-src-vscode/-/gulp-remote-src-vscode-0.5.1.tgz", 625 | "integrity": "sha512-mw4OGjtC/jlCWJFhbcAlel4YPvccChlpsl3JceNiB/DLJi24/UPxXt53/N26lgI3dknEqd4ErfdHrO8sJ5bATQ==", 626 | "dev": true, 627 | "requires": { 628 | "event-stream": "3.3.4", 629 | "node.extend": "^1.1.2", 630 | "request": "^2.79.0", 631 | "through2": "^2.0.3", 632 | "vinyl": "^2.0.1" 633 | }, 634 | "dependencies": { 635 | "clone": { 636 | "version": "2.1.2", 637 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 638 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", 639 | "dev": true 640 | }, 641 | "clone-stats": { 642 | "version": "1.0.0", 643 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", 644 | "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", 645 | "dev": true 646 | }, 647 | "vinyl": { 648 | "version": "2.2.0", 649 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", 650 | "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", 651 | "dev": true, 652 | "requires": { 653 | "clone": "^2.1.1", 654 | "clone-buffer": "^1.0.0", 655 | "clone-stats": "^1.0.0", 656 | "cloneable-readable": "^1.0.0", 657 | "remove-trailing-separator": "^1.0.1", 658 | "replace-ext": "^1.0.0" 659 | } 660 | } 661 | } 662 | }, 663 | "gulp-untar": { 664 | "version": "0.0.7", 665 | "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.7.tgz", 666 | "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==", 667 | "dev": true, 668 | "requires": { 669 | "event-stream": "~3.3.4", 670 | "streamifier": "~0.1.1", 671 | "tar": "^2.2.1", 672 | "through2": "~2.0.3", 673 | "vinyl": "^1.2.0" 674 | }, 675 | "dependencies": { 676 | "clone": { 677 | "version": "1.0.4", 678 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 679 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", 680 | "dev": true 681 | }, 682 | "replace-ext": { 683 | "version": "0.0.1", 684 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 685 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", 686 | "dev": true 687 | }, 688 | "vinyl": { 689 | "version": "1.2.0", 690 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", 691 | "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", 692 | "dev": true, 693 | "requires": { 694 | "clone": "^1.0.0", 695 | "clone-stats": "^0.0.1", 696 | "replace-ext": "0.0.1" 697 | } 698 | } 699 | } 700 | }, 701 | "gulp-vinyl-zip": { 702 | "version": "2.1.2", 703 | "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.2.tgz", 704 | "integrity": "sha512-wJn09jsb8PyvUeyFF7y7ImEJqJwYy40BqL9GKfJs6UGpaGW9A+N68Q+ajsIpb9AeR6lAdjMbIdDPclIGo1/b7Q==", 705 | "dev": true, 706 | "requires": { 707 | "event-stream": "3.3.4", 708 | "queue": "^4.2.1", 709 | "through2": "^2.0.3", 710 | "vinyl": "^2.0.2", 711 | "vinyl-fs": "^3.0.3", 712 | "yauzl": "^2.2.1", 713 | "yazl": "^2.2.1" 714 | }, 715 | "dependencies": { 716 | "clone": { 717 | "version": "2.1.2", 718 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 719 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", 720 | "dev": true 721 | }, 722 | "clone-stats": { 723 | "version": "1.0.0", 724 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", 725 | "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", 726 | "dev": true 727 | }, 728 | "vinyl": { 729 | "version": "2.2.0", 730 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", 731 | "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", 732 | "dev": true, 733 | "requires": { 734 | "clone": "^2.1.1", 735 | "clone-buffer": "^1.0.0", 736 | "clone-stats": "^1.0.0", 737 | "cloneable-readable": "^1.0.0", 738 | "remove-trailing-separator": "^1.0.1", 739 | "replace-ext": "^1.0.0" 740 | } 741 | } 742 | } 743 | }, 744 | "har-schema": { 745 | "version": "2.0.0", 746 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 747 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 748 | "dev": true 749 | }, 750 | "har-validator": { 751 | "version": "5.1.3", 752 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 753 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 754 | "dev": true, 755 | "requires": { 756 | "ajv": "^6.5.5", 757 | "har-schema": "^2.0.0" 758 | } 759 | }, 760 | "has": { 761 | "version": "1.0.3", 762 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 763 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 764 | "dev": true, 765 | "requires": { 766 | "function-bind": "^1.1.1" 767 | } 768 | }, 769 | "has-flag": { 770 | "version": "2.0.0", 771 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 772 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 773 | "dev": true 774 | }, 775 | "has-symbols": { 776 | "version": "1.0.0", 777 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 778 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 779 | "dev": true 780 | }, 781 | "he": { 782 | "version": "1.1.1", 783 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 784 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 785 | "dev": true 786 | }, 787 | "http-signature": { 788 | "version": "1.2.0", 789 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 790 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 791 | "dev": true, 792 | "requires": { 793 | "assert-plus": "^1.0.0", 794 | "jsprim": "^1.2.2", 795 | "sshpk": "^1.7.0" 796 | } 797 | }, 798 | "inflight": { 799 | "version": "1.0.6", 800 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 801 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 802 | "requires": { 803 | "once": "^1.3.0", 804 | "wrappy": "1" 805 | } 806 | }, 807 | "inherits": { 808 | "version": "2.0.3", 809 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 810 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 811 | }, 812 | "interpret": { 813 | "version": "1.2.0", 814 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", 815 | "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" 816 | }, 817 | "is": { 818 | "version": "3.3.0", 819 | "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", 820 | "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", 821 | "dev": true 822 | }, 823 | "is-absolute": { 824 | "version": "1.0.0", 825 | "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", 826 | "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", 827 | "dev": true, 828 | "requires": { 829 | "is-relative": "^1.0.0", 830 | "is-windows": "^1.0.1" 831 | } 832 | }, 833 | "is-buffer": { 834 | "version": "1.1.6", 835 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 836 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 837 | "dev": true 838 | }, 839 | "is-extglob": { 840 | "version": "2.1.1", 841 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 842 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 843 | "dev": true 844 | }, 845 | "is-glob": { 846 | "version": "3.1.0", 847 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 848 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 849 | "dev": true, 850 | "requires": { 851 | "is-extglob": "^2.1.0" 852 | } 853 | }, 854 | "is-negated-glob": { 855 | "version": "1.0.0", 856 | "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", 857 | "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", 858 | "dev": true 859 | }, 860 | "is-obj": { 861 | "version": "1.0.1", 862 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 863 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 864 | "dev": true 865 | }, 866 | "is-relative": { 867 | "version": "1.0.0", 868 | "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", 869 | "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", 870 | "dev": true, 871 | "requires": { 872 | "is-unc-path": "^1.0.0" 873 | } 874 | }, 875 | "is-typedarray": { 876 | "version": "1.0.0", 877 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 878 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 879 | "dev": true 880 | }, 881 | "is-unc-path": { 882 | "version": "1.0.0", 883 | "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", 884 | "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", 885 | "dev": true, 886 | "requires": { 887 | "unc-path-regex": "^0.1.2" 888 | } 889 | }, 890 | "is-utf8": { 891 | "version": "0.2.1", 892 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 893 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 894 | "dev": true 895 | }, 896 | "is-valid-glob": { 897 | "version": "1.0.0", 898 | "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", 899 | "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", 900 | "dev": true 901 | }, 902 | "is-windows": { 903 | "version": "1.0.2", 904 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 905 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 906 | "dev": true 907 | }, 908 | "isarray": { 909 | "version": "1.0.0", 910 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 911 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 912 | "dev": true 913 | }, 914 | "isstream": { 915 | "version": "0.1.2", 916 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 917 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 918 | "dev": true 919 | }, 920 | "jsbn": { 921 | "version": "0.1.1", 922 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 923 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 924 | "dev": true 925 | }, 926 | "json-schema": { 927 | "version": "0.2.3", 928 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 929 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 930 | "dev": true 931 | }, 932 | "json-schema-traverse": { 933 | "version": "0.4.1", 934 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 935 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 936 | "dev": true 937 | }, 938 | "json-stable-stringify-without-jsonify": { 939 | "version": "1.0.1", 940 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 941 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 942 | "dev": true 943 | }, 944 | "json-stringify-safe": { 945 | "version": "5.0.1", 946 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 947 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 948 | "dev": true 949 | }, 950 | "jsprim": { 951 | "version": "1.4.1", 952 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 953 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 954 | "dev": true, 955 | "requires": { 956 | "assert-plus": "1.0.0", 957 | "extsprintf": "1.3.0", 958 | "json-schema": "0.2.3", 959 | "verror": "1.10.0" 960 | } 961 | }, 962 | "kind-of": { 963 | "version": "1.1.0", 964 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", 965 | "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", 966 | "dev": true 967 | }, 968 | "lazystream": { 969 | "version": "1.0.0", 970 | "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", 971 | "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", 972 | "dev": true, 973 | "requires": { 974 | "readable-stream": "^2.0.5" 975 | } 976 | }, 977 | "lead": { 978 | "version": "1.0.0", 979 | "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", 980 | "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", 981 | "dev": true, 982 | "requires": { 983 | "flush-write-stream": "^1.0.2" 984 | } 985 | }, 986 | "map-stream": { 987 | "version": "0.1.0", 988 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 989 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 990 | "dev": true 991 | }, 992 | "mime-db": { 993 | "version": "1.38.0", 994 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", 995 | "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", 996 | "dev": true 997 | }, 998 | "mime-types": { 999 | "version": "2.1.22", 1000 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", 1001 | "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", 1002 | "dev": true, 1003 | "requires": { 1004 | "mime-db": "~1.38.0" 1005 | } 1006 | }, 1007 | "minimatch": { 1008 | "version": "3.0.4", 1009 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1010 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1011 | "requires": { 1012 | "brace-expansion": "^1.1.7" 1013 | } 1014 | }, 1015 | "minimist": { 1016 | "version": "0.0.8", 1017 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1018 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1019 | "dev": true 1020 | }, 1021 | "mkdirp": { 1022 | "version": "0.5.1", 1023 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1024 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1025 | "dev": true, 1026 | "requires": { 1027 | "minimist": "0.0.8" 1028 | } 1029 | }, 1030 | "mocha": { 1031 | "version": "4.1.0", 1032 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", 1033 | "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", 1034 | "dev": true, 1035 | "requires": { 1036 | "browser-stdout": "1.3.0", 1037 | "commander": "2.11.0", 1038 | "debug": "3.1.0", 1039 | "diff": "3.3.1", 1040 | "escape-string-regexp": "1.0.5", 1041 | "glob": "7.1.2", 1042 | "growl": "1.10.3", 1043 | "he": "1.1.1", 1044 | "mkdirp": "0.5.1", 1045 | "supports-color": "4.4.0" 1046 | }, 1047 | "dependencies": { 1048 | "glob": { 1049 | "version": "7.1.2", 1050 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1051 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1052 | "dev": true, 1053 | "requires": { 1054 | "fs.realpath": "^1.0.0", 1055 | "inflight": "^1.0.4", 1056 | "inherits": "2", 1057 | "minimatch": "^3.0.4", 1058 | "once": "^1.3.0", 1059 | "path-is-absolute": "^1.0.0" 1060 | } 1061 | } 1062 | } 1063 | }, 1064 | "ms": { 1065 | "version": "2.0.0", 1066 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1067 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1068 | "dev": true 1069 | }, 1070 | "multimatch": { 1071 | "version": "2.1.0", 1072 | "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", 1073 | "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", 1074 | "dev": true, 1075 | "requires": { 1076 | "array-differ": "^1.0.0", 1077 | "array-union": "^1.0.1", 1078 | "arrify": "^1.0.0", 1079 | "minimatch": "^3.0.0" 1080 | } 1081 | }, 1082 | "node.extend": { 1083 | "version": "1.1.8", 1084 | "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz", 1085 | "integrity": "sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==", 1086 | "dev": true, 1087 | "requires": { 1088 | "has": "^1.0.3", 1089 | "is": "^3.2.1" 1090 | } 1091 | }, 1092 | "normalize-path": { 1093 | "version": "2.1.1", 1094 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 1095 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 1096 | "dev": true, 1097 | "requires": { 1098 | "remove-trailing-separator": "^1.0.1" 1099 | } 1100 | }, 1101 | "now-and-later": { 1102 | "version": "2.0.0", 1103 | "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", 1104 | "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", 1105 | "dev": true, 1106 | "requires": { 1107 | "once": "^1.3.2" 1108 | } 1109 | }, 1110 | "oauth-sign": { 1111 | "version": "0.9.0", 1112 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1113 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1114 | "dev": true 1115 | }, 1116 | "object-keys": { 1117 | "version": "1.1.0", 1118 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", 1119 | "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", 1120 | "dev": true 1121 | }, 1122 | "object.assign": { 1123 | "version": "4.1.0", 1124 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1125 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1126 | "dev": true, 1127 | "requires": { 1128 | "define-properties": "^1.1.2", 1129 | "function-bind": "^1.1.1", 1130 | "has-symbols": "^1.0.0", 1131 | "object-keys": "^1.0.11" 1132 | } 1133 | }, 1134 | "once": { 1135 | "version": "1.4.0", 1136 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1137 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1138 | "requires": { 1139 | "wrappy": "1" 1140 | } 1141 | }, 1142 | "ordered-read-streams": { 1143 | "version": "1.0.1", 1144 | "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", 1145 | "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", 1146 | "dev": true, 1147 | "requires": { 1148 | "readable-stream": "^2.0.1" 1149 | } 1150 | }, 1151 | "path-dirname": { 1152 | "version": "1.0.2", 1153 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 1154 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", 1155 | "dev": true 1156 | }, 1157 | "path-is-absolute": { 1158 | "version": "1.0.1", 1159 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1160 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1161 | }, 1162 | "path-parse": { 1163 | "version": "1.0.6", 1164 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1165 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 1166 | }, 1167 | "pause-stream": { 1168 | "version": "0.0.11", 1169 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1170 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1171 | "dev": true, 1172 | "requires": { 1173 | "through": "~2.3" 1174 | } 1175 | }, 1176 | "pend": { 1177 | "version": "1.2.0", 1178 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1179 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1180 | "dev": true 1181 | }, 1182 | "performance-now": { 1183 | "version": "2.1.0", 1184 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1185 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 1186 | "dev": true 1187 | }, 1188 | "plugin-error": { 1189 | "version": "0.1.2", 1190 | "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", 1191 | "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", 1192 | "dev": true, 1193 | "requires": { 1194 | "ansi-cyan": "^0.1.1", 1195 | "ansi-red": "^0.1.1", 1196 | "arr-diff": "^1.0.1", 1197 | "arr-union": "^2.0.1", 1198 | "extend-shallow": "^1.1.2" 1199 | } 1200 | }, 1201 | "process-nextick-args": { 1202 | "version": "2.0.0", 1203 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1204 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 1205 | "dev": true 1206 | }, 1207 | "psl": { 1208 | "version": "1.1.31", 1209 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 1210 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", 1211 | "dev": true 1212 | }, 1213 | "pump": { 1214 | "version": "2.0.1", 1215 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", 1216 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", 1217 | "dev": true, 1218 | "requires": { 1219 | "end-of-stream": "^1.1.0", 1220 | "once": "^1.3.1" 1221 | } 1222 | }, 1223 | "pumpify": { 1224 | "version": "1.5.1", 1225 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", 1226 | "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", 1227 | "dev": true, 1228 | "requires": { 1229 | "duplexify": "^3.6.0", 1230 | "inherits": "^2.0.3", 1231 | "pump": "^2.0.0" 1232 | } 1233 | }, 1234 | "punycode": { 1235 | "version": "2.1.1", 1236 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1237 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1238 | "dev": true 1239 | }, 1240 | "qs": { 1241 | "version": "6.5.2", 1242 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1243 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 1244 | "dev": true 1245 | }, 1246 | "querystringify": { 1247 | "version": "2.1.0", 1248 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", 1249 | "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", 1250 | "dev": true 1251 | }, 1252 | "queue": { 1253 | "version": "4.5.1", 1254 | "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", 1255 | "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", 1256 | "dev": true, 1257 | "requires": { 1258 | "inherits": "~2.0.0" 1259 | } 1260 | }, 1261 | "readable-stream": { 1262 | "version": "2.3.6", 1263 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1264 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1265 | "dev": true, 1266 | "requires": { 1267 | "core-util-is": "~1.0.0", 1268 | "inherits": "~2.0.3", 1269 | "isarray": "~1.0.0", 1270 | "process-nextick-args": "~2.0.0", 1271 | "safe-buffer": "~5.1.1", 1272 | "string_decoder": "~1.1.1", 1273 | "util-deprecate": "~1.0.1" 1274 | } 1275 | }, 1276 | "rechoir": { 1277 | "version": "0.6.2", 1278 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 1279 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 1280 | "requires": { 1281 | "resolve": "^1.1.6" 1282 | } 1283 | }, 1284 | "remove-bom-buffer": { 1285 | "version": "3.0.0", 1286 | "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", 1287 | "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", 1288 | "dev": true, 1289 | "requires": { 1290 | "is-buffer": "^1.1.5", 1291 | "is-utf8": "^0.2.1" 1292 | } 1293 | }, 1294 | "remove-bom-stream": { 1295 | "version": "1.2.0", 1296 | "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", 1297 | "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", 1298 | "dev": true, 1299 | "requires": { 1300 | "remove-bom-buffer": "^3.0.0", 1301 | "safe-buffer": "^5.1.0", 1302 | "through2": "^2.0.3" 1303 | } 1304 | }, 1305 | "remove-trailing-separator": { 1306 | "version": "1.1.0", 1307 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 1308 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 1309 | "dev": true 1310 | }, 1311 | "replace-ext": { 1312 | "version": "1.0.0", 1313 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", 1314 | "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", 1315 | "dev": true 1316 | }, 1317 | "request": { 1318 | "version": "2.88.0", 1319 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 1320 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 1321 | "dev": true, 1322 | "requires": { 1323 | "aws-sign2": "~0.7.0", 1324 | "aws4": "^1.8.0", 1325 | "caseless": "~0.12.0", 1326 | "combined-stream": "~1.0.6", 1327 | "extend": "~3.0.2", 1328 | "forever-agent": "~0.6.1", 1329 | "form-data": "~2.3.2", 1330 | "har-validator": "~5.1.0", 1331 | "http-signature": "~1.2.0", 1332 | "is-typedarray": "~1.0.0", 1333 | "isstream": "~0.1.2", 1334 | "json-stringify-safe": "~5.0.1", 1335 | "mime-types": "~2.1.19", 1336 | "oauth-sign": "~0.9.0", 1337 | "performance-now": "^2.1.0", 1338 | "qs": "~6.5.2", 1339 | "safe-buffer": "^5.1.2", 1340 | "tough-cookie": "~2.4.3", 1341 | "tunnel-agent": "^0.6.0", 1342 | "uuid": "^3.3.2" 1343 | } 1344 | }, 1345 | "requires-port": { 1346 | "version": "1.0.0", 1347 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1348 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 1349 | "dev": true 1350 | }, 1351 | "resolve": { 1352 | "version": "1.10.0", 1353 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", 1354 | "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", 1355 | "requires": { 1356 | "path-parse": "^1.0.6" 1357 | } 1358 | }, 1359 | "resolve-options": { 1360 | "version": "1.1.0", 1361 | "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", 1362 | "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", 1363 | "dev": true, 1364 | "requires": { 1365 | "value-or-function": "^3.0.0" 1366 | } 1367 | }, 1368 | "rimraf": { 1369 | "version": "2.6.3", 1370 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1371 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1372 | "dev": true, 1373 | "requires": { 1374 | "glob": "^7.1.3" 1375 | } 1376 | }, 1377 | "safe-buffer": { 1378 | "version": "5.1.2", 1379 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1380 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1381 | "dev": true 1382 | }, 1383 | "safer-buffer": { 1384 | "version": "2.1.2", 1385 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1386 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1387 | "dev": true 1388 | }, 1389 | "semver": { 1390 | "version": "5.6.0", 1391 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 1392 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 1393 | "dev": true 1394 | }, 1395 | "shelljs": { 1396 | "version": "0.8.3", 1397 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", 1398 | "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", 1399 | "requires": { 1400 | "glob": "^7.0.0", 1401 | "interpret": "^1.0.0", 1402 | "rechoir": "^0.6.2" 1403 | } 1404 | }, 1405 | "source-map": { 1406 | "version": "0.6.1", 1407 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1408 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1409 | "dev": true 1410 | }, 1411 | "source-map-support": { 1412 | "version": "0.5.11", 1413 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", 1414 | "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", 1415 | "dev": true, 1416 | "requires": { 1417 | "buffer-from": "^1.0.0", 1418 | "source-map": "^0.6.0" 1419 | } 1420 | }, 1421 | "split": { 1422 | "version": "0.3.3", 1423 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 1424 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 1425 | "dev": true, 1426 | "requires": { 1427 | "through": "2" 1428 | } 1429 | }, 1430 | "sshpk": { 1431 | "version": "1.16.1", 1432 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1433 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1434 | "dev": true, 1435 | "requires": { 1436 | "asn1": "~0.2.3", 1437 | "assert-plus": "^1.0.0", 1438 | "bcrypt-pbkdf": "^1.0.0", 1439 | "dashdash": "^1.12.0", 1440 | "ecc-jsbn": "~0.1.1", 1441 | "getpass": "^0.1.1", 1442 | "jsbn": "~0.1.0", 1443 | "safer-buffer": "^2.0.2", 1444 | "tweetnacl": "~0.14.0" 1445 | } 1446 | }, 1447 | "stat-mode": { 1448 | "version": "0.2.2", 1449 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", 1450 | "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", 1451 | "dev": true 1452 | }, 1453 | "stream-combiner": { 1454 | "version": "0.0.4", 1455 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 1456 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 1457 | "dev": true, 1458 | "requires": { 1459 | "duplexer": "~0.1.1" 1460 | } 1461 | }, 1462 | "stream-shift": { 1463 | "version": "1.0.0", 1464 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 1465 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", 1466 | "dev": true 1467 | }, 1468 | "streamfilter": { 1469 | "version": "1.0.7", 1470 | "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", 1471 | "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", 1472 | "dev": true, 1473 | "requires": { 1474 | "readable-stream": "^2.0.2" 1475 | } 1476 | }, 1477 | "streamifier": { 1478 | "version": "0.1.1", 1479 | "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", 1480 | "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", 1481 | "dev": true 1482 | }, 1483 | "string_decoder": { 1484 | "version": "1.1.1", 1485 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1486 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1487 | "dev": true, 1488 | "requires": { 1489 | "safe-buffer": "~5.1.0" 1490 | } 1491 | }, 1492 | "supports-color": { 1493 | "version": "4.4.0", 1494 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 1495 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 1496 | "dev": true, 1497 | "requires": { 1498 | "has-flag": "^2.0.0" 1499 | } 1500 | }, 1501 | "tar": { 1502 | "version": "2.2.2", 1503 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", 1504 | "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", 1505 | "dev": true, 1506 | "requires": { 1507 | "block-stream": "*", 1508 | "fstream": "^1.0.12", 1509 | "inherits": "2" 1510 | } 1511 | }, 1512 | "through": { 1513 | "version": "2.3.8", 1514 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1515 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1516 | "dev": true 1517 | }, 1518 | "through2": { 1519 | "version": "2.0.5", 1520 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1521 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1522 | "dev": true, 1523 | "requires": { 1524 | "readable-stream": "~2.3.6", 1525 | "xtend": "~4.0.1" 1526 | } 1527 | }, 1528 | "through2-filter": { 1529 | "version": "3.0.0", 1530 | "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", 1531 | "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", 1532 | "dev": true, 1533 | "requires": { 1534 | "through2": "~2.0.0", 1535 | "xtend": "~4.0.0" 1536 | } 1537 | }, 1538 | "to-absolute-glob": { 1539 | "version": "2.0.2", 1540 | "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", 1541 | "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", 1542 | "dev": true, 1543 | "requires": { 1544 | "is-absolute": "^1.0.0", 1545 | "is-negated-glob": "^1.0.0" 1546 | } 1547 | }, 1548 | "to-through": { 1549 | "version": "2.0.0", 1550 | "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", 1551 | "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", 1552 | "dev": true, 1553 | "requires": { 1554 | "through2": "^2.0.3" 1555 | } 1556 | }, 1557 | "tough-cookie": { 1558 | "version": "2.4.3", 1559 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1560 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1561 | "dev": true, 1562 | "requires": { 1563 | "psl": "^1.1.24", 1564 | "punycode": "^1.4.1" 1565 | }, 1566 | "dependencies": { 1567 | "punycode": { 1568 | "version": "1.4.1", 1569 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1570 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1571 | "dev": true 1572 | } 1573 | } 1574 | }, 1575 | "tunnel-agent": { 1576 | "version": "0.6.0", 1577 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1578 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1579 | "dev": true, 1580 | "requires": { 1581 | "safe-buffer": "^5.0.1" 1582 | } 1583 | }, 1584 | "tweetnacl": { 1585 | "version": "0.14.5", 1586 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1587 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1588 | "dev": true 1589 | }, 1590 | "typescript": { 1591 | "version": "2.9.2", 1592 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", 1593 | "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", 1594 | "dev": true 1595 | }, 1596 | "unc-path-regex": { 1597 | "version": "0.1.2", 1598 | "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 1599 | "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", 1600 | "dev": true 1601 | }, 1602 | "unique-stream": { 1603 | "version": "2.3.1", 1604 | "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", 1605 | "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", 1606 | "dev": true, 1607 | "requires": { 1608 | "json-stable-stringify-without-jsonify": "^1.0.1", 1609 | "through2-filter": "^3.0.0" 1610 | } 1611 | }, 1612 | "uri-js": { 1613 | "version": "4.2.2", 1614 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1615 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1616 | "dev": true, 1617 | "requires": { 1618 | "punycode": "^2.1.0" 1619 | } 1620 | }, 1621 | "url-parse": { 1622 | "version": "1.4.4", 1623 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", 1624 | "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", 1625 | "dev": true, 1626 | "requires": { 1627 | "querystringify": "^2.0.0", 1628 | "requires-port": "^1.0.0" 1629 | } 1630 | }, 1631 | "util-deprecate": { 1632 | "version": "1.0.2", 1633 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1634 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1635 | "dev": true 1636 | }, 1637 | "uuid": { 1638 | "version": "3.3.2", 1639 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1640 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 1641 | "dev": true 1642 | }, 1643 | "value-or-function": { 1644 | "version": "3.0.0", 1645 | "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", 1646 | "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", 1647 | "dev": true 1648 | }, 1649 | "verror": { 1650 | "version": "1.10.0", 1651 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1652 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1653 | "dev": true, 1654 | "requires": { 1655 | "assert-plus": "^1.0.0", 1656 | "core-util-is": "1.0.2", 1657 | "extsprintf": "^1.2.0" 1658 | } 1659 | }, 1660 | "vinyl": { 1661 | "version": "0.4.6", 1662 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", 1663 | "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", 1664 | "dev": true, 1665 | "requires": { 1666 | "clone": "^0.2.0", 1667 | "clone-stats": "^0.0.1" 1668 | } 1669 | }, 1670 | "vinyl-fs": { 1671 | "version": "3.0.3", 1672 | "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", 1673 | "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", 1674 | "dev": true, 1675 | "requires": { 1676 | "fs-mkdirp-stream": "^1.0.0", 1677 | "glob-stream": "^6.1.0", 1678 | "graceful-fs": "^4.0.0", 1679 | "is-valid-glob": "^1.0.0", 1680 | "lazystream": "^1.0.0", 1681 | "lead": "^1.0.0", 1682 | "object.assign": "^4.0.4", 1683 | "pumpify": "^1.3.5", 1684 | "readable-stream": "^2.3.3", 1685 | "remove-bom-buffer": "^3.0.0", 1686 | "remove-bom-stream": "^1.2.0", 1687 | "resolve-options": "^1.1.0", 1688 | "through2": "^2.0.0", 1689 | "to-through": "^2.0.0", 1690 | "value-or-function": "^3.0.0", 1691 | "vinyl": "^2.0.0", 1692 | "vinyl-sourcemap": "^1.1.0" 1693 | }, 1694 | "dependencies": { 1695 | "clone": { 1696 | "version": "2.1.2", 1697 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 1698 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", 1699 | "dev": true 1700 | }, 1701 | "clone-stats": { 1702 | "version": "1.0.0", 1703 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", 1704 | "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", 1705 | "dev": true 1706 | }, 1707 | "vinyl": { 1708 | "version": "2.2.0", 1709 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", 1710 | "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", 1711 | "dev": true, 1712 | "requires": { 1713 | "clone": "^2.1.1", 1714 | "clone-buffer": "^1.0.0", 1715 | "clone-stats": "^1.0.0", 1716 | "cloneable-readable": "^1.0.0", 1717 | "remove-trailing-separator": "^1.0.1", 1718 | "replace-ext": "^1.0.0" 1719 | } 1720 | } 1721 | } 1722 | }, 1723 | "vinyl-source-stream": { 1724 | "version": "1.1.2", 1725 | "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz", 1726 | "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=", 1727 | "dev": true, 1728 | "requires": { 1729 | "through2": "^2.0.3", 1730 | "vinyl": "^0.4.3" 1731 | } 1732 | }, 1733 | "vinyl-sourcemap": { 1734 | "version": "1.1.0", 1735 | "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", 1736 | "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", 1737 | "dev": true, 1738 | "requires": { 1739 | "append-buffer": "^1.0.2", 1740 | "convert-source-map": "^1.5.0", 1741 | "graceful-fs": "^4.1.6", 1742 | "normalize-path": "^2.1.1", 1743 | "now-and-later": "^2.0.0", 1744 | "remove-bom-buffer": "^3.0.0", 1745 | "vinyl": "^2.0.0" 1746 | }, 1747 | "dependencies": { 1748 | "clone": { 1749 | "version": "2.1.2", 1750 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 1751 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", 1752 | "dev": true 1753 | }, 1754 | "clone-stats": { 1755 | "version": "1.0.0", 1756 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", 1757 | "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", 1758 | "dev": true 1759 | }, 1760 | "vinyl": { 1761 | "version": "2.2.0", 1762 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", 1763 | "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", 1764 | "dev": true, 1765 | "requires": { 1766 | "clone": "^2.1.1", 1767 | "clone-buffer": "^1.0.0", 1768 | "clone-stats": "^1.0.0", 1769 | "cloneable-readable": "^1.0.0", 1770 | "remove-trailing-separator": "^1.0.1", 1771 | "replace-ext": "^1.0.0" 1772 | } 1773 | } 1774 | } 1775 | }, 1776 | "vscode": { 1777 | "version": "1.1.30", 1778 | "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.30.tgz", 1779 | "integrity": "sha512-YDj5w0TGOcS8XLIdekT4q6LlLV6hv1ZvuT2aGT3KJll4gMz6dUPDgo2VVAf0i0E8igbbZthwvmaUGRwW9yPIaw==", 1780 | "dev": true, 1781 | "requires": { 1782 | "glob": "^7.1.2", 1783 | "gulp-chmod": "^2.0.0", 1784 | "gulp-filter": "^5.0.1", 1785 | "gulp-gunzip": "1.0.0", 1786 | "gulp-remote-src-vscode": "^0.5.1", 1787 | "gulp-untar": "^0.0.7", 1788 | "gulp-vinyl-zip": "^2.1.2", 1789 | "mocha": "^4.0.1", 1790 | "request": "^2.88.0", 1791 | "semver": "^5.4.1", 1792 | "source-map-support": "^0.5.0", 1793 | "url-parse": "^1.4.3", 1794 | "vinyl-fs": "^3.0.3", 1795 | "vinyl-source-stream": "^1.1.0" 1796 | } 1797 | }, 1798 | "vscode-jsonrpc": { 1799 | "version": "4.0.0", 1800 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", 1801 | "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==" 1802 | }, 1803 | "vscode-languageclient": { 1804 | "version": "4.4.2", 1805 | "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-4.4.2.tgz", 1806 | "integrity": "sha512-9TUzsg1UM6n1UEyPlWbDf7tK1wJAK7UGFRmGDN8sz4KmbbDiVRh6YicaB/5oRSVTpuV47PdJpYlOl3SJ0RiK1Q==", 1807 | "requires": { 1808 | "vscode-languageserver-protocol": "^3.10.3" 1809 | } 1810 | }, 1811 | "vscode-languageserver-protocol": { 1812 | "version": "3.14.1", 1813 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz", 1814 | "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==", 1815 | "requires": { 1816 | "vscode-jsonrpc": "^4.0.0", 1817 | "vscode-languageserver-types": "3.14.0" 1818 | } 1819 | }, 1820 | "vscode-languageserver-types": { 1821 | "version": "3.14.0", 1822 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", 1823 | "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==" 1824 | }, 1825 | "wrappy": { 1826 | "version": "1.0.2", 1827 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1828 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1829 | }, 1830 | "xtend": { 1831 | "version": "4.0.1", 1832 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1833 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 1834 | "dev": true 1835 | }, 1836 | "yauzl": { 1837 | "version": "2.10.0", 1838 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1839 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1840 | "dev": true, 1841 | "requires": { 1842 | "buffer-crc32": "~0.2.3", 1843 | "fd-slicer": "~1.1.0" 1844 | } 1845 | }, 1846 | "yazl": { 1847 | "version": "2.5.1", 1848 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", 1849 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", 1850 | "dev": true, 1851 | "requires": { 1852 | "buffer-crc32": "~0.2.3" 1853 | } 1854 | } 1855 | } 1856 | } 1857 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "elixir-ls", 3 | "displayName": "ElixirLS: Elixir support and debugger", 4 | "homepage": "https://github.com/JakeBecker/elixir-ls", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/JakeBecker/vscode-elixir-ls.git" 8 | }, 9 | "icon": "images/logo.png", 10 | "description": "Elixir support with debugger, autocomplete, and more. Powered by ElixirLS.", 11 | "author": "Jake Becker", 12 | "license": "MIT", 13 | "publisher": "JakeBecker", 14 | "version": "0.2.24", 15 | "engines": { 16 | "vscode": "^1.25.1" 17 | }, 18 | "categories": [ 19 | "Programming Languages", 20 | "Debuggers" 21 | ], 22 | "activationEvents": [ 23 | "onLanguage:elixir" 24 | ], 25 | "main": "./out/src/extension", 26 | "contributes": { 27 | "configurationDefaults": { 28 | "[elixir]": { 29 | "editor.insertSpaces": true, 30 | "editor.tabSize": 2, 31 | "editor.wordBasedSuggestions": false, 32 | "editor.formatOnType": true, 33 | "editor.acceptSuggestionOnEnter": "off", 34 | "editor.trimAutoWhitespace": false, 35 | "files.trimTrailingWhitespace": true, 36 | "files.insertFinalNewline": true 37 | } 38 | }, 39 | "configuration": { 40 | "title": "ElixirLS configuration", 41 | "properties": { 42 | "elixirLS.dialyzerEnabled": { 43 | "type": "boolean", 44 | "default": true, 45 | "description": "Run ElixirLS's rapid Dialyzer when code is saved" 46 | }, 47 | "elixirLS.dialyzerWarnOpts": { 48 | "description": "Dialyzer options to enable or disable warnings. See Dialyzer's documentation for options. Note that the \"race_conditions\" option is unsupported", 49 | "type": "array", 50 | "uniqueItems": true, 51 | "items": { 52 | "type": "string", 53 | "enum": [ 54 | "error_handling", 55 | "no_behaviours", 56 | "no_contracts", 57 | "no_fail_call", 58 | "no_fun_app", 59 | "no_improper_lists", 60 | "no_match", 61 | "no_missing_calls", 62 | "no_opaque", 63 | "no_return", 64 | "no_undefined_callbacks", 65 | "no_unused", 66 | "underspecs", 67 | "unknown", 68 | "unmatched_returns", 69 | "overspecs", 70 | "specdiffs" 71 | ] 72 | }, 73 | "default": [] 74 | }, 75 | "elixirLS.dialyzerFormat": { 76 | "description": "Formatter to use for Dialyzer warnings", 77 | "type": "string", 78 | "enum": [ 79 | "dialyzer", 80 | "dialyxir_short", 81 | "dialyxir_long" 82 | ], 83 | "default": "dialyzer" 84 | }, 85 | "elixirLS.mixEnv": { 86 | "type": "string", 87 | "description": "Mix environment to use for compilation", 88 | "default": "test", 89 | "minLength": 1 90 | }, 91 | "elixirLS.projectDir": { 92 | "type": "string", 93 | "description": "Subdirectory containing Mix project if not in the project root", 94 | "minLength": 1 95 | }, 96 | "elixirLS.fetchDeps": { 97 | "type": "boolean", 98 | "description": "Automatically fetch project dependencies when compiling", 99 | "default": true 100 | }, 101 | "elixirLS.suggestSpecs": { 102 | "type": "boolean", 103 | "description": "Suggest @spec annotations inline using Dialyzer's inferred success typings (Requires Dialyzer)", 104 | "default": true 105 | } 106 | } 107 | }, 108 | "languages": [ 109 | { 110 | "id": "elixir", 111 | "aliases": [ 112 | "Elixir", 113 | "elixir" 114 | ], 115 | "extensions": [ 116 | ".ex", 117 | ".exs" 118 | ], 119 | "filenames": [ 120 | "mix.lock" 121 | ], 122 | "configuration": "./elixir-language-configuration.json" 123 | }, 124 | { 125 | "id": "EEx", 126 | "aliases": [ 127 | "EEx", 128 | "eex" 129 | ], 130 | "extensions": [ 131 | ".eex" 132 | ], 133 | "configuration": "./eex-language-configuration.json" 134 | }, 135 | { 136 | "id": "HTML (EEx)", 137 | "aliases": [ 138 | "HTML (EEx)" 139 | ], 140 | "extensions": [ 141 | ".html.eex" 142 | ], 143 | "configuration": "./eex-language-configuration.json" 144 | } 145 | ], 146 | "grammars": [ 147 | { 148 | "language": "elixir", 149 | "scopeName": "source.elixir", 150 | "path": "./syntaxes/elixir.json" 151 | }, 152 | { 153 | "language": "EEx", 154 | "scopeName": "text.elixir", 155 | "path": "./syntaxes/eex.json" 156 | }, 157 | { 158 | "language": "HTML (EEx)", 159 | "scopeName": "text.html.elixir", 160 | "path": "./syntaxes/html (eex).json" 161 | } 162 | ], 163 | "breakpoints": [ 164 | { 165 | "language": "elixir" 166 | } 167 | ], 168 | "debuggers": [ 169 | { 170 | "type": "mix_task", 171 | "label": "Mix Task", 172 | "windows": { 173 | "program": "elixir-ls-release/debugger.bat" 174 | }, 175 | "linux": { 176 | "program": "elixir-ls-release/debugger.sh" 177 | }, 178 | "osx": { 179 | "program": "elixir-ls-release/debugger.sh" 180 | }, 181 | "languages": [ 182 | "elixir" 183 | ], 184 | "configurationAttributes": { 185 | "launch": { 186 | "required": [ 187 | "projectDir" 188 | ], 189 | "properties": { 190 | "task": { 191 | "type": "string", 192 | "description": "Mix task name (without arguments)", 193 | "default": "run" 194 | }, 195 | "taskArgs": { 196 | "type": "array", 197 | "description": "List of arguments for task", 198 | "default": [], 199 | "items": { 200 | "type": "string" 201 | } 202 | }, 203 | "env": { 204 | "type": "object", 205 | "description": "Environment variables to set before debugging. You may want to set MIX_ENV in here." 206 | }, 207 | "projectDir": { 208 | "type": "string", 209 | "description": "Project root directory (usually the workspace root)", 210 | "default": "${workspaceRoot}" 211 | }, 212 | "startApps": { 213 | "type": "boolean", 214 | "description": "Run apps.start before requiring files. This should be set to true for Phoenix tests, but false in most other cases" 215 | }, 216 | "excludeModules": { 217 | "type": "array", 218 | "description": "Names of modules not to interpret. If a module contains NIFs, you should exclude it. Examples: Some.Module, :erlang_module", 219 | "items": { 220 | "type": "string", 221 | "minLength": 1 222 | }, 223 | "uniqueItems": true 224 | }, 225 | "requireFiles": { 226 | "type": "array", 227 | "description": "Paths for any .exs files to interpret before debugging in the order they should be loaded. Accepts path wildcards", 228 | "items": { 229 | "type": "string" 230 | } 231 | }, 232 | "stackTraceMode": { 233 | "type": "string", 234 | "description": ":int.stack_trace/1 option", 235 | "enum": [ 236 | "all", 237 | "no_tail", 238 | "false" 239 | ], 240 | "default": "no_tail" 241 | } 242 | } 243 | } 244 | }, 245 | "initialConfigurations": [ 246 | { 247 | "type": "mix_task", 248 | "name": "mix (Default task)", 249 | "request": "launch", 250 | "projectDir": "${workspaceRoot}" 251 | }, 252 | { 253 | "type": "mix_task", 254 | "name": "mix test", 255 | "request": "launch", 256 | "task": "test", 257 | "taskArgs": [ 258 | "--trace" 259 | ], 260 | "startApps": true, 261 | "projectDir": "${workspaceRoot}", 262 | "requireFiles": [ 263 | "test/**/test_helper.exs", 264 | "test/**/*_test.exs" 265 | ] 266 | } 267 | ], 268 | "configurationSnippets": [ 269 | { 270 | "label": "Elixir Mix", 271 | "description": "Launch a Mix task", 272 | "body": { 273 | "type": "mix_task", 274 | "request": "launch", 275 | "name": "mix ${1:task}", 276 | "task": "${1:task}", 277 | "taskArgs": [], 278 | "projectDir": "^\"\\${workspaceRoot}\"" 279 | } 280 | } 281 | ] 282 | } 283 | ], 284 | "problemMatchers": [ 285 | { 286 | "name": "mixCompileError", 287 | "owner": "elixir", 288 | "fileLocation": [ 289 | "relative", 290 | "${workspaceRoot}" 291 | ], 292 | "severity": "error", 293 | "pattern": { 294 | "regexp": "^\\*\\* \\((\\w+)\\) (.*):(\\d+): (.*)$", 295 | "file": 2, 296 | "location": 3, 297 | "message": 0 298 | } 299 | }, 300 | { 301 | "name": "mixCompileWarning", 302 | "owner": "elixir", 303 | "fileLocation": [ 304 | "relative", 305 | "${workspaceRoot}" 306 | ], 307 | "severity": "warning", 308 | "pattern": [ 309 | { 310 | "regexp": "^warning: (.*)$", 311 | "message": 1 312 | }, 313 | { 314 | "regexp": "^ (.*):(\\d+)(.*)$", 315 | "file": 1, 316 | "location": 2, 317 | "message": 3 318 | } 319 | ] 320 | }, 321 | { 322 | "name": "mixTestFailure", 323 | "owner": "elixir", 324 | "fileLocation": [ 325 | "relative", 326 | "${workspaceRoot}" 327 | ], 328 | "severity": "warning", 329 | "pattern": [ 330 | { 331 | "regexp": "^\\s*\\d+\\) (.*)$", 332 | "message": 1 333 | }, 334 | { 335 | "regexp": "^\\s*(.*):(\\d+)$", 336 | "file": 1, 337 | "location": 2 338 | } 339 | ] 340 | } 341 | ] 342 | }, 343 | "scripts": { 344 | "vscode:prepublish": "tsc -p ./ && cp elixir-ls/CHANGELOG.md . && cd elixir-ls && mix elixir_ls.release -o ../elixir-ls-release", 345 | "compile": "tsc -p ./ && cd elixir-ls && mix elixir_ls.release -o ../elixir-ls-release", 346 | "update-vscode": "node ./node_modules/vscode/bin/install", 347 | "postinstall": "node ./node_modules/vscode/bin/install" 348 | }, 349 | "devDependencies": { 350 | "@types/mocha": "^2.2.33", 351 | "@types/node": "^6.14.4", 352 | "typescript": "^2.9.2", 353 | "vscode": "^1.1.30" 354 | }, 355 | "dependencies": { 356 | "shelljs": "^0.8.3", 357 | "vscode-languageclient": "^4.4.2" 358 | } 359 | } 360 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | /* -------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | * ------------------------------------------------------------------------------------------ */ 5 | "use strict"; 6 | 7 | import * as vscode from "vscode"; 8 | import { execSync } from "child_process"; 9 | import * as shell from "shelljs"; 10 | 11 | import { workspace, ExtensionContext } from "vscode"; 12 | import { 13 | LanguageClient, 14 | LanguageClientOptions, 15 | RevealOutputChannelOn, 16 | ServerOptions, 17 | } from "vscode-languageclient"; 18 | import { platform } from "os"; 19 | 20 | export function activate(context: ExtensionContext) { 21 | testElixir(); 22 | 23 | const command = 24 | platform() == "win32" ? "language_server.bat" : "language_server.sh"; 25 | 26 | const serverOpts = { 27 | command: context.asAbsolutePath("./elixir-ls-release/" + command) 28 | }; 29 | 30 | // If the extension is launched in debug mode then the debug server options are used 31 | // Otherwise the run options are used 32 | let serverOptions: ServerOptions = { 33 | run: serverOpts, 34 | debug: serverOpts 35 | }; 36 | 37 | // Options to control the language client 38 | let clientOptions: LanguageClientOptions = { 39 | // Register the server for Elixir documents 40 | documentSelector: [ 41 | { language: "elixir", scheme: "file" }, 42 | { language: "elixir", scheme: "untitled" } 43 | ], 44 | // Don't focus the Output pane on errors because request handler errors are no big deal 45 | revealOutputChannelOn: RevealOutputChannelOn.Never, 46 | synchronize: { 47 | // Synchronize the setting section 'elixirLS' to the server 48 | configurationSection: "elixirLS", 49 | // Notify the server about file changes to Elixir files contained in the workspace 50 | fileEvents: [ 51 | workspace.createFileSystemWatcher("**/*.{ex,exs,erl,yrl,xrl,eex}") 52 | ] 53 | } 54 | }; 55 | 56 | // Create the language client and start the client. 57 | let disposable = new LanguageClient( 58 | "ElixirLS", 59 | "ElixirLS", 60 | serverOptions, 61 | clientOptions 62 | ).start(); 63 | 64 | // Push the disposable to the context's subscriptions so that the 65 | // client can be deactivated on extension deactivation 66 | context.subscriptions.push(disposable); 67 | } 68 | 69 | function testElixirCommand(command: String) { 70 | try { 71 | return execSync(`${command} -e ""`); 72 | } catch { 73 | return false; 74 | } 75 | } 76 | 77 | function testElixir() { 78 | var testResult = testElixirCommand("elixir"); 79 | if (testResult === false) { 80 | // Try finding elixir in the path directly 81 | const elixirPath = shell.which("elixir"); 82 | if (elixirPath) { 83 | testResult = testElixirCommand(elixirPath); 84 | } 85 | } 86 | 87 | if (!testResult) { 88 | vscode.window.showErrorMessage( 89 | "Failed to run 'elixir' command. ElixirLS will probably fail to launch. Logged PATH to Development Console." 90 | ); 91 | console.warn( 92 | `Failed to run 'elixir' command. Current process's PATH: ${ 93 | process.env["PATH"] 94 | }` 95 | ); 96 | return false; 97 | } else if (testResult.length > 0) { 98 | vscode.window.showErrorMessage( 99 | "Running 'elixir' command caused extraneous print to stdout. See VS Code's developer console for details." 100 | ); 101 | console.warn( 102 | "Running 'elixir -e \"\"' printed to stdout:\n" + testResult.toString() 103 | ); 104 | return false; 105 | } else { 106 | return true; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /syntaxes/eex.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileTypes": [ 3 | "eex" 4 | ], 5 | "name": "EEx", 6 | "patterns": [ 7 | { 8 | "begin": "<%+#", 9 | "captures": { 10 | "0": { 11 | "name": "punctuation.definition.comment.eex" 12 | } 13 | }, 14 | "end": "%>", 15 | "name": "comment.block.eex" 16 | }, 17 | { 18 | "begin": "<%+(?!>)[-=]*", 19 | "captures": { 20 | "0": { 21 | "name": "punctuation.section.embedded.elixir" 22 | } 23 | }, 24 | "end": "-?%>", 25 | "name": "source.elixir.embedded", 26 | "patterns": [ 27 | { 28 | "captures": { 29 | "1": { 30 | "name": "punctuation.definition.comment.elixir" 31 | } 32 | }, 33 | "match": "(#).*?(?=-?%>)", 34 | "name": "comment.line.number-sign.elixir" 35 | }, 36 | { 37 | "include": "source.elixir" 38 | } 39 | ] 40 | } 41 | ], 42 | "scopeName": "text.elixir" 43 | } 44 | -------------------------------------------------------------------------------- /syntaxes/elixir.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": "Atom Syntax Parser for Elixir Programming Language.", 3 | "fileTypes": [ 4 | "ex", 5 | "exs" 6 | ], 7 | "firstLineMatch": "^#!/.*\\belixir", 8 | "foldingStartMarker": "(after|else|catch|rescue|\\-\\>|\\{|\\[|do)\\s*$", 9 | "foldingStopMarker": "^\\s*((\\}|\\]|after|else|catch|rescue)\\s*$|end\\b)", 10 | "name": "Elixir", 11 | "patterns": [ 12 | { 13 | "captures": { 14 | "1": { 15 | "name": "keyword.control.module.elixir" 16 | }, 17 | "2": { 18 | "name": "entity.name.type.module.elixir" 19 | } 20 | }, 21 | "match": "^\\s*(defmodule)\\s+(([A-Z]\\w*\\s*(\\.)\\s*)*[A-Z]\\w*)", 22 | "name": "meta.module.elixir" 23 | }, 24 | { 25 | "begin": "@(module|type)?doc (~s)?\"\"\"", 26 | "comment": "@doc with interpolated heredocs", 27 | "end": "\\s*\"\"\"", 28 | "name": "comment.documentation.heredoc.elixir", 29 | "patterns": [ 30 | { 31 | "include": "#interpolated_elixir" 32 | }, 33 | { 34 | "include": "#escaped_char" 35 | } 36 | ] 37 | }, 38 | { 39 | "begin": "@(module|type)?doc ~s'''", 40 | "comment": "@doc with interpolated single quoted heredocs", 41 | "end": "\\s*'''", 42 | "name": "comment.documentation.heredoc.elixir", 43 | "patterns": [ 44 | { 45 | "include": "#interpolated_elixir" 46 | }, 47 | { 48 | "include": "#escaped_char" 49 | } 50 | ] 51 | }, 52 | { 53 | "begin": "@(module|type)?doc ~S\"\"\"", 54 | "comment": "@doc with heredocs is treated as documentation", 55 | "end": "\\s*\"\"\"", 56 | "name": "comment.documentation.heredoc.elixir", 57 | "patterns": [ 58 | { 59 | "include": "#escaped_char" 60 | } 61 | ] 62 | }, 63 | { 64 | "begin": "@(module|type)?doc ~S'''", 65 | "comment": "@doc with heredocs is treated as documentation", 66 | "end": "\\s*'''", 67 | "name": "comment.documentation.heredoc.elixir", 68 | "patterns": [ 69 | { 70 | "include": "#escaped_char" 71 | } 72 | ] 73 | }, 74 | { 75 | "comment": "@doc false is treated as documentation", 76 | "match": "@(module|type)?doc false", 77 | "name": "comment.documentation.false" 78 | }, 79 | { 80 | "begin": "@(module|type)?doc \"", 81 | "comment": "@doc with string is treated as documentation", 82 | "end": "\"", 83 | "name": "comment.documentation.string", 84 | "patterns": [ 85 | { 86 | "include": "#interpolated_elixir" 87 | }, 88 | { 89 | "include": "#escaped_char" 90 | } 91 | ] 92 | }, 93 | { 94 | "match": "(?[a-zA-Z_][\\w@]*(?>[?!])?)(:)(?!:)", 105 | "name": "constant.other.symbol.elixir" 106 | }, 107 | { 108 | "match": "(?_?\\h)*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0[bB][01]+)\\b", 163 | "name": "constant.numeric.elixir" 164 | }, 165 | { 166 | "comment": "Regex sigil with curlies", 167 | "begin": "~r\\{", 168 | "beginCaptures": { 169 | "0": { 170 | "name": "punctuation.section.regexp.begin.elixir" 171 | } 172 | }, 173 | "end": "\\}[eimnosux]*", 174 | "endCaptures": { 175 | "0": { 176 | "name": "punctuation.section.regexp.end.elixir" 177 | } 178 | }, 179 | "name": "string.regexp.interpolated.elixir", 180 | "patterns": [ 181 | { 182 | "include": "#regex_sub" 183 | }, 184 | { 185 | "include": "#nest_curly" 186 | } 187 | ] 188 | }, 189 | { 190 | "comment": "Regex sigil with pipes", 191 | "begin": "~r\\|", 192 | "beginCaptures": { 193 | "0": { 194 | "name": "punctuation.section.regexp.begin.elixir" 195 | } 196 | }, 197 | "end": "\\|[eimnosux]*", 198 | "endCaptures": { 199 | "0": { 200 | "name": "punctuation.section.regexp.end.elixir" 201 | } 202 | }, 203 | "name": "string.regexp.interpolated.elixir", 204 | "patterns": [ 205 | { 206 | "include": "#regex_sub" 207 | } 208 | ] 209 | }, 210 | { 211 | "comment": "Regex sigil with parens", 212 | "begin": "~r\\(", 213 | "beginCaptures": { 214 | "0": { 215 | "name": "punctuation.section.regexp.begin.elixir" 216 | } 217 | }, 218 | "end": "\\)[eimnosux]*", 219 | "endCaptures": { 220 | "0": { 221 | "name": "punctuation.section.regexp.end.elixir" 222 | } 223 | }, 224 | "name": "string.regexp.interpolated.elixir", 225 | "patterns": [ 226 | { 227 | "include": "#regex_sub" 228 | } 229 | ] 230 | }, 231 | { 232 | "comment": "Regex sigil with slashes", 233 | "begin": "~r\\/", 234 | "beginCaptures": { 235 | "0": { 236 | "name": "punctuation.section.regexp.begin.elixir" 237 | } 238 | }, 239 | "end": "\\/[eimnosux]*", 240 | "endCaptures": { 241 | "0": { 242 | "name": "punctuation.section.regexp.end.elixir" 243 | } 244 | }, 245 | "name": "string.regexp.interpolated.elixir", 246 | "patterns": [ 247 | { 248 | "include": "#regex_sub" 249 | } 250 | ] 251 | }, 252 | { 253 | "comment": "Regex sigil with brackets", 254 | "begin": "~r\\[", 255 | "beginCaptures": { 256 | "0": { 257 | "name": "punctuation.section.regexp.begin.elixir" 258 | } 259 | }, 260 | "end": "\\][eimnosux]*", 261 | "endCaptures": { 262 | "0": { 263 | "name": "punctuation.section.regexp.end.elixir" 264 | } 265 | }, 266 | "name": "string.regexp.interpolated.elixir", 267 | "patterns": [ 268 | { 269 | "include": "#regex_sub" 270 | }, 271 | { 272 | "include": "#nest_brackets" 273 | } 274 | ] 275 | }, 276 | { 277 | "comment": "Regex sigil with ltgt", 278 | "begin": "~r\\<", 279 | "beginCaptures": { 280 | "0": { 281 | "name": "punctuation.section.regexp.begin.elixir" 282 | } 283 | }, 284 | "end": "\\>[eimnosux]*", 285 | "endCaptures": { 286 | "0": { 287 | "name": "punctuation.section.regexp.end.elixir" 288 | } 289 | }, 290 | "name": "string.regexp.interpolated.elixir", 291 | "patterns": [ 292 | { 293 | "include": "#regex_sub" 294 | }, 295 | { 296 | "include": "#nest_ltgt" 297 | } 298 | ] 299 | }, 300 | { 301 | "comment": "Regex sigil with single quoted heredocs", 302 | "begin": "~r\\'\\'\\'", 303 | "beginCaptures": { 304 | "0": { 305 | "name": "punctuation.section.regexp.begin.elixir" 306 | } 307 | }, 308 | "end": "\\'\\'\\'[eimnosux]*", 309 | "endCaptures": { 310 | "0": { 311 | "name": "punctuation.section.regexp.end.elixir" 312 | } 313 | }, 314 | "name": "string.regexp.interpolated.elixir", 315 | "patterns": [ 316 | { 317 | "include": "#regex_sub" 318 | }, 319 | { 320 | "include": "#nest_ltgt" 321 | } 322 | ] 323 | }, 324 | { 325 | "comment": "Regex sigil with single quotes", 326 | "begin": "~r\\\"\\\"\\\"", 327 | "beginCaptures": { 328 | "0": { 329 | "name": "punctuation.section.regexp.begin.elixir" 330 | } 331 | }, 332 | "end": "\\\"\\\"\\\"[eimnosux]*", 333 | "endCaptures": { 334 | "0": { 335 | "name": "punctuation.section.regexp.end.elixir" 336 | } 337 | }, 338 | "name": "string.regexp.interpolated.elixir", 339 | "patterns": [ 340 | { 341 | "include": "#regex_sub" 342 | }, 343 | { 344 | "include": "#nest_ltgt" 345 | } 346 | ] 347 | }, 348 | { 349 | "comment": "Regex sigil with double quotes", 350 | "begin": "~r\\\"", 351 | "beginCaptures": { 352 | "0": { 353 | "name": "punctuation.section.regexp.begin.elixir" 354 | } 355 | }, 356 | "end": "\\\"[eimnosux]*", 357 | "endCaptures": { 358 | "0": { 359 | "name": "punctuation.section.regexp.end.elixir" 360 | } 361 | }, 362 | "name": "string.regexp.interpolated.elixir", 363 | "patterns": [ 364 | { 365 | "include": "#regex_sub" 366 | }, 367 | { 368 | "include": "#nest_ltgt" 369 | } 370 | ] 371 | }, 372 | { 373 | "comment": "Regex sigil with single quotes", 374 | "begin": "~r\\'", 375 | "beginCaptures": { 376 | "0": { 377 | "name": "punctuation.section.regexp.begin.elixir" 378 | } 379 | }, 380 | "end": "\\'[eimnosux]*", 381 | "endCaptures": { 382 | "0": { 383 | "name": "punctuation.section.regexp.end.elixir" 384 | } 385 | }, 386 | "name": "string.regexp.interpolated.elixir", 387 | "patterns": [ 388 | { 389 | "include": "#regex_sub" 390 | }, 391 | { 392 | "include": "#nest_ltgt" 393 | } 394 | ] 395 | }, 396 | { 397 | "comment": "Literal regex sigil with curlies", 398 | "begin": "~R\\{", 399 | "beginCaptures": { 400 | "0": { 401 | "name": "punctuation.section.regexp.begin.elixir" 402 | } 403 | }, 404 | "end": "\\}[eimnosux]*", 405 | "endCaptures": { 406 | "0": { 407 | "name": "punctuation.section.regexp.end.elixir" 408 | } 409 | }, 410 | "name": "string.regexp.literal.elixir", 411 | "patterns": [ 412 | { 413 | "include": "#nest_curly" 414 | } 415 | ] 416 | }, 417 | { 418 | "comment": "Literal regex sigil with pipes", 419 | "begin": "~R\\|", 420 | "beginCaptures": { 421 | "0": { 422 | "name": "punctuation.section.regexp.begin.elixir" 423 | } 424 | }, 425 | "end": "\\|[eimnosux]*", 426 | "endCaptures": { 427 | "0": { 428 | "name": "punctuation.section.regexp.end.elixir" 429 | } 430 | }, 431 | "name": "string.regexp.literal.elixir" 432 | }, 433 | { 434 | "comment": "Literal regex sigil with parens", 435 | "begin": "~R\\(", 436 | "beginCaptures": { 437 | "0": { 438 | "name": "punctuation.section.regexp.begin.elixir" 439 | } 440 | }, 441 | "end": "\\)[eimnosux]*", 442 | "endCaptures": { 443 | "0": { 444 | "name": "punctuation.section.regexp.end.elixir" 445 | } 446 | }, 447 | "name": "string.regexp.literal.elixir", 448 | "patterns": [ 449 | { 450 | "include": "#nest_parens" 451 | } 452 | ] 453 | }, 454 | { 455 | "comment": "Literal regex sigil with slashes", 456 | "begin": "~R\\/", 457 | "beginCaptures": { 458 | "0": { 459 | "name": "punctuation.section.regexp.begin.elixir" 460 | } 461 | }, 462 | "end": "\\/[eimnosux]*", 463 | "endCaptures": { 464 | "0": { 465 | "name": "punctuation.section.regexp.end.elixir" 466 | } 467 | }, 468 | "name": "string.regexp.literal.elixir" 469 | }, 470 | { 471 | "comment": "Literal regex sigil with brackets", 472 | "begin": "~R\\[", 473 | "beginCaptures": { 474 | "0": { 475 | "name": "punctuation.section.regexp.begin.elixir" 476 | } 477 | }, 478 | "end": "\\][eimnosux]*", 479 | "endCaptures": { 480 | "0": { 481 | "name": "punctuation.section.regexp.end.elixir" 482 | } 483 | }, 484 | "name": "string.regexp.literal.elixir", 485 | "patterns": [ 486 | { 487 | "include": "#nest_brackets" 488 | } 489 | ] 490 | }, 491 | { 492 | "comment": "Literal regex sigil with ltgt", 493 | "begin": "~R\\<", 494 | "beginCaptures": { 495 | "0": { 496 | "name": "punctuation.section.regexp.begin.elixir" 497 | } 498 | }, 499 | "end": "\\>[eimnosux]*", 500 | "endCaptures": { 501 | "0": { 502 | "name": "punctuation.section.regexp.end.elixir" 503 | } 504 | }, 505 | "name": "string.regexp.literal.elixir", 506 | "patterns": [ 507 | { 508 | "include": "#nest_ltgt" 509 | } 510 | ] 511 | }, 512 | { 513 | "comment": "Literal regex sigil with single quoted heredoc", 514 | "begin": "~R\\'\\'\\'", 515 | "beginCaptures": { 516 | "0": { 517 | "name": "punctuation.section.regexp.begin.elixir" 518 | } 519 | }, 520 | "end": "\\'\\'\\'[eimnosux]*", 521 | "endCaptures": { 522 | "0": { 523 | "name": "punctuation.section.regexp.end.elixir" 524 | } 525 | }, 526 | "name": "string.regexp.literal.elixir", 527 | "patterns": [ 528 | { 529 | "include": "#nest_ltgt" 530 | } 531 | ] 532 | }, 533 | { 534 | "comment": "Literal regex sigil with double quoted heredoc", 535 | "begin": "~R\\\"\\\"\\\"", 536 | "beginCaptures": { 537 | "0": { 538 | "name": "punctuation.section.regexp.begin.elixir" 539 | } 540 | }, 541 | "end": "\\\"\\\"\\\"[eimnosux]*", 542 | "endCaptures": { 543 | "0": { 544 | "name": "punctuation.section.regexp.end.elixir" 545 | } 546 | }, 547 | "name": "string.regexp.literal.elixir", 548 | "patterns": [ 549 | { 550 | "include": "#nest_ltgt" 551 | } 552 | ] 553 | }, 554 | { 555 | "comment": "Literal regex sigil with double quotes", 556 | "begin": "~R\\\"", 557 | "beginCaptures": { 558 | "0": { 559 | "name": "punctuation.section.regexp.begin.elixir" 560 | } 561 | }, 562 | "end": "\\\"[eimnosux]*", 563 | "endCaptures": { 564 | "0": { 565 | "name": "punctuation.section.regexp.end.elixir" 566 | } 567 | }, 568 | "name": "string.regexp.literal.elixir", 569 | "patterns": [ 570 | { 571 | "include": "#nest_ltgt" 572 | } 573 | ] 574 | }, 575 | { 576 | "comment": "Literal regex sigil with single quotes", 577 | "begin": "~R\\'", 578 | "beginCaptures": { 579 | "0": { 580 | "name": "punctuation.section.regexp.begin.elixir" 581 | } 582 | }, 583 | "end": "\\'[eimnosux]*", 584 | "endCaptures": { 585 | "0": { 586 | "name": "punctuation.section.regexp.end.elixir" 587 | } 588 | }, 589 | "name": "string.regexp.literal.elixir", 590 | "patterns": [ 591 | { 592 | "include": "#nest_ltgt" 593 | } 594 | ] 595 | }, 596 | { 597 | "comment": "Character list sigil with curlies", 598 | "begin": "~c\\{", 599 | "beginCaptures": { 600 | "0": { 601 | "name": "punctuation.definition.string.begin.elixir" 602 | } 603 | }, 604 | "end": "\\}[a-z]*", 605 | "endCaptures": { 606 | "0": { 607 | "name": "punctuation.definition.string.end.elixir" 608 | } 609 | }, 610 | "name": "support.function.variable.quoted.single.elixir", 611 | "patterns": [ 612 | { 613 | "include": "#interpolated_elixir" 614 | }, 615 | { 616 | "include": "#escaped_char" 617 | } 618 | ] 619 | }, 620 | { 621 | "comment": "Character list sigil with pipes", 622 | "begin": "~c\\|", 623 | "beginCaptures": { 624 | "0": { 625 | "name": "punctuation.definition.string.begin.elixir" 626 | } 627 | }, 628 | "end": "\\|[a-z]*", 629 | "endCaptures": { 630 | "0": { 631 | "name": "punctuation.definition.string.end.elixir" 632 | } 633 | }, 634 | "name": "support.function.variable.quoted.single.elixir", 635 | "patterns": [ 636 | { 637 | "include": "#interpolated_elixir" 638 | }, 639 | { 640 | "include": "#escaped_char" 641 | } 642 | ] 643 | }, 644 | { 645 | "comment": "Character list sigil with parens", 646 | "begin": "~c\\(", 647 | "beginCaptures": { 648 | "0": { 649 | "name": "punctuation.definition.string.begin.elixir" 650 | } 651 | }, 652 | "end": "\\)[a-z]*", 653 | "endCaptures": { 654 | "0": { 655 | "name": "punctuation.definition.string.end.elixir" 656 | } 657 | }, 658 | "name": "support.function.variable.quoted.single.elixir", 659 | "patterns": [ 660 | { 661 | "include": "#interpolated_elixir" 662 | }, 663 | { 664 | "include": "#escaped_char" 665 | } 666 | ] 667 | }, 668 | { 669 | "comment": "Character list sigil with curlies", 670 | "begin": "~c\\<", 671 | "beginCaptures": { 672 | "0": { 673 | "name": "punctuation.definition.string.begin.elixir" 674 | } 675 | }, 676 | "end": "\\>[a-z]*", 677 | "endCaptures": { 678 | "0": { 679 | "name": "punctuation.definition.string.end.elixir" 680 | } 681 | }, 682 | "name": "support.function.variable.quoted.single.elixir", 683 | "patterns": [ 684 | { 685 | "include": "#interpolated_elixir" 686 | }, 687 | { 688 | "include": "#escaped_char" 689 | } 690 | ] 691 | }, 692 | { 693 | "comment": "Character list sigil with curlies", 694 | "begin": "~c\\[", 695 | "beginCaptures": { 696 | "0": { 697 | "name": "punctuation.definition.string.begin.elixir" 698 | } 699 | }, 700 | "end": "\\][a-z]*", 701 | "endCaptures": { 702 | "0": { 703 | "name": "punctuation.definition.string.end.elixir" 704 | } 705 | }, 706 | "name": "support.function.variable.quoted.single.elixir", 707 | "patterns": [ 708 | { 709 | "include": "#interpolated_elixir" 710 | }, 711 | { 712 | "include": "#escaped_char" 713 | } 714 | ] 715 | }, 716 | { 717 | "comment": "Character list sigil with curlies", 718 | "begin": "~c\\/", 719 | "beginCaptures": { 720 | "0": { 721 | "name": "punctuation.definition.string.begin.elixir" 722 | } 723 | }, 724 | "end": "\\/[a-z]*", 725 | "endCaptures": { 726 | "0": { 727 | "name": "punctuation.definition.string.end.elixir" 728 | } 729 | }, 730 | "name": "support.function.variable.quoted.single.elixir", 731 | "patterns": [ 732 | { 733 | "include": "#interpolated_elixir" 734 | }, 735 | { 736 | "include": "#escaped_char" 737 | } 738 | ] 739 | }, 740 | { 741 | "comment": "Character list sigil with single quoted heredoc", 742 | "begin": "~c\\'\\'\\'", 743 | "beginCaptures": { 744 | "0": { 745 | "name": "punctuation.definition.string.begin.elixir" 746 | } 747 | }, 748 | "end": "\\'\\'\\'[a-z]*", 749 | "endCaptures": { 750 | "0": { 751 | "name": "punctuation.definition.string.end.elixir" 752 | } 753 | }, 754 | "name": "support.function.variable.quoted.single.elixir", 755 | "patterns": [ 756 | { 757 | "include": "#interpolated_elixir" 758 | }, 759 | { 760 | "include": "#escaped_char" 761 | } 762 | ] 763 | }, 764 | { 765 | "comment": "Character list sigil with double quoted heredoc", 766 | "begin": "~c\\\"\\\"\\\"", 767 | "beginCaptures": { 768 | "0": { 769 | "name": "punctuation.definition.string.begin.elixir" 770 | } 771 | }, 772 | "end": "\\\"\\\"\\\"[a-z]*", 773 | "endCaptures": { 774 | "0": { 775 | "name": "punctuation.definition.string.end.elixir" 776 | } 777 | }, 778 | "name": "support.function.variable.quoted.single.elixir", 779 | "patterns": [ 780 | { 781 | "include": "#interpolated_elixir" 782 | }, 783 | { 784 | "include": "#escaped_char" 785 | } 786 | ] 787 | }, 788 | { 789 | "comment": "Character list sigil with curlies", 790 | "begin": "~c\\'", 791 | "beginCaptures": { 792 | "0": { 793 | "name": "punctuation.definition.string.begin.elixir" 794 | } 795 | }, 796 | "end": "\\'[a-z]*", 797 | "endCaptures": { 798 | "0": { 799 | "name": "punctuation.definition.string.end.elixir" 800 | } 801 | }, 802 | "name": "support.function.variable.quoted.single.elixir", 803 | "patterns": [ 804 | { 805 | "include": "#interpolated_elixir" 806 | }, 807 | { 808 | "include": "#escaped_char" 809 | } 810 | ] 811 | }, 812 | { 813 | "comment": "Character list sigil with curlies", 814 | "begin": "~c\\\"", 815 | "beginCaptures": { 816 | "0": { 817 | "name": "punctuation.definition.string.begin.elixir" 818 | } 819 | }, 820 | "end": "\\\"[a-z]*", 821 | "endCaptures": { 822 | "0": { 823 | "name": "punctuation.definition.string.end.elixir" 824 | } 825 | }, 826 | "name": "support.function.variable.quoted.single.elixir", 827 | "patterns": [ 828 | { 829 | "include": "#interpolated_elixir" 830 | }, 831 | { 832 | "include": "#escaped_char" 833 | } 834 | ] 835 | }, 836 | { 837 | "comment": "Literal Character list sigil with curlies", 838 | "begin": "~C\\{", 839 | "beginCaptures": { 840 | "0": { 841 | "name": "punctuation.definition.string.begin.elixir" 842 | } 843 | }, 844 | "end": "\\}[a-z]*", 845 | "endCaptures": { 846 | "0": { 847 | "name": "punctuation.definition.string.end.elixir" 848 | } 849 | }, 850 | "name": "support.function.variable.quoted.single.elixir" 851 | }, 852 | { 853 | "comment": "Literal Character list sigil with pipes", 854 | "begin": "~C\\|", 855 | "beginCaptures": { 856 | "0": { 857 | "name": "punctuation.definition.string.begin.elixir" 858 | } 859 | }, 860 | "end": "\\|[a-z]*", 861 | "endCaptures": { 862 | "0": { 863 | "name": "punctuation.definition.string.end.elixir" 864 | } 865 | }, 866 | "name": "support.function.variable.quoted.single.elixir" 867 | }, 868 | { 869 | "comment": "Literal Character list sigil with parens", 870 | "begin": "~C\\(", 871 | "beginCaptures": { 872 | "0": { 873 | "name": "punctuation.definition.string.begin.elixir" 874 | } 875 | }, 876 | "end": "\\)[a-z]*", 877 | "endCaptures": { 878 | "0": { 879 | "name": "punctuation.definition.string.end.elixir" 880 | } 881 | }, 882 | "name": "support.function.variable.quoted.single.elixir" 883 | }, 884 | { 885 | "comment": "Literal Character list sigil with curlies", 886 | "begin": "~C\\<", 887 | "beginCaptures": { 888 | "0": { 889 | "name": "punctuation.definition.string.begin.elixir" 890 | } 891 | }, 892 | "end": "\\>[a-z]*", 893 | "endCaptures": { 894 | "0": { 895 | "name": "punctuation.definition.string.end.elixir" 896 | } 897 | }, 898 | "name": "support.function.variable.quoted.single.elixir" 899 | }, 900 | { 901 | "comment": "Literal Character list sigil with curlies", 902 | "begin": "~C\\[", 903 | "beginCaptures": { 904 | "0": { 905 | "name": "punctuation.definition.string.begin.elixir" 906 | } 907 | }, 908 | "end": "\\][a-z]*", 909 | "endCaptures": { 910 | "0": { 911 | "name": "punctuation.definition.string.end.elixir" 912 | } 913 | }, 914 | "name": "support.function.variable.quoted.single.elixir" 915 | }, 916 | { 917 | "comment": "Literal Character list sigil with curlies", 918 | "begin": "~C\\/", 919 | "beginCaptures": { 920 | "0": { 921 | "name": "punctuation.definition.string.begin.elixir" 922 | } 923 | }, 924 | "end": "\\/[a-z]*", 925 | "endCaptures": { 926 | "0": { 927 | "name": "punctuation.definition.string.end.elixir" 928 | } 929 | }, 930 | "name": "support.function.variable.quoted.single.elixir" 931 | }, 932 | { 933 | "comment": "Literal Character list sigil with single quoted heredoc", 934 | "begin": "~C\\'\\'\\'", 935 | "beginCaptures": { 936 | "0": { 937 | "name": "punctuation.definition.string.begin.elixir" 938 | } 939 | }, 940 | "end": "\\'\\'\\'[a-z]*", 941 | "endCaptures": { 942 | "0": { 943 | "name": "punctuation.definition.string.end.elixir" 944 | } 945 | }, 946 | "name": "support.function.variable.quoted.single.elixir" 947 | }, 948 | { 949 | "comment": "Literal Character list sigil with double quoted heredoc", 950 | "begin": "~C\\\"\\\"\\\"", 951 | "beginCaptures": { 952 | "0": { 953 | "name": "punctuation.definition.string.begin.elixir" 954 | } 955 | }, 956 | "end": "\\\"\\\"\\\"[a-z]*", 957 | "endCaptures": { 958 | "0": { 959 | "name": "punctuation.definition.string.end.elixir" 960 | } 961 | }, 962 | "name": "support.function.variable.quoted.single.elixir" 963 | }, 964 | { 965 | "comment": "Literal Character list sigil with curlies", 966 | "begin": "~C\\'", 967 | "beginCaptures": { 968 | "0": { 969 | "name": "punctuation.definition.string.begin.elixir" 970 | } 971 | }, 972 | "end": "\\'[a-z]*", 973 | "endCaptures": { 974 | "0": { 975 | "name": "punctuation.definition.string.end.elixir" 976 | } 977 | }, 978 | "name": "support.function.variable.quoted.single.elixir" 979 | }, 980 | { 981 | "comment": "Literal Character list sigil with curlies", 982 | "begin": "~C\\\"", 983 | "beginCaptures": { 984 | "0": { 985 | "name": "punctuation.definition.string.begin.elixir" 986 | } 987 | }, 988 | "end": "\\\"[a-z]*", 989 | "endCaptures": { 990 | "0": { 991 | "name": "punctuation.definition.string.end.elixir" 992 | } 993 | }, 994 | "name": "support.function.variable.quoted.single.elixir" 995 | }, 996 | { 997 | "begin": "~w\\{", 998 | "beginCaptures": { 999 | "0": { 1000 | "name": "punctuation.section.list.begin.elixir" 1001 | } 1002 | }, 1003 | "comment": "sigil (allow for interpolation)", 1004 | "end": "\\}[acs]*", 1005 | "endCaptures": { 1006 | "0": { 1007 | "name": "punctuation.section.list.end.elixir" 1008 | } 1009 | }, 1010 | "name": "string.quoted.double.interpolated.elixir", 1011 | "patterns": [ 1012 | { 1013 | "include": "#interpolated_elixir" 1014 | }, 1015 | { 1016 | "include": "#escaped_char" 1017 | }, 1018 | { 1019 | "include": "#nest_curly" 1020 | } 1021 | ] 1022 | }, 1023 | { 1024 | "begin": "~w\\[", 1025 | "beginCaptures": { 1026 | "0": { 1027 | "name": "punctuation.section.list.begin.elixir" 1028 | } 1029 | }, 1030 | "comment": "sigil (allow for interpolation)", 1031 | "end": "\\][acs]*", 1032 | "endCaptures": { 1033 | "0": { 1034 | "name": "punctuation.section.list.end.elixir" 1035 | } 1036 | }, 1037 | "name": "string.quoted.double.interpolated.elixir", 1038 | "patterns": [ 1039 | { 1040 | "include": "#interpolated_elixir" 1041 | }, 1042 | { 1043 | "include": "#escaped_char" 1044 | }, 1045 | { 1046 | "include": "#nest_brackets" 1047 | } 1048 | ] 1049 | }, 1050 | { 1051 | "begin": "~w\\<", 1052 | "beginCaptures": { 1053 | "0": { 1054 | "name": "punctuation.section.list.begin.elixir" 1055 | } 1056 | }, 1057 | "comment": "sigil (allow for interpolation)", 1058 | "end": "\\>[acs]*", 1059 | "endCaptures": { 1060 | "0": { 1061 | "name": "punctuation.section.list.end.elixir" 1062 | } 1063 | }, 1064 | "name": "string.quoted.double.interpolated.elixir", 1065 | "patterns": [ 1066 | { 1067 | "include": "#interpolated_elixir" 1068 | }, 1069 | { 1070 | "include": "#escaped_char" 1071 | }, 1072 | { 1073 | "include": "#nest_ltgt" 1074 | } 1075 | ] 1076 | }, 1077 | { 1078 | "begin": "~w\\(", 1079 | "beginCaptures": { 1080 | "0": { 1081 | "name": "punctuation.section.list.begin.elixir" 1082 | } 1083 | }, 1084 | "comment": "sigil (allow for interpolation)", 1085 | "end": "\\)[acs]*", 1086 | "endCaptures": { 1087 | "0": { 1088 | "name": "punctuation.section.list.end.elixir" 1089 | } 1090 | }, 1091 | "name": "string.quoted.double.interpolated.elixir", 1092 | "patterns": [ 1093 | { 1094 | "include": "#interpolated_elixir" 1095 | }, 1096 | { 1097 | "include": "#escaped_char" 1098 | }, 1099 | { 1100 | "include": "#nest_parens" 1101 | } 1102 | ] 1103 | }, 1104 | { 1105 | "begin": "~w\\/", 1106 | "beginCaptures": { 1107 | "0": { 1108 | "name": "punctuation.section.list.begin.elixir" 1109 | } 1110 | }, 1111 | "comment": "sigil (allow for interpolation)", 1112 | "end": "\\/[acs]*", 1113 | "endCaptures": { 1114 | "0": { 1115 | "name": "punctuation.section.list.end.elixir" 1116 | } 1117 | }, 1118 | "name": "string.quoted.double.interpolated.elixir", 1119 | "patterns": [ 1120 | { 1121 | "include": "#interpolated_elixir" 1122 | }, 1123 | { 1124 | "include": "#escaped_char" 1125 | } 1126 | ] 1127 | }, 1128 | { 1129 | "begin": "~w\\|", 1130 | "beginCaptures": { 1131 | "0": { 1132 | "name": "punctuation.section.list.begin.elixir" 1133 | } 1134 | }, 1135 | "comment": "sigil (allow for interpolation)", 1136 | "end": "\\|[acs]*", 1137 | "endCaptures": { 1138 | "0": { 1139 | "name": "punctuation.section.list.end.elixir" 1140 | } 1141 | }, 1142 | "name": "string.quoted.double.interpolated.elixir", 1143 | "patterns": [ 1144 | { 1145 | "include": "#interpolated_elixir" 1146 | }, 1147 | { 1148 | "include": "#escaped_char" 1149 | } 1150 | ] 1151 | }, 1152 | { 1153 | "comment": "Interpolated word list sigil with single quoted heredoc", 1154 | "begin": "~w\\'\\'\\'", 1155 | "beginCaptures": { 1156 | "0": { 1157 | "name": "punctuation.section.list.begin.elixir" 1158 | } 1159 | }, 1160 | "end": "\\'\\'\\'[acs]*", 1161 | "endCaptures": { 1162 | "0": { 1163 | "name": "punctuation.section.list.end.elixir" 1164 | } 1165 | }, 1166 | "name": "string.quoted.double.interpolated.elixir", 1167 | "patterns": [ 1168 | { 1169 | "include": "#interpolated_elixir" 1170 | }, 1171 | { 1172 | "include": "#escaped_char" 1173 | } 1174 | ] 1175 | }, 1176 | { 1177 | "comment": "Interpolated word list sigil with double quoted heredoc", 1178 | "begin": "~w\\\"\\\"\\\"", 1179 | "beginCaptures": { 1180 | "0": { 1181 | "name": "punctuation.section.list.begin.elixir" 1182 | } 1183 | }, 1184 | "end": "\\\"\\\"\\\"[acs]*", 1185 | "endCaptures": { 1186 | "0": { 1187 | "name": "punctuation.section.list.end.elixir" 1188 | } 1189 | }, 1190 | "name": "string.quoted.double.interpolated.elixir", 1191 | "patterns": [ 1192 | { 1193 | "include": "#interpolated_elixir" 1194 | }, 1195 | { 1196 | "include": "#escaped_char" 1197 | } 1198 | ] 1199 | }, 1200 | { 1201 | "begin": "~w\\'", 1202 | "beginCaptures": { 1203 | "0": { 1204 | "name": "punctuation.section.list.begin.elixir" 1205 | } 1206 | }, 1207 | "comment": "sigil (allow for interpolation)", 1208 | "end": "\\'[acs]*", 1209 | "endCaptures": { 1210 | "0": { 1211 | "name": "punctuation.section.list.end.elixir" 1212 | } 1213 | }, 1214 | "name": "string.quoted.double.interpolated.elixir", 1215 | "patterns": [ 1216 | { 1217 | "include": "#interpolated_elixir" 1218 | }, 1219 | { 1220 | "include": "#escaped_char" 1221 | } 1222 | ] 1223 | }, 1224 | { 1225 | "begin": "~w\\\"", 1226 | "beginCaptures": { 1227 | "0": { 1228 | "name": "punctuation.section.list.begin.elixir" 1229 | } 1230 | }, 1231 | "comment": "sigil (allow for interpolation)", 1232 | "end": "\\\"[acs]*", 1233 | "endCaptures": { 1234 | "0": { 1235 | "name": "punctuation.section.list.end.elixir" 1236 | } 1237 | }, 1238 | "name": "string.quoted.double.interpolated.elixir", 1239 | "patterns": [ 1240 | { 1241 | "include": "#interpolated_elixir" 1242 | }, 1243 | { 1244 | "include": "#escaped_char" 1245 | } 1246 | ] 1247 | }, 1248 | { 1249 | "begin": "~W\\{", 1250 | "beginCaptures": { 1251 | "0": { 1252 | "name": "punctuation.section.list.begin.elixir" 1253 | } 1254 | }, 1255 | "comment": "sigil (without interpolation)", 1256 | "end": "\\}[acs]*", 1257 | "endCaptures": { 1258 | "0": { 1259 | "name": "punctuation.section.list.end.elixir" 1260 | } 1261 | }, 1262 | "name": "string.quoted.double.literal.elixir" 1263 | }, 1264 | { 1265 | "begin": "~W\\[", 1266 | "beginCaptures": { 1267 | "0": { 1268 | "name": "punctuation.section.list.begin.elixir" 1269 | } 1270 | }, 1271 | "comment": "sigil (without interpolation)", 1272 | "end": "\\][acs]*", 1273 | "endCaptures": { 1274 | "0": { 1275 | "name": "punctuation.section.list.end.elixir" 1276 | } 1277 | }, 1278 | "name": "string.quoted.double.literal.elixir", 1279 | "patterns": [ 1280 | { 1281 | "include": "#nest_brackets" 1282 | } 1283 | ] 1284 | }, 1285 | { 1286 | "begin": "~W\\<", 1287 | "beginCaptures": { 1288 | "0": { 1289 | "name": "punctuation.section.list.begin.elixir" 1290 | } 1291 | }, 1292 | "comment": "sigil (without interpolation)", 1293 | "end": "\\>[acs]*", 1294 | "endCaptures": { 1295 | "0": { 1296 | "name": "punctuation.section.list.end.elixir" 1297 | } 1298 | }, 1299 | "name": "string.quoted.double.literal.elixir", 1300 | "patterns": [ 1301 | { 1302 | "include": "#nest_ltgt" 1303 | } 1304 | ] 1305 | }, 1306 | { 1307 | "begin": "~W\\(", 1308 | "beginCaptures": { 1309 | "0": { 1310 | "name": "punctuation.section.list.begin.elixir" 1311 | } 1312 | }, 1313 | "comment": "sigil (without interpolation)", 1314 | "end": "\\)[acs]*", 1315 | "endCaptures": { 1316 | "0": { 1317 | "name": "punctuation.section.list.end.elixir" 1318 | } 1319 | }, 1320 | "name": "string.quoted.double.literal.elixir", 1321 | "patterns": [ 1322 | { 1323 | "include": "#nest_parens" 1324 | } 1325 | ] 1326 | }, 1327 | { 1328 | "begin": "~W\\/", 1329 | "beginCaptures": { 1330 | "0": { 1331 | "name": "punctuation.section.list.begin.elixir" 1332 | } 1333 | }, 1334 | "comment": "sigil (without interpolation)", 1335 | "end": "\\/[acs]*", 1336 | "endCaptures": { 1337 | "0": { 1338 | "name": "punctuation.section.list.end.elixir" 1339 | } 1340 | }, 1341 | "name": "string.quoted.double.literal.elixir" 1342 | }, 1343 | { 1344 | "begin": "~W\\|", 1345 | "beginCaptures": { 1346 | "0": { 1347 | "name": "punctuation.section.list.begin.elixir" 1348 | } 1349 | }, 1350 | "comment": "sigil (without interpolation)", 1351 | "end": "\\|[acs]*", 1352 | "endCaptures": { 1353 | "0": { 1354 | "name": "punctuation.section.list.end.elixir" 1355 | } 1356 | }, 1357 | "name": "string.quoted.double.literal.elixir" 1358 | }, 1359 | { 1360 | "comment": "Literal word list sigil with single quoted heredoc", 1361 | "begin": "~W\\'\\'\\'", 1362 | "beginCaptures": { 1363 | "0": { 1364 | "name": "punctuation.section.list.begin.elixir" 1365 | } 1366 | }, 1367 | "end": "\\'\\'\\'[acs]*", 1368 | "endCaptures": { 1369 | "0": { 1370 | "name": "punctuation.section.list.end.elixir" 1371 | } 1372 | }, 1373 | "name": "string.quoted.double.literal.elixir" 1374 | }, 1375 | { 1376 | "comment": "Literal word list sigil with double quoted heredoc", 1377 | "begin": "~W\\\"\\\"\\\"", 1378 | "beginCaptures": { 1379 | "0": { 1380 | "name": "punctuation.section.list.begin.elixir" 1381 | } 1382 | }, 1383 | "end": "\\\"\\\"\\\"[acs]*", 1384 | "endCaptures": { 1385 | "0": { 1386 | "name": "punctuation.section.list.end.elixir" 1387 | } 1388 | }, 1389 | "name": "string.quoted.double.literal.elixir" 1390 | }, 1391 | { 1392 | "begin": "~W\\'", 1393 | "beginCaptures": { 1394 | "0": { 1395 | "name": "punctuation.section.list.begin.elixir" 1396 | } 1397 | }, 1398 | "comment": "sigil (without interpolation)", 1399 | "end": "\\'[acs]*", 1400 | "endCaptures": { 1401 | "0": { 1402 | "name": "punctuation.section.list.end.elixir" 1403 | } 1404 | }, 1405 | "name": "string.quoted.double.literal.elixir" 1406 | }, 1407 | { 1408 | "begin": "~W\\\"", 1409 | "beginCaptures": { 1410 | "0": { 1411 | "name": "punctuation.section.list.begin.elixir" 1412 | } 1413 | }, 1414 | "comment": "sigil (without interpolation)", 1415 | "end": "\\\"[acs]*", 1416 | "endCaptures": { 1417 | "0": { 1418 | "name": "punctuation.section.list.end.elixir" 1419 | } 1420 | }, 1421 | "name": "string.quoted.double.literal.elixir" 1422 | }, 1423 | { 1424 | "comment": "String Eex heredoc with double quotes", 1425 | "begin": "\\s?(~E\"\"\")$", 1426 | "beginCaptures": { 1427 | "0": { 1428 | "name": "punctuation.definition.string.begin.elixir" 1429 | }, 1430 | "1": { 1431 | "name": "string.quoted.double.heredoc.elixir" 1432 | } 1433 | }, 1434 | "end": "^\\s*(\"\"\"[a-z]*)$", 1435 | "endCaptures": { 1436 | "0": { 1437 | "name": "punctuation.definition.string.end.elixir" 1438 | }, 1439 | "1": { 1440 | "name": "string.quoted.double.heredoc.elixir" 1441 | } 1442 | }, 1443 | "name": "text.html.elixir", 1444 | "patterns": [ 1445 | { 1446 | "include": "text.html.elixir" 1447 | } 1448 | ] 1449 | }, 1450 | { 1451 | "comment": "String Eex heredoc with double quotes", 1452 | "begin": "\\s?(~e\"\"\")$", 1453 | "beginCaptures": { 1454 | "0": { 1455 | "name": "punctuation.definition.string.begin.elixir" 1456 | }, 1457 | "1": { 1458 | "name": "string.quoted.double.heredoc.elixir" 1459 | } 1460 | }, 1461 | "end": "^\\s*(\"\"\"[a-z]*)$", 1462 | "endCaptures": { 1463 | "0": { 1464 | "name": "punctuation.definition.string.end.elixir" 1465 | }, 1466 | "1": { 1467 | "name": "string.quoted.double.heredoc.elixir" 1468 | } 1469 | }, 1470 | "name": "text.html.elixir", 1471 | "patterns": [ 1472 | { 1473 | "include": "text.html.elixir" 1474 | } 1475 | ] 1476 | }, 1477 | { 1478 | "comment": "String Eex heredoc with single quotes", 1479 | "begin": "\\s?(~E''')$", 1480 | "beginCaptures": { 1481 | "0": { 1482 | "name": "punctuation.definition.string.begin.elixir" 1483 | }, 1484 | "1": { 1485 | "name": "string.quoted.double.heredoc.elixir" 1486 | } 1487 | }, 1488 | "end": "^\\s*('''[a-z]*)$", 1489 | "endCaptures": { 1490 | "0": { 1491 | "name": "punctuation.definition.string.end.elixir" 1492 | }, 1493 | "1": { 1494 | "name": "string.quoted.double.heredoc.elixir" 1495 | } 1496 | }, 1497 | "name": "text.html.elixir", 1498 | "patterns": [ 1499 | { 1500 | "include": "text.html.elixir" 1501 | } 1502 | ] 1503 | }, 1504 | { 1505 | "comment": "String Eex heredoc with single quotes", 1506 | "begin": "\\s?(~e''')$", 1507 | "beginCaptures": { 1508 | "0": { 1509 | "name": "punctuation.definition.string.begin.elixir" 1510 | }, 1511 | "1": { 1512 | "name": "string.quoted.double.heredoc.elixir" 1513 | } 1514 | }, 1515 | "end": "^\\s*('''[a-z]*)$", 1516 | "endCaptures": { 1517 | "0": { 1518 | "name": "punctuation.definition.string.end.elixir" 1519 | }, 1520 | "1": { 1521 | "name": "string.quoted.double.heredoc.elixir" 1522 | } 1523 | }, 1524 | "name": "text.html.elixir", 1525 | "patterns": [ 1526 | { 1527 | "include": "text.html.elixir" 1528 | } 1529 | ] 1530 | }, 1531 | { 1532 | "comment": "Embedded Liveview heredoc with double quotes", 1533 | "begin": "\\s?(~L\"\"\")$", 1534 | "beginCaptures": { 1535 | "0": { 1536 | "name": "punctuation.definition.string.begin.elixir" 1537 | }, 1538 | "1": { 1539 | "name": "string.quoted.double.heredoc.elixir" 1540 | } 1541 | }, 1542 | "end": "^\\s*(\"\"\"[a-z]*)$", 1543 | "endCaptures": { 1544 | "0": { 1545 | "name": "punctuation.definition.string.end.elixir" 1546 | }, 1547 | "1": { 1548 | "name": "string.quoted.double.heredoc.elixir" 1549 | } 1550 | }, 1551 | "name": "text.html.elixir", 1552 | "patterns": [ 1553 | { 1554 | "include": "text.html.elixir" 1555 | } 1556 | ] 1557 | }, 1558 | { 1559 | "comment": "Embededd Liveview heredoc with double quotes", 1560 | "begin": "\\s?(~l\"\"\")$", 1561 | "beginCaptures": { 1562 | "0": { 1563 | "name": "punctuation.definition.string.begin.elixir" 1564 | }, 1565 | "1": { 1566 | "name": "string.quoted.double.heredoc.elixir" 1567 | } 1568 | }, 1569 | "end": "^\\s*(\"\"\"[a-z]*)$", 1570 | "endCaptures": { 1571 | "0": { 1572 | "name": "punctuation.definition.string.end.elixir" 1573 | }, 1574 | "1": { 1575 | "name": "string.quoted.double.heredoc.elixir" 1576 | } 1577 | }, 1578 | "name": "text.html.elixir", 1579 | "patterns": [ 1580 | { 1581 | "include": "text.html.elixir" 1582 | } 1583 | ] 1584 | }, 1585 | { 1586 | "comment": "Embededd Liveview heredoc with single quotes", 1587 | "begin": "\\s?(~L''')$", 1588 | "beginCaptures": { 1589 | "0": { 1590 | "name": "punctuation.definition.string.begin.elixir" 1591 | }, 1592 | "1": { 1593 | "name": "string.quoted.double.heredoc.elixir" 1594 | } 1595 | }, 1596 | "end": "^\\s*('''[a-z]*)$", 1597 | "endCaptures": { 1598 | "0": { 1599 | "name": "punctuation.definition.string.end.elixir" 1600 | }, 1601 | "1": { 1602 | "name": "string.quoted.double.heredoc.elixir" 1603 | } 1604 | }, 1605 | "name": "text.html.elixir", 1606 | "patterns": [ 1607 | { 1608 | "include": "text.html.elixir" 1609 | } 1610 | ] 1611 | }, 1612 | { 1613 | "comment": "Embededd Liveview heredoc with single quotes", 1614 | "begin": "\\s?(~l''')$", 1615 | "beginCaptures": { 1616 | "0": { 1617 | "name": "punctuation.definition.string.begin.elixir" 1618 | }, 1619 | "1": { 1620 | "name": "string.quoted.double.heredoc.elixir" 1621 | } 1622 | }, 1623 | "end": "^\\s*('''[a-z]*)$", 1624 | "endCaptures": { 1625 | "0": { 1626 | "name": "punctuation.definition.string.end.elixir" 1627 | }, 1628 | "1": { 1629 | "name": "string.quoted.double.heredoc.elixir" 1630 | } 1631 | }, 1632 | "name": "text.html.elixir", 1633 | "patterns": [ 1634 | { 1635 | "include": "text.html.elixir" 1636 | } 1637 | ] 1638 | }, 1639 | { 1640 | "begin": "~[a-z](?>\"\"\")", 1641 | "beginCaptures": { 1642 | "0": { 1643 | "name": "punctuation.definition.string.begin.elixir" 1644 | } 1645 | }, 1646 | "comment": "Double-quoted heredocs sigils", 1647 | "end": "^\\s*\"\"\"", 1648 | "endCaptures": { 1649 | "0": { 1650 | "name": "punctuation.definition.string.end.elixir" 1651 | } 1652 | }, 1653 | "name": "string.quoted.double.heredoc.elixir", 1654 | "patterns": [ 1655 | { 1656 | "include": "#interpolated_elixir" 1657 | }, 1658 | { 1659 | "include": "#escaped_char" 1660 | } 1661 | ] 1662 | }, 1663 | { 1664 | "begin": "~[a-z](?>''')", 1665 | "beginCaptures": { 1666 | "0": { 1667 | "name": "punctuation.definition.string.begin.elixir" 1668 | } 1669 | }, 1670 | "comment": "Double-quoted heredocs sigils", 1671 | "end": "^\\s*'''", 1672 | "endCaptures": { 1673 | "0": { 1674 | "name": "punctuation.definition.string.end.elixir" 1675 | } 1676 | }, 1677 | "name": "string.quoted.double.heredoc.elixir", 1678 | "patterns": [ 1679 | { 1680 | "include": "#interpolated_elixir" 1681 | }, 1682 | { 1683 | "include": "#escaped_char" 1684 | } 1685 | ] 1686 | }, 1687 | { 1688 | "begin": "~[a-z]\\{", 1689 | "beginCaptures": { 1690 | "0": { 1691 | "name": "punctuation.definition.string.begin.elixir" 1692 | } 1693 | }, 1694 | "comment": "sigil (allow for interpolation)", 1695 | "end": "\\}[a-z]*", 1696 | "endCaptures": { 1697 | "0": { 1698 | "name": "punctuation.definition.string.end.elixir" 1699 | } 1700 | }, 1701 | "name": "string.quoted.double.interpolated.elixir", 1702 | "patterns": [ 1703 | { 1704 | "include": "#interpolated_elixir" 1705 | }, 1706 | { 1707 | "include": "#escaped_char" 1708 | }, 1709 | { 1710 | "include": "#nest_curly" 1711 | } 1712 | ] 1713 | }, 1714 | { 1715 | "begin": "~[a-z]\\[", 1716 | "beginCaptures": { 1717 | "0": { 1718 | "name": "punctuation.definition.string.begin.elixir" 1719 | } 1720 | }, 1721 | "comment": "sigil (allow for interpolation)", 1722 | "end": "\\][a-z]*", 1723 | "endCaptures": { 1724 | "0": { 1725 | "name": "punctuation.definition.string.end.elixir" 1726 | } 1727 | }, 1728 | "name": "string.quoted.double.interpolated.elixir", 1729 | "patterns": [ 1730 | { 1731 | "include": "#interpolated_elixir" 1732 | }, 1733 | { 1734 | "include": "#escaped_char" 1735 | }, 1736 | { 1737 | "include": "#nest_brackets" 1738 | } 1739 | ] 1740 | }, 1741 | { 1742 | "begin": "~[a-z]\\<", 1743 | "beginCaptures": { 1744 | "0": { 1745 | "name": "punctuation.definition.string.begin.elixir" 1746 | } 1747 | }, 1748 | "comment": "sigil (allow for interpolation)", 1749 | "end": "\\>[a-z]*", 1750 | "endCaptures": { 1751 | "0": { 1752 | "name": "punctuation.definition.string.end.elixir" 1753 | } 1754 | }, 1755 | "name": "string.quoted.double.interpolated.elixir", 1756 | "patterns": [ 1757 | { 1758 | "include": "#interpolated_elixir" 1759 | }, 1760 | { 1761 | "include": "#escaped_char" 1762 | }, 1763 | { 1764 | "include": "#nest_ltgt" 1765 | } 1766 | ] 1767 | }, 1768 | { 1769 | "begin": "~[a-z]\\(", 1770 | "beginCaptures": { 1771 | "0": { 1772 | "name": "punctuation.definition.string.begin.elixir" 1773 | } 1774 | }, 1775 | "comment": "sigil (allow for interpolation)", 1776 | "end": "\\)[a-z]*", 1777 | "endCaptures": { 1778 | "0": { 1779 | "name": "punctuation.definition.string.end.elixir" 1780 | } 1781 | }, 1782 | "name": "string.quoted.double.interpolated.elixir", 1783 | "patterns": [ 1784 | { 1785 | "include": "#interpolated_elixir" 1786 | }, 1787 | { 1788 | "include": "#escaped_char" 1789 | }, 1790 | { 1791 | "include": "#nest_parens" 1792 | } 1793 | ] 1794 | }, 1795 | { 1796 | "begin": "~[a-z]\\/", 1797 | "beginCaptures": { 1798 | "0": { 1799 | "name": "punctuation.definition.string.begin.elixir" 1800 | } 1801 | }, 1802 | "comment": "sigil (allow for interpolation)", 1803 | "end": "\\/[a-z]*", 1804 | "endCaptures": { 1805 | "0": { 1806 | "name": "punctuation.definition.string.end.elixir" 1807 | } 1808 | }, 1809 | "name": "string.quoted.double.interpolated.elixir", 1810 | "patterns": [ 1811 | { 1812 | "include": "#interpolated_elixir" 1813 | }, 1814 | { 1815 | "include": "#escaped_char" 1816 | } 1817 | ] 1818 | }, 1819 | { 1820 | "begin": "~[a-z]\\'", 1821 | "beginCaptures": { 1822 | "0": { 1823 | "name": "punctuation.definition.string.begin.elixir" 1824 | } 1825 | }, 1826 | "comment": "sigil (allow for interpolation)", 1827 | "end": "\\'[a-z]*", 1828 | "endCaptures": { 1829 | "0": { 1830 | "name": "punctuation.definition.string.end.elixir" 1831 | } 1832 | }, 1833 | "name": "string.quoted.double.interpolated.elixir", 1834 | "patterns": [ 1835 | { 1836 | "include": "#interpolated_elixir" 1837 | }, 1838 | { 1839 | "include": "#escaped_char" 1840 | } 1841 | ] 1842 | }, 1843 | { 1844 | "begin": "~[a-z]\\\"", 1845 | "beginCaptures": { 1846 | "0": { 1847 | "name": "punctuation.definition.string.begin.elixir" 1848 | } 1849 | }, 1850 | "comment": "sigil (allow for interpolation)", 1851 | "end": "\\\"[a-z]*", 1852 | "endCaptures": { 1853 | "0": { 1854 | "name": "punctuation.definition.string.end.elixir" 1855 | } 1856 | }, 1857 | "name": "string.quoted.double.interpolated.elixir", 1858 | "patterns": [ 1859 | { 1860 | "include": "#interpolated_elixir" 1861 | }, 1862 | { 1863 | "include": "#escaped_char" 1864 | } 1865 | ] 1866 | }, 1867 | { 1868 | "begin": "~[a-z]\\|", 1869 | "beginCaptures": { 1870 | "0": { 1871 | "name": "punctuation.definition.string.begin.elixir" 1872 | } 1873 | }, 1874 | "comment": "sigil (allow for interpolation)", 1875 | "end": "\\|[a-z]*", 1876 | "endCaptures": { 1877 | "0": { 1878 | "name": "punctuation.definition.string.end.elixir" 1879 | } 1880 | }, 1881 | "name": "string.quoted.double.interpolated.elixir", 1882 | "patterns": [ 1883 | { 1884 | "include": "#interpolated_elixir" 1885 | }, 1886 | { 1887 | "include": "#escaped_char" 1888 | } 1889 | ] 1890 | }, 1891 | { 1892 | "begin": "~[A-Z](?>\"\"\")", 1893 | "beginCaptures": { 1894 | "0": { 1895 | "name": "punctuation.definition.string.begin.elixir" 1896 | } 1897 | }, 1898 | "comment": "Double-quoted heredocs sigils", 1899 | "end": "^\\s*\"\"\"", 1900 | "endCaptures": { 1901 | "0": { 1902 | "name": "punctuation.definition.string.end.elixir" 1903 | } 1904 | }, 1905 | "name": "string.quoted.other.literal.elixir" 1906 | }, 1907 | { 1908 | "begin": "~[A-Z](?>''')", 1909 | "beginCaptures": { 1910 | "0": { 1911 | "name": "punctuation.definition.string.begin.elixir" 1912 | } 1913 | }, 1914 | "comment": "Double-quoted heredocs sigils", 1915 | "end": "^\\s*'''", 1916 | "endCaptures": { 1917 | "0": { 1918 | "name": "punctuation.definition.string.end.elixir" 1919 | } 1920 | }, 1921 | "name": "string.quoted.other.literal.elixir" 1922 | }, 1923 | { 1924 | "begin": "~[A-Z]\\{", 1925 | "beginCaptures": { 1926 | "0": { 1927 | "name": "punctuation.definition.string.begin.elixir" 1928 | } 1929 | }, 1930 | "comment": "sigil (without interpolation)", 1931 | "end": "\\}[a-z]*", 1932 | "endCaptures": { 1933 | "0": { 1934 | "name": "punctuation.definition.string.end.elixir" 1935 | } 1936 | }, 1937 | "name": "string.quoted.double.literal.elixir" 1938 | }, 1939 | { 1940 | "begin": "~[A-Z]\\[", 1941 | "beginCaptures": { 1942 | "0": { 1943 | "name": "punctuation.definition.string.begin.elixir" 1944 | } 1945 | }, 1946 | "comment": "sigil (without interpolation)", 1947 | "end": "\\][a-z]*", 1948 | "endCaptures": { 1949 | "0": { 1950 | "name": "punctuation.definition.string.end.elixir" 1951 | } 1952 | }, 1953 | "name": "string.quoted.double.literal.elixir", 1954 | "patterns": [ 1955 | { 1956 | "include": "#nest_brackets" 1957 | } 1958 | ] 1959 | }, 1960 | { 1961 | "begin": "~[A-Z]\\<", 1962 | "beginCaptures": { 1963 | "0": { 1964 | "name": "punctuation.definition.string.begin.elixir" 1965 | } 1966 | }, 1967 | "comment": "sigil (without interpolation)", 1968 | "end": "\\>[a-z]*", 1969 | "endCaptures": { 1970 | "0": { 1971 | "name": "punctuation.definition.string.end.elixir" 1972 | } 1973 | }, 1974 | "name": "string.quoted.double.literal.elixir", 1975 | "patterns": [ 1976 | { 1977 | "include": "#nest_ltgt" 1978 | } 1979 | ] 1980 | }, 1981 | { 1982 | "begin": "~[A-Z]\\(", 1983 | "beginCaptures": { 1984 | "0": { 1985 | "name": "punctuation.definition.string.begin.elixir" 1986 | } 1987 | }, 1988 | "comment": "sigil (without interpolation)", 1989 | "end": "\\)[a-z]*", 1990 | "endCaptures": { 1991 | "0": { 1992 | "name": "punctuation.definition.string.end.elixir" 1993 | } 1994 | }, 1995 | "name": "string.quoted.double.literal.elixir", 1996 | "patterns": [ 1997 | { 1998 | "include": "#nest_parens" 1999 | } 2000 | ] 2001 | }, 2002 | { 2003 | "begin": "~[A-Z]\\/", 2004 | "beginCaptures": { 2005 | "0": { 2006 | "name": "punctuation.definition.string.begin.elixir" 2007 | } 2008 | }, 2009 | "comment": "sigil (without interpolation)", 2010 | "end": "\\/[a-z]*", 2011 | "endCaptures": { 2012 | "0": { 2013 | "name": "punctuation.definition.string.end.elixir" 2014 | } 2015 | }, 2016 | "name": "string.quoted.double.literal.elixir" 2017 | }, 2018 | { 2019 | "begin": "~[A-Z]\\'", 2020 | "beginCaptures": { 2021 | "0": { 2022 | "name": "punctuation.definition.string.begin.elixir" 2023 | } 2024 | }, 2025 | "comment": "sigil (without interpolation)", 2026 | "end": "\\'[a-z]*", 2027 | "endCaptures": { 2028 | "0": { 2029 | "name": "punctuation.definition.string.end.elixir" 2030 | } 2031 | }, 2032 | "name": "string.quoted.double.literal.elixir" 2033 | }, 2034 | { 2035 | "begin": "~[A-Z]\\\"", 2036 | "beginCaptures": { 2037 | "0": { 2038 | "name": "punctuation.definition.string.begin.elixir" 2039 | } 2040 | }, 2041 | "comment": "sigil (without interpolation)", 2042 | "end": "\\\"[a-z]*", 2043 | "endCaptures": { 2044 | "0": { 2045 | "name": "punctuation.definition.string.end.elixir" 2046 | } 2047 | }, 2048 | "name": "string.quoted.double.literal.elixir" 2049 | }, 2050 | { 2051 | "begin": "~[A-Z]\\|", 2052 | "beginCaptures": { 2053 | "0": { 2054 | "name": "punctuation.definition.string.begin.elixir" 2055 | } 2056 | }, 2057 | "comment": "sigil (without interpolation)", 2058 | "end": "\\|[a-z]*", 2059 | "endCaptures": { 2060 | "0": { 2061 | "name": "punctuation.definition.string.end.elixir" 2062 | } 2063 | }, 2064 | "name": "string.quoted.double.literal.elixir" 2065 | }, 2066 | { 2067 | "begin": ":'", 2068 | "captures": { 2069 | "0": { 2070 | "name": "punctuation.definition.constant.elixir" 2071 | } 2072 | }, 2073 | "end": "'", 2074 | "name": "constant.other.symbol.single-quoted.elixir", 2075 | "patterns": [ 2076 | { 2077 | "include": "#interpolated_elixir" 2078 | }, 2079 | { 2080 | "include": "#escaped_char" 2081 | } 2082 | ] 2083 | }, 2084 | { 2085 | "comment": "symbols with single-quoted string, used as keys in Keyword lists.", 2086 | "match": "(')((?:[^'\\\\]*(?:\\\\.[^'\\\\]*)*))(':)(?!:)", 2087 | "name": "constant.other.symbol.single-quoted.elixir", 2088 | "captures": { 2089 | "1": { 2090 | "name": "punctuation.definition.constant.elixir" 2091 | }, 2092 | "2": { 2093 | "patterns": [ 2094 | { 2095 | "include": "#interpolated_elixir" 2096 | }, 2097 | { 2098 | "include": "#escaped_char" 2099 | } 2100 | ] 2101 | }, 2102 | "3": { 2103 | "name": "punctuation.definition.constant.elixir" 2104 | } 2105 | } 2106 | }, 2107 | { 2108 | "begin": ":\"", 2109 | "captures": { 2110 | "0": { 2111 | "name": "punctuation.definition.constant.elixir" 2112 | } 2113 | }, 2114 | "end": "\"", 2115 | "name": "constant.other.symbol.double-quoted.elixir", 2116 | "patterns": [ 2117 | { 2118 | "include": "#interpolated_elixir" 2119 | }, 2120 | { 2121 | "include": "#escaped_char" 2122 | } 2123 | ] 2124 | }, 2125 | { 2126 | "begin": "(?>''')", 2127 | "beginCaptures": { 2128 | "0": { 2129 | "name": "punctuation.definition.string.begin.elixir" 2130 | } 2131 | }, 2132 | "comment": "Single-quoted heredocs", 2133 | "end": "^\\s*'''", 2134 | "endCaptures": { 2135 | "0": { 2136 | "name": "punctuation.definition.string.end.elixir" 2137 | } 2138 | }, 2139 | "name": "support.function.variable.quoted.single.heredoc.elixir", 2140 | "patterns": [ 2141 | { 2142 | "include": "#interpolated_elixir" 2143 | }, 2144 | { 2145 | "include": "#escaped_char" 2146 | } 2147 | ] 2148 | }, 2149 | { 2150 | "begin": "'", 2151 | "beginCaptures": { 2152 | "0": { 2153 | "name": "punctuation.definition.string.begin.elixir" 2154 | } 2155 | }, 2156 | "comment": "single quoted string (allows for interpolation)", 2157 | "end": "'", 2158 | "endCaptures": { 2159 | "0": { 2160 | "name": "punctuation.definition.string.end.elixir" 2161 | } 2162 | }, 2163 | "name": "support.function.variable.quoted.single.elixir", 2164 | "patterns": [ 2165 | { 2166 | "include": "#interpolated_elixir" 2167 | }, 2168 | { 2169 | "include": "#escaped_char" 2170 | } 2171 | ] 2172 | }, 2173 | { 2174 | "begin": "(?>\"\"\")", 2175 | "beginCaptures": { 2176 | "0": { 2177 | "name": "punctuation.definition.string.begin.elixir" 2178 | } 2179 | }, 2180 | "comment": "Double-quoted heredocs", 2181 | "end": "^\\s*\"\"\"", 2182 | "endCaptures": { 2183 | "0": { 2184 | "name": "punctuation.definition.string.end.elixir" 2185 | } 2186 | }, 2187 | "name": "string.quoted.double.heredoc.elixir", 2188 | "patterns": [ 2189 | { 2190 | "include": "#interpolated_elixir" 2191 | }, 2192 | { 2193 | "include": "#escaped_char" 2194 | } 2195 | ] 2196 | }, 2197 | { 2198 | "comment": "symbols defined by double-quoted string, used as keys in Keyword lists.", 2199 | "match": "(\")((?:[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*))(\":)(?!:)", 2200 | "name": "constant.other.symbol.double-quoted.elixir", 2201 | "captures": { 2202 | "1": { 2203 | "name": "punctuation.definition.constant.elixir" 2204 | }, 2205 | "2": { 2206 | "patterns": [ 2207 | { 2208 | "include": "#interpolated_elixir" 2209 | }, 2210 | { 2211 | "include": "#escaped_char" 2212 | } 2213 | ] 2214 | }, 2215 | "3": { 2216 | "name": "punctuation.definition.constant.elixir" 2217 | } 2218 | } 2219 | }, 2220 | { 2221 | "begin": "\"", 2222 | "beginCaptures": { 2223 | "0": { 2224 | "name": "punctuation.definition.string.begin.elixir" 2225 | } 2226 | }, 2227 | "comment": "double quoted string (allows for interpolation)", 2228 | "end": "\"", 2229 | "endCaptures": { 2230 | "0": { 2231 | "name": "punctuation.definition.string.end.elixir" 2232 | } 2233 | }, 2234 | "name": "string.quoted.double.elixir", 2235 | "patterns": [ 2236 | { 2237 | "include": "#interpolated_elixir" 2238 | }, 2239 | { 2240 | "include": "#escaped_char" 2241 | } 2242 | ] 2243 | }, 2244 | { 2245 | "begin": "#", 2246 | "beginCaptures": { 2247 | "0": { 2248 | "name": "punctuation.definition.comment.elixir" 2249 | } 2250 | }, 2251 | "end": "\\n", 2252 | "name": "comment.line.number-sign.elixir" 2253 | }, 2254 | { 2255 | "match": "\\b_([\\w]+[?!]?)", 2256 | "name": "comment.unused.elixir" 2257 | }, 2258 | { 2259 | "match": "\\b_\\b", 2260 | "name": "comment.wildcard.elixir" 2261 | }, 2262 | { 2263 | "comment": "matches questionmark-letters.\n\nexamples (1st alternation = hex):\n?\\x1 ?\\x61\n\nexamples (2nd alternation = octal):\n?\\0 ?\\07 ?\\017\n\nexamples (3rd alternation = escaped):\n?\\n ?\\b\n\nexamples (4th alternation = meta-ctrl):\n?\\C-a ?\\M-a ?\\C-\\M-\\C-\\M-a\n\nexamples (4th alternation = normal):\n?a ?A ?0\n?* ?\" ?(\n?. ?#\n\n\nthe negative lookbehind prevents against matching\np(42.tainted?)", 2264 | "match": "(?>>|~~~)", 2269 | "name": "keyword.operator.bitwise.elixir" 2270 | }, 2271 | { 2272 | "comment": "matches: | ++ -- ** \\ <- <> << >> :: .. |> => -> <|> <~> <~ <<~ ~> ~>>", 2273 | "match": "\\+\\+|\\-\\-|\\*\\*|\\\\\\\\|\\<\\-|<\\<\\~|\\<\\>|\\<\\<|\\>\\>|\\:\\:|\\.\\.|\\|>|=>|<\\|\\>|<~>|->|~>>|~>|<~|(?=?|=~", 2278 | "name": "keyword.operator.comparison.elixir" 2279 | }, 2280 | { 2281 | "match": "(?<=[ \\t])!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b", 2282 | "name": "keyword.operator.logical.elixir" 2283 | }, 2284 | { 2285 | "match": "(\\*|\\+|\\-|/)", 2286 | "name": "keyword.operator.arithmetic.elixir" 2287 | }, 2288 | { 2289 | "match": "=", 2290 | "name": "keyword.operator.assignment.elixir" 2291 | }, 2292 | { 2293 | "match": "\\;", 2294 | "name": "punctuation.separator.statement.elixir" 2295 | }, 2296 | { 2297 | "match": ",", 2298 | "name": "punctuation.separator.object.elixir" 2299 | }, 2300 | { 2301 | "match": "\\.", 2302 | "name": "punctuation.separator.method.elixir" 2303 | }, 2304 | { 2305 | "match": "\\{|\\}", 2306 | "name": "punctuation.section.scope.elixir" 2307 | }, 2308 | { 2309 | "match": "\\[\\]|\\[|\\]", 2310 | "name": "punctuation.section.array.elixir" 2311 | }, 2312 | { 2313 | "match": "\\(|\\)", 2314 | "name": "punctuation.section.function.elixir" 2315 | }, 2316 | { 2317 | "captures": { 2318 | "1": { 2319 | "name": "punctuation.definition.variable.elixir" 2320 | } 2321 | }, 2322 | "match": "(@)[a-zA-Z_]\\w*", 2323 | "name": "variable.other.readwrite.module.elixir" 2324 | }, 2325 | { 2326 | "captures": { 2327 | "1": { 2328 | "name": "punctuation.definition.variable.elixir" 2329 | } 2330 | }, 2331 | "match": "(&)\\d*", 2332 | "name": "variable.other.anonymous.elixir" 2333 | }, 2334 | { 2335 | "captures": { 2336 | "1": { 2337 | "name": "punctuation.definition.constant.elixir" 2338 | } 2339 | }, 2340 | "comment": "symbols", 2341 | "match": "(?[a-zA-Z_][\\w@]*(?>[?!]|=(?![>=]))?|\\<\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\-|\\|>|=>|~|~=|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|>=?|<=?|&&?&?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(\\^\\^)?)", 2342 | "name": "constant.other.symbol.elixir" 2343 | }, 2344 | { 2345 | "match": ":", 2346 | "name": "punctuation.separator.other.elixir" 2347 | } 2348 | ], 2349 | "repository": { 2350 | "escaped_char": { 2351 | "match": "\\\\(?:[0-7]{1,3}|x[\\da-fA-F]{1,2}|.)", 2352 | "name": "constant.character.escape.elixir" 2353 | }, 2354 | "function_parameter": { 2355 | "match": "[_$a-z][$\\w]*[?!]?", 2356 | "name": "parameter.variable.function.elixir" 2357 | }, 2358 | "interpolated_elixir": { 2359 | "patterns": [ 2360 | { 2361 | "captures": { 2362 | "0": { 2363 | "name": "punctuation.section.embedded.elixir" 2364 | }, 2365 | "1": { 2366 | "name": "source.elixir.embedded.source.empty" 2367 | } 2368 | }, 2369 | "match": "#\\{(\\})", 2370 | "name": "source.elixir.embedded.source" 2371 | }, 2372 | { 2373 | "begin": "#\\{", 2374 | "captures": { 2375 | "0": { 2376 | "name": "punctuation.section.embedded.elixir" 2377 | } 2378 | }, 2379 | "end": "\\}", 2380 | "name": "source.elixir.embedded.source", 2381 | "patterns": [ 2382 | { 2383 | "include": "#nest_curly_and_self" 2384 | }, 2385 | { 2386 | "include": "$self" 2387 | } 2388 | ] 2389 | } 2390 | ] 2391 | }, 2392 | "nest_brackets": { 2393 | "begin": "\\[", 2394 | "captures": { 2395 | "0": { 2396 | "name": "punctuation.section.scope.elixir" 2397 | } 2398 | }, 2399 | "end": "\\]", 2400 | "patterns": [ 2401 | { 2402 | "include": "#nest_brackets" 2403 | } 2404 | ] 2405 | }, 2406 | "nest_curly": { 2407 | "begin": "\\{", 2408 | "captures": { 2409 | "0": { 2410 | "name": "punctuation.section.scope.elixir" 2411 | } 2412 | }, 2413 | "end": "\\}", 2414 | "patterns": [ 2415 | { 2416 | "include": "#nest_curly" 2417 | } 2418 | ] 2419 | }, 2420 | "nest_curly_and_self": { 2421 | "patterns": [ 2422 | { 2423 | "begin": "\\{", 2424 | "captures": { 2425 | "0": { 2426 | "name": "punctuation.section.scope.elixir" 2427 | } 2428 | }, 2429 | "end": "\\}", 2430 | "patterns": [ 2431 | { 2432 | "include": "#nest_curly_and_self" 2433 | } 2434 | ] 2435 | }, 2436 | { 2437 | "include": "$self" 2438 | } 2439 | ] 2440 | }, 2441 | "nest_ltgt": { 2442 | "begin": "\\<", 2443 | "captures": { 2444 | "0": { 2445 | "name": "punctuation.section.scope.elixir" 2446 | } 2447 | }, 2448 | "end": "\\>", 2449 | "patterns": [ 2450 | { 2451 | "include": "#nest_ltgt" 2452 | } 2453 | ] 2454 | }, 2455 | "nest_parens": { 2456 | "begin": "\\(", 2457 | "captures": { 2458 | "0": { 2459 | "name": "punctuation.section.scope.elixir" 2460 | } 2461 | }, 2462 | "end": "\\)", 2463 | "patterns": [ 2464 | { 2465 | "include": "#nest_parens" 2466 | } 2467 | ] 2468 | }, 2469 | "regex_sub": { 2470 | "name": "string.interpolated.regexp.elixir", 2471 | "patterns": [ 2472 | { 2473 | "include": "#interpolated_elixir" 2474 | }, 2475 | { 2476 | "include": "#escaped_char" 2477 | }, 2478 | { 2479 | "name": "string.regexp.arbitrary-repitition.elixir", 2480 | "match": "(\\{)\\d+(,\\d+)?(\\})", 2481 | "captures": { 2482 | "1": { 2483 | "name": "punctuation.definition.arbitrary-repitition.elixir" 2484 | }, 2485 | "3": { 2486 | "name": "punctuation.definition.arbitrary-repitition.elixir" 2487 | } 2488 | } 2489 | }, 2490 | { 2491 | "name": "string.regexp.character-class.elixir", 2492 | "begin": "\\[(?:\\^?\\])?", 2493 | "end": "\\]", 2494 | "captures": { 2495 | "0": { 2496 | "name": "punctuation.definition.character-class.elixir" 2497 | } 2498 | }, 2499 | "patterns": [ 2500 | { 2501 | "include": "#escaped_char" 2502 | } 2503 | ] 2504 | }, 2505 | { 2506 | "begin": "\\(", 2507 | "captures": { 2508 | "0": { 2509 | "name": "punctuation.definition.group.elixir" 2510 | } 2511 | }, 2512 | "end": "\\)", 2513 | "name": "string.regexp.group.elixir", 2514 | "patterns": [ 2515 | { 2516 | "include": "#regex_sub" 2517 | } 2518 | ] 2519 | }, 2520 | { 2521 | "begin": "(?<=^|\\s)(#)\\s(?=[[a-zA-Z0-9,. \\t?!-][^\\x{00}-\\x{7F}]]*$)", 2522 | "beginCaptures": { 2523 | "1": { 2524 | "name": "punctuation.definition.comment.elixir" 2525 | } 2526 | }, 2527 | "comment": "We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.", 2528 | "end": "$\\n?", 2529 | "endCaptures": { 2530 | "0": { 2531 | "name": "punctuation.definition.comment.elixir" 2532 | } 2533 | }, 2534 | "name": "comment.line.number-sign.elixir" 2535 | } 2536 | ] 2537 | } 2538 | }, 2539 | "scopeName": "source.elixir" 2540 | } 2541 | -------------------------------------------------------------------------------- /syntaxes/html (eex).json: -------------------------------------------------------------------------------- 1 | { 2 | "fileTypes": [ 3 | "html.eex" 4 | ], 5 | "foldingStartMarker": "(?x)\n\t\t(<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\\b.*?>\n\t\t|)\n\t\t|\\{\\s*($|\\?>\\s*$|//|/\\*(.*\\*/\\s*$|(?!.*?\\*/)))\n\t\t)", 6 | "foldingStopMarker": "(?x)\n\t\t(\n\t\t|^\\s*-->\n\t\t|(^|\\s)\\}\n\t\t)", 7 | "injections": { 8 | "R:text.html.elixir meta.tag meta.attribute string.quoted": { 9 | "comment": "Uses R: to ensure this matches after any other injections.", 10 | "patterns": [ 11 | { 12 | "include": "text.elixir" 13 | } 14 | ] 15 | } 16 | }, 17 | "name": "HTML (EEx)", 18 | "patterns": [ 19 | { 20 | "include": "text.elixir" 21 | }, 22 | { 23 | "include": "text.html.basic" 24 | } 25 | ], 26 | "scopeName": "text.html.elixir" 27 | } 28 | -------------------------------------------------------------------------------- /test/extension.test.ts: -------------------------------------------------------------------------------- 1 | // 2 | // Note: This example test is leveraging the Mocha test framework. 3 | // Please refer to their documentation on https://mochajs.org/ for help. 4 | // 5 | 6 | // The module 'assert' provides assertion methods from node 7 | import * as assert from 'assert'; 8 | 9 | // You can import and use all API from the 'vscode' module 10 | // as well as import your extension to test it 11 | import * as vscode from 'vscode'; 12 | import * as myExtension from '../src/extension'; 13 | 14 | // Defines a Mocha test suite to group tests of similar kind together 15 | suite("Extension Tests", () => { 16 | 17 | // Defines a Mocha unit test 18 | test("Something 1", () => { 19 | assert.equal(-1, [1, 2, 3].indexOf(5)); 20 | assert.equal(-1, [1, 2, 3].indexOf(0)); 21 | }); 22 | }); -------------------------------------------------------------------------------- /test/index.ts: -------------------------------------------------------------------------------- 1 | // 2 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING 3 | // 4 | // This file is providing the test runner to use when running extension tests. 5 | // By default the test runner in use is Mocha based. 6 | // 7 | // You can provide your own test runner if you want to override it by exporting 8 | // a function run(testRoot: string, clb: (error:Error) => void) that the extension 9 | // host can call to run the tests. The test runner is expected to use console.log 10 | // to report the results back to the caller. When the tests are finished, return 11 | // a possible error to the callback or null if none. 12 | 13 | var testRunner = require('vscode/lib/testrunner'); 14 | 15 | // You can directly control Mocha options by uncommenting the following lines 16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info 17 | testRunner.configure({ 18 | ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.) 19 | useColors: true // colored output from test results 20 | }); 21 | 22 | module.exports = testRunner; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "outDir": "out", 7 | "lib": [ "es2016" ], 8 | "sourceMap": true 9 | }, 10 | "exclude": [ 11 | "node_modules", 12 | "server" 13 | ] 14 | } --------------------------------------------------------------------------------