aboutsummaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
Diffstat (limited to 'editors')
-rw-r--r--editors/code/package-lock.json972
-rw-r--r--editors/code/package.json171
-rw-r--r--editors/code/rollup.config.js10
-rw-r--r--editors/code/rust.tmGrammar.json4
-rw-r--r--editors/code/src/client.ts109
-rw-r--r--editors/code/src/commands.ts155
-rw-r--r--editors/code/src/config.ts36
-rw-r--r--editors/code/src/ctx.ts43
-rw-r--r--editors/code/src/debug.ts129
-rw-r--r--editors/code/src/lsp_ext.ts41
-rw-r--r--editors/code/src/main.ts88
-rw-r--r--editors/code/src/net.ts54
-rw-r--r--editors/code/src/persistent_state.ts2
-rw-r--r--editors/code/src/run.ts155
-rw-r--r--editors/code/src/status_display.ts100
-rw-r--r--editors/code/src/tasks.ts112
-rw-r--r--editors/code/src/toolchain.ts (renamed from editors/code/src/cargo.ts)117
-rw-r--r--editors/code/src/util.ts64
-rw-r--r--editors/code/tests/unit/index.ts4
-rw-r--r--editors/code/tests/unit/launch_config.test.ts14
-rw-r--r--editors/code/tests/unit/runnable_env.test.ts118
-rw-r--r--editors/code/tsconfig.json2
22 files changed, 1392 insertions, 1108 deletions
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json
index 3b4a31682..b0f24b10a 100644
--- a/editors/code/package-lock.json
+++ b/editors/code/package-lock.json
@@ -5,35 +5,35 @@
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
7 "@babel/code-frame": { 7 "@babel/code-frame": {
8 "version": "7.8.3", 8 "version": "7.10.3",
9 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 9 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
10 "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 10 "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
11 "dev": true, 11 "dev": true,
12 "requires": { 12 "requires": {
13 "@babel/highlight": "^7.8.3" 13 "@babel/highlight": "^7.10.3"
14 } 14 }
15 }, 15 },
16 "@babel/helper-validator-identifier": { 16 "@babel/helper-validator-identifier": {
17 "version": "7.9.5", 17 "version": "7.10.3",
18 "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", 18 "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
19 "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", 19 "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==",
20 "dev": true 20 "dev": true
21 }, 21 },
22 "@babel/highlight": { 22 "@babel/highlight": {
23 "version": "7.9.0", 23 "version": "7.10.3",
24 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", 24 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
25 "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", 25 "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
26 "dev": true, 26 "dev": true,
27 "requires": { 27 "requires": {
28 "@babel/helper-validator-identifier": "^7.9.0", 28 "@babel/helper-validator-identifier": "^7.10.3",
29 "chalk": "^2.0.0", 29 "chalk": "^2.0.0",
30 "js-tokens": "^4.0.0" 30 "js-tokens": "^4.0.0"
31 } 31 }
32 }, 32 },
33 "@rollup/plugin-commonjs": { 33 "@rollup/plugin-commonjs": {
34 "version": "12.0.0", 34 "version": "13.0.0",
35 "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz", 35 "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-13.0.0.tgz",
36 "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==", 36 "integrity": "sha512-Anxc3qgkAi7peAyesTqGYidG5GRim9jtg8xhmykNaZkImtvjA7Wsqep08D2mYsqw1IF7rA3lYfciLgzUSgRoqw==",
37 "dev": true, 37 "dev": true,
38 "requires": { 38 "requires": {
39 "@rollup/pluginutils": "^3.0.8", 39 "@rollup/pluginutils": "^3.0.8",
@@ -46,9 +46,9 @@
46 } 46 }
47 }, 47 },
48 "@rollup/plugin-node-resolve": { 48 "@rollup/plugin-node-resolve": {
49 "version": "8.0.0", 49 "version": "8.1.0",
50 "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.0.0.tgz", 50 "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.1.0.tgz",
51 "integrity": "sha512-5poJCChrkVggXXND/sQ7yNqwjUNT4fP31gpRWCnSNnlXuUXTCMHT33xZrTGxgjm5Rl18MHj7iEzlCT8rYWwQSA==", 51 "integrity": "sha512-ovq7ZM3JJYUUmEjjO+H8tnUdmQmdQudJB7xruX8LFZ1W2q8jXdPUS6SsIYip8ByOApu4RR7729Am9WhCeCMiHA==",
52 "dev": true, 52 "dev": true,
53 "requires": { 53 "requires": {
54 "@rollup/pluginutils": "^3.0.8", 54 "@rollup/pluginutils": "^3.0.8",
@@ -89,19 +89,12 @@
89 "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 89 "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
90 "dev": true 90 "dev": true
91 }, 91 },
92 "@types/events": {
93 "version": "3.0.0",
94 "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
95 "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
96 "dev": true
97 },
98 "@types/glob": { 92 "@types/glob": {
99 "version": "7.1.1", 93 "version": "7.1.2",
100 "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", 94 "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz",
101 "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", 95 "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==",
102 "dev": true, 96 "dev": true,
103 "requires": { 97 "requires": {
104 "@types/events": "*",
105 "@types/minimatch": "*", 98 "@types/minimatch": "*",
106 "@types/node": "*" 99 "@types/node": "*"
107 } 100 }
@@ -125,9 +118,9 @@
125 "dev": true 118 "dev": true
126 }, 119 },
127 "@types/node": { 120 "@types/node": {
128 "version": "14.0.5", 121 "version": "12.7.12",
129 "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz", 122 "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz",
130 "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==", 123 "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==",
131 "dev": true 124 "dev": true
132 }, 125 },
133 "@types/node-fetch": { 126 "@types/node-fetch": {
@@ -156,18 +149,46 @@
156 "dev": true 149 "dev": true
157 }, 150 },
158 "@typescript-eslint/eslint-plugin": { 151 "@typescript-eslint/eslint-plugin": {
159 "version": "3.0.0", 152 "version": "3.4.0",
160 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.0.0.tgz", 153 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.4.0.tgz",
161 "integrity": "sha512-lcZ0M6jD4cqGccYOERKdMtg+VWpoq3NSnWVxpc/AwAy0zhkUYVioOUZmfNqiNH8/eBNGhCn6HXd6mKIGRgNc1Q==", 154 "integrity": "sha512-wfkpiqaEVhZIuQRmudDszc01jC/YR7gMSxa6ulhggAe/Hs0KVIuo9wzvFiDbG3JD5pRFQoqnf4m7REDsUvBnMQ==",
162 "dev": true, 155 "dev": true,
163 "requires": { 156 "requires": {
164 "@typescript-eslint/experimental-utils": "3.0.0", 157 "@typescript-eslint/experimental-utils": "3.4.0",
158 "debug": "^4.1.1",
165 "functional-red-black-tree": "^1.0.1", 159 "functional-red-black-tree": "^1.0.1",
166 "regexpp": "^3.0.0", 160 "regexpp": "^3.0.0",
167 "semver": "^7.3.2", 161 "semver": "^7.3.2",
168 "tsutils": "^3.17.1" 162 "tsutils": "^3.17.1"
169 }, 163 },
170 "dependencies": { 164 "dependencies": {
165 "@typescript-eslint/experimental-utils": {
166 "version": "3.4.0",
167 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.4.0.tgz",
168 "integrity": "sha512-rHPOjL43lOH1Opte4+dhC0a/+ks+8gOBwxXnyrZ/K4OTAChpSjP76fbI8Cglj7V5GouwVAGaK+xVwzqTyE/TPw==",
169 "dev": true,
170 "requires": {
171 "@types/json-schema": "^7.0.3",
172 "@typescript-eslint/typescript-estree": "3.4.0",
173 "eslint-scope": "^5.0.0",
174 "eslint-utils": "^2.0.0"
175 }
176 },
177 "@typescript-eslint/typescript-estree": {
178 "version": "3.4.0",
179 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.4.0.tgz",
180 "integrity": "sha512-zKwLiybtt4uJb4mkG5q2t6+W7BuYx2IISiDNV+IY68VfoGwErDx/RfVI7SWL4gnZ2t1A1ytQQwZ+YOJbHHJ2rw==",
181 "dev": true,
182 "requires": {
183 "debug": "^4.1.1",
184 "eslint-visitor-keys": "^1.1.0",
185 "glob": "^7.1.6",
186 "is-glob": "^4.0.1",
187 "lodash": "^4.17.15",
188 "semver": "^7.3.2",
189 "tsutils": "^3.17.1"
190 }
191 },
171 "semver": { 192 "semver": {
172 "version": "7.3.2", 193 "version": "7.3.2",
173 "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 194 "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
@@ -177,33 +198,33 @@
177 } 198 }
178 }, 199 },
179 "@typescript-eslint/experimental-utils": { 200 "@typescript-eslint/experimental-utils": {
180 "version": "3.0.0", 201 "version": "3.4.0",
181 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.0.0.tgz", 202 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.4.0.tgz",
182 "integrity": "sha512-BN0vmr9N79M9s2ctITtChRuP1+Dls0x/wlg0RXW1yQ7WJKPurg6X3Xirv61J2sjPif4F8SLsFMs5Nzte0WYoTQ==", 203 "integrity": "sha512-rHPOjL43lOH1Opte4+dhC0a/+ks+8gOBwxXnyrZ/K4OTAChpSjP76fbI8Cglj7V5GouwVAGaK+xVwzqTyE/TPw==",
183 "dev": true, 204 "dev": true,
184 "requires": { 205 "requires": {
185 "@types/json-schema": "^7.0.3", 206 "@types/json-schema": "^7.0.3",
186 "@typescript-eslint/typescript-estree": "3.0.0", 207 "@typescript-eslint/typescript-estree": "3.4.0",
187 "eslint-scope": "^5.0.0", 208 "eslint-scope": "^5.0.0",
188 "eslint-utils": "^2.0.0" 209 "eslint-utils": "^2.0.0"
189 } 210 }
190 }, 211 },
191 "@typescript-eslint/parser": { 212 "@typescript-eslint/parser": {
192 "version": "3.0.0", 213 "version": "3.4.0",
193 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.0.0.tgz", 214 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.4.0.tgz",
194 "integrity": "sha512-8RRCA9KLxoFNO0mQlrLZA0reGPd/MsobxZS/yPFj+0/XgMdS8+mO8mF3BDj2ZYQj03rkayhSJtF1HAohQ3iylw==", 215 "integrity": "sha512-ZUGI/de44L5x87uX5zM14UYcbn79HSXUR+kzcqU42gH0AgpdB/TjuJy3m4ezI7Q/jk3wTQd755mxSDLhQP79KA==",
195 "dev": true, 216 "dev": true,
196 "requires": { 217 "requires": {
197 "@types/eslint-visitor-keys": "^1.0.0", 218 "@types/eslint-visitor-keys": "^1.0.0",
198 "@typescript-eslint/experimental-utils": "3.0.0", 219 "@typescript-eslint/experimental-utils": "3.4.0",
199 "@typescript-eslint/typescript-estree": "3.0.0", 220 "@typescript-eslint/typescript-estree": "3.4.0",
200 "eslint-visitor-keys": "^1.1.0" 221 "eslint-visitor-keys": "^1.1.0"
201 } 222 }
202 }, 223 },
203 "@typescript-eslint/typescript-estree": { 224 "@typescript-eslint/typescript-estree": {
204 "version": "3.0.0", 225 "version": "3.4.0",
205 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.0.0.tgz", 226 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.4.0.tgz",
206 "integrity": "sha512-nevQvHyNghsfLrrByzVIH4ZG3NROgJ8LZlfh3ddwPPH4CH7W4GAiSx5qu+xHuX5pWsq6q/eqMc1io840ZhAnUg==", 227 "integrity": "sha512-zKwLiybtt4uJb4mkG5q2t6+W7BuYx2IISiDNV+IY68VfoGwErDx/RfVI7SWL4gnZ2t1A1ytQQwZ+YOJbHHJ2rw==",
207 "dev": true, 228 "dev": true,
208 "requires": { 229 "requires": {
209 "debug": "^4.1.1", 230 "debug": "^4.1.1",
@@ -224,9 +245,9 @@
224 } 245 }
225 }, 246 },
226 "acorn": { 247 "acorn": {
227 "version": "7.2.0", 248 "version": "7.3.1",
228 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", 249 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
229 "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", 250 "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
230 "dev": true 251 "dev": true
231 }, 252 },
232 "acorn-jsx": { 253 "acorn-jsx": {
@@ -262,23 +283,6 @@
262 "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 283 "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
263 "dev": true 284 "dev": true
264 }, 285 },
265 "ansi-escapes": {
266 "version": "4.3.1",
267 "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
268 "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
269 "dev": true,
270 "requires": {
271 "type-fest": "^0.11.0"
272 },
273 "dependencies": {
274 "type-fest": {
275 "version": "0.11.0",
276 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
277 "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
278 "dev": true
279 }
280 }
281 },
282 "ansi-regex": { 286 "ansi-regex": {
283 "version": "5.0.0", 287 "version": "5.0.0",
284 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 288 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
@@ -313,6 +317,18 @@
313 "sprintf-js": "~1.0.2" 317 "sprintf-js": "~1.0.2"
314 } 318 }
315 }, 319 },
320 "array.prototype.map": {
321 "version": "1.0.2",
322 "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz",
323 "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==",
324 "dev": true,
325 "requires": {
326 "define-properties": "^1.1.3",
327 "es-abstract": "^1.17.0-next.1",
328 "es-array-method-boxes-properly": "^1.0.0",
329 "is-string": "^1.0.4"
330 }
331 },
316 "astral-regex": { 332 "astral-regex": {
317 "version": "1.0.0", 333 "version": "1.0.0",
318 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 334 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
@@ -344,9 +360,9 @@
344 "dev": true 360 "dev": true
345 }, 361 },
346 "binary-extensions": { 362 "binary-extensions": {
347 "version": "2.0.0", 363 "version": "2.1.0",
348 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 364 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
349 "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 365 "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
350 "dev": true 366 "dev": true
351 }, 367 },
352 "boolbase": { 368 "boolbase": {
@@ -415,12 +431,6 @@
415 "supports-color": "^5.3.0" 431 "supports-color": "^5.3.0"
416 } 432 }
417 }, 433 },
418 "chardet": {
419 "version": "0.7.0",
420 "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
421 "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
422 "dev": true
423 },
424 "cheerio": { 434 "cheerio": {
425 "version": "1.0.0-rc.3", 435 "version": "1.0.0-rc.3",
426 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", 436 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
@@ -436,36 +446,21 @@
436 } 446 }
437 }, 447 },
438 "chokidar": { 448 "chokidar": {
439 "version": "3.3.0", 449 "version": "3.3.1",
440 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", 450 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
441 "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", 451 "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
442 "dev": true, 452 "dev": true,
443 "requires": { 453 "requires": {
444 "anymatch": "~3.1.1", 454 "anymatch": "~3.1.1",
445 "braces": "~3.0.2", 455 "braces": "~3.0.2",
446 "fsevents": "~2.1.1", 456 "fsevents": "~2.1.2",
447 "glob-parent": "~5.1.0", 457 "glob-parent": "~5.1.0",
448 "is-binary-path": "~2.1.0", 458 "is-binary-path": "~2.1.0",
449 "is-glob": "~4.0.1", 459 "is-glob": "~4.0.1",
450 "normalize-path": "~3.0.0", 460 "normalize-path": "~3.0.0",
451 "readdirp": "~3.2.0" 461 "readdirp": "~3.3.0"
452 } 462 }
453 }, 463 },
454 "cli-cursor": {
455 "version": "3.1.0",
456 "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
457 "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
458 "dev": true,
459 "requires": {
460 "restore-cursor": "^3.1.0"
461 }
462 },
463 "cli-width": {
464 "version": "2.2.1",
465 "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
466 "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
467 "dev": true
468 },
469 "cliui": { 464 "cliui": {
470 "version": "5.0.0", 465 "version": "5.0.0",
471 "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 466 "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
@@ -483,29 +478,6 @@
483 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 478 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
484 "dev": true 479 "dev": true
485 }, 480 },
486 "emoji-regex": {
487 "version": "7.0.3",
488 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
489 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
490 "dev": true
491 },
492 "is-fullwidth-code-point": {
493 "version": "2.0.0",
494 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
495 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
496 "dev": true
497 },
498 "string-width": {
499 "version": "3.1.0",
500 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
501 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
502 "dev": true,
503 "requires": {
504 "emoji-regex": "^7.0.1",
505 "is-fullwidth-code-point": "^2.0.0",
506 "strip-ansi": "^5.1.0"
507 }
508 },
509 "strip-ansi": { 481 "strip-ansi": {
510 "version": "5.2.0", 482 "version": "5.2.0",
511 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 483 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -566,9 +538,9 @@
566 "dev": true 538 "dev": true
567 }, 539 },
568 "cross-spawn": { 540 "cross-spawn": {
569 "version": "7.0.2", 541 "version": "7.0.3",
570 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", 542 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
571 "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", 543 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
572 "dev": true, 544 "dev": true,
573 "requires": { 545 "requires": {
574 "path-key": "^3.1.0", 546 "path-key": "^3.1.0",
@@ -649,9 +621,9 @@
649 "dev": true 621 "dev": true
650 }, 622 },
651 "diff": { 623 "diff": {
652 "version": "3.5.0", 624 "version": "4.0.2",
653 "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 625 "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
654 "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 626 "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
655 "dev": true 627 "dev": true
656 }, 628 },
657 "doctrine": { 629 "doctrine": {
@@ -719,11 +691,20 @@
719 } 691 }
720 }, 692 },
721 "emoji-regex": { 693 "emoji-regex": {
722 "version": "8.0.0", 694 "version": "7.0.3",
723 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 695 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
724 "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 696 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
725 "dev": true 697 "dev": true
726 }, 698 },
699 "enquirer": {
700 "version": "2.3.5",
701 "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz",
702 "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==",
703 "dev": true,
704 "requires": {
705 "ansi-colors": "^3.2.1"
706 }
707 },
727 "entities": { 708 "entities": {
728 "version": "1.1.2", 709 "version": "1.1.2",
729 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 710 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
@@ -731,22 +712,43 @@
731 "dev": true 712 "dev": true
732 }, 713 },
733 "es-abstract": { 714 "es-abstract": {
734 "version": "1.17.5", 715 "version": "1.17.6",
735 "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", 716 "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
736 "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", 717 "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
737 "dev": true, 718 "dev": true,
738 "requires": { 719 "requires": {
739 "es-to-primitive": "^1.2.1", 720 "es-to-primitive": "^1.2.1",
740 "function-bind": "^1.1.1", 721 "function-bind": "^1.1.1",
741 "has": "^1.0.3", 722 "has": "^1.0.3",
742 "has-symbols": "^1.0.1", 723 "has-symbols": "^1.0.1",
743 "is-callable": "^1.1.5", 724 "is-callable": "^1.2.0",
744 "is-regex": "^1.0.5", 725 "is-regex": "^1.1.0",
745 "object-inspect": "^1.7.0", 726 "object-inspect": "^1.7.0",
746 "object-keys": "^1.1.1", 727 "object-keys": "^1.1.1",
747 "object.assign": "^4.1.0", 728 "object.assign": "^4.1.0",
748 "string.prototype.trimleft": "^2.1.1", 729 "string.prototype.trimend": "^1.0.1",
749 "string.prototype.trimright": "^2.1.1" 730 "string.prototype.trimstart": "^1.0.1"
731 }
732 },
733 "es-array-method-boxes-properly": {
734 "version": "1.0.0",
735 "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
736 "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
737 "dev": true
738 },
739 "es-get-iterator": {
740 "version": "1.1.0",
741 "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
742 "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
743 "dev": true,
744 "requires": {
745 "es-abstract": "^1.17.4",
746 "has-symbols": "^1.0.1",
747 "is-arguments": "^1.0.4",
748 "is-map": "^2.0.1",
749 "is-set": "^2.0.1",
750 "is-string": "^1.0.5",
751 "isarray": "^2.0.5"
750 } 752 }
751 }, 753 },
752 "es-to-primitive": { 754 "es-to-primitive": {
@@ -782,9 +784,9 @@
782 "dev": true 784 "dev": true
783 }, 785 },
784 "eslint": { 786 "eslint": {
785 "version": "7.1.0", 787 "version": "7.3.1",
786 "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.1.0.tgz", 788 "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz",
787 "integrity": "sha512-DfS3b8iHMK5z/YLSme8K5cge168I8j8o1uiVmFCgnnjxZQbCGyraF8bMl7Ju4yfBmCuxD7shOF7eqGkcuIHfsA==", 789 "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==",
788 "dev": true, 790 "dev": true,
789 "requires": { 791 "requires": {
790 "@babel/code-frame": "^7.0.0", 792 "@babel/code-frame": "^7.0.0",
@@ -793,10 +795,11 @@
793 "cross-spawn": "^7.0.2", 795 "cross-spawn": "^7.0.2",
794 "debug": "^4.0.1", 796 "debug": "^4.0.1",
795 "doctrine": "^3.0.0", 797 "doctrine": "^3.0.0",
796 "eslint-scope": "^5.0.0", 798 "enquirer": "^2.3.5",
799 "eslint-scope": "^5.1.0",
797 "eslint-utils": "^2.0.0", 800 "eslint-utils": "^2.0.0",
798 "eslint-visitor-keys": "^1.1.0", 801 "eslint-visitor-keys": "^1.2.0",
799 "espree": "^7.0.0", 802 "espree": "^7.1.0",
800 "esquery": "^1.2.0", 803 "esquery": "^1.2.0",
801 "esutils": "^2.0.2", 804 "esutils": "^2.0.2",
802 "file-entry-cache": "^5.0.1", 805 "file-entry-cache": "^5.0.1",
@@ -806,7 +809,6 @@
806 "ignore": "^4.0.6", 809 "ignore": "^4.0.6",
807 "import-fresh": "^3.0.0", 810 "import-fresh": "^3.0.0",
808 "imurmurhash": "^0.1.4", 811 "imurmurhash": "^0.1.4",
809 "inquirer": "^7.0.0",
810 "is-glob": "^4.0.0", 812 "is-glob": "^4.0.0",
811 "js-yaml": "^3.13.1", 813 "js-yaml": "^3.13.1",
812 "json-stable-stringify-without-jsonify": "^1.0.1", 814 "json-stable-stringify-without-jsonify": "^1.0.1",
@@ -836,9 +838,9 @@
836 } 838 }
837 }, 839 },
838 "chalk": { 840 "chalk": {
839 "version": "4.0.0", 841 "version": "4.1.0",
840 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", 842 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
841 "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", 843 "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
842 "dev": true, 844 "dev": true,
843 "requires": { 845 "requires": {
844 "ansi-styles": "^4.1.0", 846 "ansi-styles": "^4.1.0",
@@ -860,6 +862,22 @@
860 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 862 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
861 "dev": true 863 "dev": true
862 }, 864 },
865 "eslint-scope": {
866 "version": "5.1.0",
867 "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
868 "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
869 "dev": true,
870 "requires": {
871 "esrecurse": "^4.1.0",
872 "estraverse": "^4.1.1"
873 }
874 },
875 "eslint-visitor-keys": {
876 "version": "1.3.0",
877 "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
878 "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
879 "dev": true
880 },
863 "has-flag": { 881 "has-flag": {
864 "version": "4.0.0", 882 "version": "4.0.0",
865 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 883 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -909,14 +927,22 @@
909 "dev": true 927 "dev": true
910 }, 928 },
911 "espree": { 929 "espree": {
912 "version": "7.0.0", 930 "version": "7.1.0",
913 "resolved": "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz", 931 "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz",
914 "integrity": "sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==", 932 "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==",
915 "dev": true, 933 "dev": true,
916 "requires": { 934 "requires": {
917 "acorn": "^7.1.1", 935 "acorn": "^7.2.0",
918 "acorn-jsx": "^5.2.0", 936 "acorn-jsx": "^5.2.0",
919 "eslint-visitor-keys": "^1.1.0" 937 "eslint-visitor-keys": "^1.2.0"
938 },
939 "dependencies": {
940 "eslint-visitor-keys": {
941 "version": "1.3.0",
942 "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
943 "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
944 "dev": true
945 }
920 } 946 }
921 }, 947 },
922 "esprima": { 948 "esprima": {
@@ -969,21 +995,10 @@
969 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 995 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
970 "dev": true 996 "dev": true
971 }, 997 },
972 "external-editor": {
973 "version": "3.1.0",
974 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
975 "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
976 "dev": true,
977 "requires": {
978 "chardet": "^0.7.0",
979 "iconv-lite": "^0.4.24",
980 "tmp": "^0.0.33"
981 }
982 },
983 "fast-deep-equal": { 998 "fast-deep-equal": {
984 "version": "3.1.1", 999 "version": "3.1.3",
985 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 1000 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
986 "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 1001 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
987 "dev": true 1002 "dev": true
988 }, 1003 },
989 "fast-json-stable-stringify": { 1004 "fast-json-stable-stringify": {
@@ -1007,15 +1022,6 @@
1007 "pend": "~1.2.0" 1022 "pend": "~1.2.0"
1008 } 1023 }
1009 }, 1024 },
1010 "figures": {
1011 "version": "3.2.0",
1012 "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
1013 "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
1014 "dev": true,
1015 "requires": {
1016 "escape-string-regexp": "^1.0.5"
1017 }
1018 },
1019 "file-entry-cache": { 1025 "file-entry-cache": {
1020 "version": "5.0.1", 1026 "version": "5.0.1",
1021 "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 1027 "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
@@ -1035,12 +1041,13 @@
1035 } 1041 }
1036 }, 1042 },
1037 "find-up": { 1043 "find-up": {
1038 "version": "3.0.0", 1044 "version": "4.1.0",
1039 "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1045 "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
1040 "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1046 "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
1041 "dev": true, 1047 "dev": true,
1042 "requires": { 1048 "requires": {
1043 "locate-path": "^3.0.0" 1049 "locate-path": "^5.0.0",
1050 "path-exists": "^4.0.0"
1044 } 1051 }
1045 }, 1052 },
1046 "flat": { 1053 "flat": {
@@ -1238,15 +1245,6 @@
1238 } 1245 }
1239 } 1246 }
1240 }, 1247 },
1241 "iconv-lite": {
1242 "version": "0.4.24",
1243 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1244 "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1245 "dev": true,
1246 "requires": {
1247 "safer-buffer": ">= 2.1.2 < 3"
1248 }
1249 },
1250 "ignore": { 1248 "ignore": {
1251 "version": "4.0.6", 1249 "version": "4.0.6",
1252 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1250 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -1285,78 +1283,11 @@
1285 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1283 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1286 "dev": true 1284 "dev": true
1287 }, 1285 },
1288 "inquirer": { 1286 "is-arguments": {
1289 "version": "7.1.0", 1287 "version": "1.0.4",
1290 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 1288 "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
1291 "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 1289 "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
1292 "dev": true, 1290 "dev": true
1293 "requires": {
1294 "ansi-escapes": "^4.2.1",
1295 "chalk": "^3.0.0",
1296 "cli-cursor": "^3.1.0",
1297 "cli-width": "^2.0.0",
1298 "external-editor": "^3.0.3",
1299 "figures": "^3.0.0",
1300 "lodash": "^4.17.15",
1301 "mute-stream": "0.0.8",
1302 "run-async": "^2.4.0",
1303 "rxjs": "^6.5.3",
1304 "string-width": "^4.1.0",
1305 "strip-ansi": "^6.0.0",
1306 "through": "^2.3.6"
1307 },
1308 "dependencies": {
1309 "ansi-styles": {
1310 "version": "4.2.1",
1311 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
1312 "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
1313 "dev": true,
1314 "requires": {
1315 "@types/color-name": "^1.1.1",
1316 "color-convert": "^2.0.1"
1317 }
1318 },
1319 "chalk": {
1320 "version": "3.0.0",
1321 "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
1322 "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
1323 "dev": true,
1324 "requires": {
1325 "ansi-styles": "^4.1.0",
1326 "supports-color": "^7.1.0"
1327 }
1328 },
1329 "color-convert": {
1330 "version": "2.0.1",
1331 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1332 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1333 "dev": true,
1334 "requires": {
1335 "color-name": "~1.1.4"
1336 }
1337 },
1338 "color-name": {
1339 "version": "1.1.4",
1340 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1341 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1342 "dev": true
1343 },
1344 "has-flag": {
1345 "version": "4.0.0",
1346 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1347 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1348 "dev": true
1349 },
1350 "supports-color": {
1351 "version": "7.1.0",
1352 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
1353 "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
1354 "dev": true,
1355 "requires": {
1356 "has-flag": "^4.0.0"
1357 }
1358 }
1359 }
1360 }, 1291 },
1361 "is-binary-path": { 1292 "is-binary-path": {
1362 "version": "2.1.0", 1293 "version": "2.1.0",
@@ -1374,9 +1305,9 @@
1374 "dev": true 1305 "dev": true
1375 }, 1306 },
1376 "is-callable": { 1307 "is-callable": {
1377 "version": "1.1.5", 1308 "version": "1.2.0",
1378 "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", 1309 "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
1379 "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", 1310 "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
1380 "dev": true 1311 "dev": true
1381 }, 1312 },
1382 "is-date-object": { 1313 "is-date-object": {
@@ -1392,9 +1323,9 @@
1392 "dev": true 1323 "dev": true
1393 }, 1324 },
1394 "is-fullwidth-code-point": { 1325 "is-fullwidth-code-point": {
1395 "version": "3.0.0", 1326 "version": "2.0.0",
1396 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1327 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1397 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1328 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1398 "dev": true 1329 "dev": true
1399 }, 1330 },
1400 "is-glob": { 1331 "is-glob": {
@@ -1406,6 +1337,12 @@
1406 "is-extglob": "^2.1.1" 1337 "is-extglob": "^2.1.1"
1407 } 1338 }
1408 }, 1339 },
1340 "is-map": {
1341 "version": "2.0.1",
1342 "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
1343 "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
1344 "dev": true
1345 },
1409 "is-module": { 1346 "is-module": {
1410 "version": "1.0.0", 1347 "version": "1.0.0",
1411 "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1348 "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
@@ -1419,23 +1356,35 @@
1419 "dev": true 1356 "dev": true
1420 }, 1357 },
1421 "is-reference": { 1358 "is-reference": {
1422 "version": "1.1.4", 1359 "version": "1.2.1",
1423 "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", 1360 "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
1424 "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", 1361 "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
1425 "dev": true, 1362 "dev": true,
1426 "requires": { 1363 "requires": {
1427 "@types/estree": "0.0.39" 1364 "@types/estree": "*"
1428 } 1365 }
1429 }, 1366 },
1430 "is-regex": { 1367 "is-regex": {
1431 "version": "1.0.5", 1368 "version": "1.1.0",
1432 "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", 1369 "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
1433 "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", 1370 "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
1434 "dev": true, 1371 "dev": true,
1435 "requires": { 1372 "requires": {
1436 "has": "^1.0.3" 1373 "has-symbols": "^1.0.1"
1437 } 1374 }
1438 }, 1375 },
1376 "is-set": {
1377 "version": "2.0.1",
1378 "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
1379 "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==",
1380 "dev": true
1381 },
1382 "is-string": {
1383 "version": "1.0.5",
1384 "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
1385 "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
1386 "dev": true
1387 },
1439 "is-symbol": { 1388 "is-symbol": {
1440 "version": "1.0.3", 1389 "version": "1.0.3",
1441 "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1390 "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
@@ -1445,12 +1394,34 @@
1445 "has-symbols": "^1.0.1" 1394 "has-symbols": "^1.0.1"
1446 } 1395 }
1447 }, 1396 },
1397 "isarray": {
1398 "version": "2.0.5",
1399 "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
1400 "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
1401 "dev": true
1402 },
1448 "isexe": { 1403 "isexe": {
1449 "version": "2.0.0", 1404 "version": "2.0.0",
1450 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1405 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1451 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1406 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1452 "dev": true 1407 "dev": true
1453 }, 1408 },
1409 "iterate-iterator": {
1410 "version": "1.0.1",
1411 "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz",
1412 "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==",
1413 "dev": true
1414 },
1415 "iterate-value": {
1416 "version": "1.0.2",
1417 "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
1418 "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
1419 "dev": true,
1420 "requires": {
1421 "es-get-iterator": "^1.0.2",
1422 "iterate-iterator": "^1.0.1"
1423 }
1424 },
1454 "js-tokens": { 1425 "js-tokens": {
1455 "version": "4.0.0", 1426 "version": "4.0.0",
1456 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1427 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1505,19 +1476,18 @@
1505 } 1476 }
1506 }, 1477 },
1507 "locate-path": { 1478 "locate-path": {
1508 "version": "3.0.0", 1479 "version": "5.0.0",
1509 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1480 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
1510 "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1481 "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
1511 "dev": true, 1482 "dev": true,
1512 "requires": { 1483 "requires": {
1513 "p-locate": "^3.0.0", 1484 "p-locate": "^4.1.0"
1514 "path-exists": "^3.0.0"
1515 } 1485 }
1516 }, 1486 },
1517 "lodash": { 1487 "lodash": {
1518 "version": "4.17.15", 1488 "version": "4.17.19",
1519 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1489 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
1520 "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 1490 "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
1521 "dev": true 1491 "dev": true
1522 }, 1492 },
1523 "log-symbols": { 1493 "log-symbols": {
@@ -1596,12 +1566,6 @@
1596 "mime-db": "1.44.0" 1566 "mime-db": "1.44.0"
1597 } 1567 }
1598 }, 1568 },
1599 "mimic-fn": {
1600 "version": "2.1.0",
1601 "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1602 "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1603 "dev": true
1604 },
1605 "minimatch": { 1569 "minimatch": {
1606 "version": "3.0.4", 1570 "version": "3.0.4",
1607 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1571 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -1627,37 +1591,44 @@
1627 } 1591 }
1628 }, 1592 },
1629 "mocha": { 1593 "mocha": {
1630 "version": "7.2.0", 1594 "version": "8.0.1",
1631 "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", 1595 "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.0.1.tgz",
1632 "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", 1596 "integrity": "sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg==",
1633 "dev": true, 1597 "dev": true,
1634 "requires": { 1598 "requires": {
1635 "ansi-colors": "3.2.3", 1599 "ansi-colors": "4.1.1",
1636 "browser-stdout": "1.3.1", 1600 "browser-stdout": "1.3.1",
1637 "chokidar": "3.3.0", 1601 "chokidar": "3.3.1",
1638 "debug": "3.2.6", 1602 "debug": "3.2.6",
1639 "diff": "3.5.0", 1603 "diff": "4.0.2",
1640 "escape-string-regexp": "1.0.5", 1604 "escape-string-regexp": "1.0.5",
1641 "find-up": "3.0.0", 1605 "find-up": "4.1.0",
1642 "glob": "7.1.3", 1606 "glob": "7.1.6",
1643 "growl": "1.10.5", 1607 "growl": "1.10.5",
1644 "he": "1.2.0", 1608 "he": "1.2.0",
1645 "js-yaml": "3.13.1", 1609 "js-yaml": "3.13.1",
1646 "log-symbols": "3.0.0", 1610 "log-symbols": "3.0.0",
1647 "minimatch": "3.0.4", 1611 "minimatch": "3.0.4",
1648 "mkdirp": "0.5.5", 1612 "ms": "2.1.2",
1649 "ms": "2.1.1",
1650 "node-environment-flags": "1.0.6",
1651 "object.assign": "4.1.0", 1613 "object.assign": "4.1.0",
1652 "strip-json-comments": "2.0.1", 1614 "promise.allsettled": "1.0.2",
1653 "supports-color": "6.0.0", 1615 "serialize-javascript": "3.0.0",
1654 "which": "1.3.1", 1616 "strip-json-comments": "3.0.1",
1617 "supports-color": "7.1.0",
1618 "which": "2.0.2",
1655 "wide-align": "1.1.3", 1619 "wide-align": "1.1.3",
1620 "workerpool": "6.0.0",
1656 "yargs": "13.3.2", 1621 "yargs": "13.3.2",
1657 "yargs-parser": "13.1.2", 1622 "yargs-parser": "13.1.2",
1658 "yargs-unparser": "1.6.0" 1623 "yargs-unparser": "1.6.0"
1659 }, 1624 },
1660 "dependencies": { 1625 "dependencies": {
1626 "ansi-colors": {
1627 "version": "4.1.1",
1628 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
1629 "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
1630 "dev": true
1631 },
1661 "debug": { 1632 "debug": {
1662 "version": "3.2.6", 1633 "version": "3.2.6",
1663 "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1634 "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
@@ -1667,19 +1638,11 @@
1667 "ms": "^2.1.1" 1638 "ms": "^2.1.1"
1668 } 1639 }
1669 }, 1640 },
1670 "glob": { 1641 "has-flag": {
1671 "version": "7.1.3", 1642 "version": "4.0.0",
1672 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1643 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1673 "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1644 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1674 "dev": true, 1645 "dev": true
1675 "requires": {
1676 "fs.realpath": "^1.0.0",
1677 "inflight": "^1.0.4",
1678 "inherits": "2",
1679 "minimatch": "^3.0.4",
1680 "once": "^1.3.0",
1681 "path-is-absolute": "^1.0.0"
1682 }
1683 }, 1646 },
1684 "js-yaml": { 1647 "js-yaml": {
1685 "version": "3.13.1", 1648 "version": "3.13.1",
@@ -1691,34 +1654,19 @@
1691 "esprima": "^4.0.0" 1654 "esprima": "^4.0.0"
1692 } 1655 }
1693 }, 1656 },
1694 "ms": {
1695 "version": "2.1.1",
1696 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1697 "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
1698 "dev": true
1699 },
1700 "strip-json-comments": { 1657 "strip-json-comments": {
1701 "version": "2.0.1", 1658 "version": "3.0.1",
1702 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1659 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
1703 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1660 "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
1704 "dev": true 1661 "dev": true
1705 }, 1662 },
1706 "supports-color": { 1663 "supports-color": {
1707 "version": "6.0.0", 1664 "version": "7.1.0",
1708 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 1665 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
1709 "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 1666 "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
1710 "dev": true,
1711 "requires": {
1712 "has-flag": "^3.0.0"
1713 }
1714 },
1715 "which": {
1716 "version": "1.3.1",
1717 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1718 "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1719 "dev": true, 1667 "dev": true,
1720 "requires": { 1668 "requires": {
1721 "isexe": "^2.0.0" 1669 "has-flag": "^4.0.0"
1722 } 1670 }
1723 } 1671 }
1724 } 1672 }
@@ -1741,24 +1689,6 @@
1741 "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1689 "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1742 "dev": true 1690 "dev": true
1743 }, 1691 },
1744 "node-environment-flags": {
1745 "version": "1.0.6",
1746 "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
1747 "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
1748 "dev": true,
1749 "requires": {
1750 "object.getownpropertydescriptors": "^2.0.3",
1751 "semver": "^5.7.0"
1752 },
1753 "dependencies": {
1754 "semver": {
1755 "version": "5.7.1",
1756 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1757 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1758 "dev": true
1759 }
1760 }
1761 },
1762 "node-fetch": { 1692 "node-fetch": {
1763 "version": "2.6.0", 1693 "version": "2.6.0",
1764 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 1694 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
@@ -1780,9 +1710,9 @@
1780 } 1710 }
1781 }, 1711 },
1782 "object-inspect": { 1712 "object-inspect": {
1783 "version": "1.7.0", 1713 "version": "1.8.0",
1784 "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 1714 "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
1785 "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", 1715 "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
1786 "dev": true 1716 "dev": true
1787 }, 1717 },
1788 "object-keys": { 1718 "object-keys": {
@@ -1803,16 +1733,6 @@
1803 "object-keys": "^1.0.11" 1733 "object-keys": "^1.0.11"
1804 } 1734 }
1805 }, 1735 },
1806 "object.getownpropertydescriptors": {
1807 "version": "2.1.0",
1808 "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
1809 "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
1810 "dev": true,
1811 "requires": {
1812 "define-properties": "^1.1.3",
1813 "es-abstract": "^1.17.0-next.1"
1814 }
1815 },
1816 "once": { 1736 "once": {
1817 "version": "1.4.0", 1737 "version": "1.4.0",
1818 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1738 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -1822,15 +1742,6 @@
1822 "wrappy": "1" 1742 "wrappy": "1"
1823 } 1743 }
1824 }, 1744 },
1825 "onetime": {
1826 "version": "5.1.0",
1827 "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
1828 "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
1829 "dev": true,
1830 "requires": {
1831 "mimic-fn": "^2.1.0"
1832 }
1833 },
1834 "optionator": { 1745 "optionator": {
1835 "version": "0.9.1", 1746 "version": "0.9.1",
1836 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1747 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -1883,12 +1794,12 @@
1883 } 1794 }
1884 }, 1795 },
1885 "p-locate": { 1796 "p-locate": {
1886 "version": "3.0.0", 1797 "version": "4.1.0",
1887 "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1798 "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
1888 "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1799 "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
1889 "dev": true, 1800 "dev": true,
1890 "requires": { 1801 "requires": {
1891 "p-limit": "^2.0.0" 1802 "p-limit": "^2.2.0"
1892 } 1803 }
1893 }, 1804 },
1894 "p-try": { 1805 "p-try": {
@@ -1933,9 +1844,9 @@
1933 } 1844 }
1934 }, 1845 },
1935 "path-exists": { 1846 "path-exists": {
1936 "version": "3.0.0", 1847 "version": "4.0.0",
1937 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1848 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1938 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1849 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1939 "dev": true 1850 "dev": true
1940 }, 1851 },
1941 "path-is-absolute": { 1852 "path-is-absolute": {
@@ -1980,6 +1891,19 @@
1980 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1891 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1981 "dev": true 1892 "dev": true
1982 }, 1893 },
1894 "promise.allsettled": {
1895 "version": "1.0.2",
1896 "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz",
1897 "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==",
1898 "dev": true,
1899 "requires": {
1900 "array.prototype.map": "^1.0.1",
1901 "define-properties": "^1.1.3",
1902 "es-abstract": "^1.17.0-next.1",
1903 "function-bind": "^1.1.1",
1904 "iterate-value": "^1.0.0"
1905 }
1906 },
1983 "pseudomap": { 1907 "pseudomap": {
1984 "version": "1.0.2", 1908 "version": "1.0.2",
1985 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1909 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -2013,12 +1937,12 @@
2013 } 1937 }
2014 }, 1938 },
2015 "readdirp": { 1939 "readdirp": {
2016 "version": "3.2.0", 1940 "version": "3.3.0",
2017 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", 1941 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
2018 "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", 1942 "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
2019 "dev": true, 1943 "dev": true,
2020 "requires": { 1944 "requires": {
2021 "picomatch": "^2.0.4" 1945 "picomatch": "^2.0.7"
2022 } 1946 }
2023 }, 1947 },
2024 "regexpp": { 1948 "regexpp": {
@@ -2054,16 +1978,6 @@
2054 "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1978 "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2055 "dev": true 1979 "dev": true
2056 }, 1980 },
2057 "restore-cursor": {
2058 "version": "3.1.0",
2059 "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
2060 "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
2061 "dev": true,
2062 "requires": {
2063 "onetime": "^5.1.0",
2064 "signal-exit": "^3.0.2"
2065 }
2066 },
2067 "rimraf": { 1981 "rimraf": {
2068 "version": "2.6.3", 1982 "version": "2.6.3",
2069 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1983 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
@@ -2074,54 +1988,31 @@
2074 } 1988 }
2075 }, 1989 },
2076 "rollup": { 1990 "rollup": {
2077 "version": "2.10.9", 1991 "version": "2.18.1",
2078 "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.9.tgz", 1992 "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.18.1.tgz",
2079 "integrity": "sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg==", 1993 "integrity": "sha512-w4X77ADA+WTGlapC8Z6yggdJtODw3SBl6R2LSkA7ZW5MtdkgcB7sfaSD1UWyx8diXbMcGIb0eI9gCx/dyqOgNQ==",
2080 "dev": true, 1994 "dev": true,
2081 "requires": { 1995 "requires": {
2082 "fsevents": "~2.1.2" 1996 "fsevents": "~2.1.2"
2083 } 1997 }
2084 }, 1998 },
2085 "run-async": {
2086 "version": "2.4.1",
2087 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
2088 "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
2089 "dev": true
2090 },
2091 "rxjs": {
2092 "version": "6.5.5",
2093 "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
2094 "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
2095 "dev": true,
2096 "requires": {
2097 "tslib": "^1.9.0"
2098 },
2099 "dependencies": {
2100 "tslib": {
2101 "version": "1.13.0",
2102 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
2103 "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
2104 "dev": true
2105 }
2106 }
2107 },
2108 "safe-buffer": { 1999 "safe-buffer": {
2109 "version": "5.2.0", 2000 "version": "5.2.0",
2110 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 2001 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
2111 "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 2002 "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
2112 "dev": true 2003 "dev": true
2113 }, 2004 },
2114 "safer-buffer": {
2115 "version": "2.1.2",
2116 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2117 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2118 "dev": true
2119 },
2120 "semver": { 2005 "semver": {
2121 "version": "6.3.0", 2006 "version": "6.3.0",
2122 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2007 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2123 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 2008 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
2124 }, 2009 },
2010 "serialize-javascript": {
2011 "version": "3.0.0",
2012 "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz",
2013 "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==",
2014 "dev": true
2015 },
2125 "set-blocking": { 2016 "set-blocking": {
2126 "version": "2.0.0", 2017 "version": "2.0.0",
2127 "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2018 "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -2149,12 +2040,6 @@
2149 "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 2040 "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
2150 "dev": true 2041 "dev": true
2151 }, 2042 },
2152 "signal-exit": {
2153 "version": "3.0.3",
2154 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
2155 "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
2156 "dev": true
2157 },
2158 "slice-ansi": { 2043 "slice-ansi": {
2159 "version": "2.1.0", 2044 "version": "2.1.0",
2160 "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 2045 "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
@@ -2164,14 +2049,6 @@
2164 "ansi-styles": "^3.2.0", 2049 "ansi-styles": "^3.2.0",
2165 "astral-regex": "^1.0.0", 2050 "astral-regex": "^1.0.0",
2166 "is-fullwidth-code-point": "^2.0.0" 2051 "is-fullwidth-code-point": "^2.0.0"
2167 },
2168 "dependencies": {
2169 "is-fullwidth-code-point": {
2170 "version": "2.0.0",
2171 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2172 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2173 "dev": true
2174 }
2175 } 2052 }
2176 }, 2053 },
2177 "sourcemap-codec": { 2054 "sourcemap-codec": {
@@ -2187,14 +2064,31 @@
2187 "dev": true 2064 "dev": true
2188 }, 2065 },
2189 "string-width": { 2066 "string-width": {
2190 "version": "4.2.0", 2067 "version": "3.1.0",
2191 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 2068 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2192 "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 2069 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2193 "dev": true, 2070 "dev": true,
2194 "requires": { 2071 "requires": {
2195 "emoji-regex": "^8.0.0", 2072 "emoji-regex": "^7.0.1",
2196 "is-fullwidth-code-point": "^3.0.0", 2073 "is-fullwidth-code-point": "^2.0.0",
2197 "strip-ansi": "^6.0.0" 2074 "strip-ansi": "^5.1.0"
2075 },
2076 "dependencies": {
2077 "ansi-regex": {
2078 "version": "4.1.0",
2079 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
2080 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
2081 "dev": true
2082 },
2083 "strip-ansi": {
2084 "version": "5.2.0",
2085 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2086 "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2087 "dev": true,
2088 "requires": {
2089 "ansi-regex": "^4.1.0"
2090 }
2091 }
2198 } 2092 }
2199 }, 2093 },
2200 "string.prototype.trimend": { 2094 "string.prototype.trimend": {
@@ -2207,28 +2101,6 @@
2207 "es-abstract": "^1.17.5" 2101 "es-abstract": "^1.17.5"
2208 } 2102 }
2209 }, 2103 },
2210 "string.prototype.trimleft": {
2211 "version": "2.1.2",
2212 "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
2213 "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
2214 "dev": true,
2215 "requires": {
2216 "define-properties": "^1.1.3",
2217 "es-abstract": "^1.17.5",
2218 "string.prototype.trimstart": "^1.0.0"
2219 }
2220 },
2221 "string.prototype.trimright": {
2222 "version": "2.1.2",
2223 "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
2224 "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
2225 "dev": true,
2226 "requires": {
2227 "define-properties": "^1.1.3",
2228 "es-abstract": "^1.17.5",
2229 "string.prototype.trimend": "^1.0.0"
2230 }
2231 },
2232 "string.prototype.trimstart": { 2104 "string.prototype.trimstart": {
2233 "version": "1.0.1", 2105 "version": "1.0.1",
2234 "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 2106 "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
@@ -2282,46 +2154,6 @@
2282 "lodash": "^4.17.14", 2154 "lodash": "^4.17.14",
2283 "slice-ansi": "^2.1.0", 2155 "slice-ansi": "^2.1.0",
2284 "string-width": "^3.0.0" 2156 "string-width": "^3.0.0"
2285 },
2286 "dependencies": {
2287 "ansi-regex": {
2288 "version": "4.1.0",
2289 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
2290 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
2291 "dev": true
2292 },
2293 "emoji-regex": {
2294 "version": "7.0.3",
2295 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2296 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2297 "dev": true
2298 },
2299 "is-fullwidth-code-point": {
2300 "version": "2.0.0",
2301 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2302 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2303 "dev": true
2304 },
2305 "string-width": {
2306 "version": "3.1.0",
2307 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2308 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2309 "dev": true,
2310 "requires": {
2311 "emoji-regex": "^7.0.1",
2312 "is-fullwidth-code-point": "^2.0.0",
2313 "strip-ansi": "^5.1.0"
2314 }
2315 },
2316 "strip-ansi": {
2317 "version": "5.2.0",
2318 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2319 "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2320 "dev": true,
2321 "requires": {
2322 "ansi-regex": "^4.1.0"
2323 }
2324 }
2325 } 2157 }
2326 }, 2158 },
2327 "text-table": { 2159 "text-table": {
@@ -2330,21 +2162,6 @@
2330 "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2162 "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2331 "dev": true 2163 "dev": true
2332 }, 2164 },
2333 "through": {
2334 "version": "2.3.8",
2335 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2336 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2337 "dev": true
2338 },
2339 "tmp": {
2340 "version": "0.0.33",
2341 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2342 "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2343 "dev": true,
2344 "requires": {
2345 "os-tmpdir": "~1.0.2"
2346 }
2347 },
2348 "to-regex-range": { 2165 "to-regex-range": {
2349 "version": "5.0.1", 2166 "version": "5.0.1",
2350 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2167 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -2409,9 +2226,9 @@
2409 } 2226 }
2410 }, 2227 },
2411 "typescript": { 2228 "typescript": {
2412 "version": "3.9.3", 2229 "version": "3.9.5",
2413 "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", 2230 "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz",
2414 "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", 2231 "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==",
2415 "dev": true 2232 "dev": true
2416 }, 2233 },
2417 "typescript-formatter": { 2234 "typescript-formatter": {
@@ -2458,9 +2275,9 @@
2458 "dev": true 2275 "dev": true
2459 }, 2276 },
2460 "v8-compile-cache": { 2277 "v8-compile-cache": {
2461 "version": "2.1.0", 2278 "version": "2.1.1",
2462 "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 2279 "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
2463 "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 2280 "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
2464 "dev": true 2281 "dev": true
2465 }, 2282 },
2466 "vsce": { 2283 "vsce": {
@@ -2537,9 +2354,9 @@
2537 "integrity": "sha512-tZFUSbyjUcrh+qQf13ALX4QDdOfDX0cVaBFgy7ktJ0VwS7AW/yRKgGPSxVqqP9OCMNPdqP57O5q47w2pEwfaUg==" 2354 "integrity": "sha512-tZFUSbyjUcrh+qQf13ALX4QDdOfDX0cVaBFgy7ktJ0VwS7AW/yRKgGPSxVqqP9OCMNPdqP57O5q47w2pEwfaUg=="
2538 }, 2355 },
2539 "vscode-test": { 2356 "vscode-test": {
2540 "version": "1.3.0", 2357 "version": "1.4.0",
2541 "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.3.0.tgz", 2358 "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.0.tgz",
2542 "integrity": "sha512-LddukcBiSU2FVTDr3c1D8lwkiOvwlJdDL2hqVbn6gIz+rpTqUCkMZSKYm94Y1v0WXlHSDQBsXyY+tchWQgGVsw==", 2359 "integrity": "sha512-Jt7HNGvSE0+++Tvtq5wc4hiXLIr2OjDShz/gbAfM/mahQpy4rKBnmOK33D+MR67ATWviQhl+vpmU3p/qwSH/Pg==",
2543 "dev": true, 2360 "dev": true,
2544 "requires": { 2361 "requires": {
2545 "http-proxy-agent": "^2.1.0", 2362 "http-proxy-agent": "^2.1.0",
@@ -2577,12 +2394,6 @@
2577 "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2394 "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
2578 "dev": true 2395 "dev": true
2579 }, 2396 },
2580 "is-fullwidth-code-point": {
2581 "version": "2.0.0",
2582 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2583 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2584 "dev": true
2585 },
2586 "string-width": { 2397 "string-width": {
2587 "version": "2.1.1", 2398 "version": "2.1.1",
2588 "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2399 "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -2610,6 +2421,12 @@
2610 "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2421 "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2611 "dev": true 2422 "dev": true
2612 }, 2423 },
2424 "workerpool": {
2425 "version": "6.0.0",
2426 "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz",
2427 "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==",
2428 "dev": true
2429 },
2613 "wrap-ansi": { 2430 "wrap-ansi": {
2614 "version": "5.1.0", 2431 "version": "5.1.0",
2615 "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2432 "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
@@ -2627,29 +2444,6 @@
2627 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2444 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
2628 "dev": true 2445 "dev": true
2629 }, 2446 },
2630 "emoji-regex": {
2631 "version": "7.0.3",
2632 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2633 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2634 "dev": true
2635 },
2636 "is-fullwidth-code-point": {
2637 "version": "2.0.0",
2638 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2639 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2640 "dev": true
2641 },
2642 "string-width": {
2643 "version": "3.1.0",
2644 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2645 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2646 "dev": true,
2647 "requires": {
2648 "emoji-regex": "^7.0.1",
2649 "is-fullwidth-code-point": "^2.0.0",
2650 "strip-ansi": "^5.1.0"
2651 }
2652 },
2653 "strip-ansi": { 2447 "strip-ansi": {
2654 "version": "5.2.0", 2448 "version": "5.2.0",
2655 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2449 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -2706,43 +2500,39 @@
2706 "yargs-parser": "^13.1.2" 2500 "yargs-parser": "^13.1.2"
2707 }, 2501 },
2708 "dependencies": { 2502 "dependencies": {
2709 "ansi-regex": { 2503 "find-up": {
2710 "version": "4.1.0", 2504 "version": "3.0.0",
2711 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2505 "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
2712 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2506 "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
2713 "dev": true 2507 "dev": true,
2714 }, 2508 "requires": {
2715 "emoji-regex": { 2509 "locate-path": "^3.0.0"
2716 "version": "7.0.3", 2510 }
2717 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2718 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2719 "dev": true
2720 },
2721 "is-fullwidth-code-point": {
2722 "version": "2.0.0",
2723 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2724 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2725 "dev": true
2726 }, 2511 },
2727 "string-width": { 2512 "locate-path": {
2728 "version": "3.1.0", 2513 "version": "3.0.0",
2729 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2514 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
2730 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2515 "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
2731 "dev": true, 2516 "dev": true,
2732 "requires": { 2517 "requires": {
2733 "emoji-regex": "^7.0.1", 2518 "p-locate": "^3.0.0",
2734 "is-fullwidth-code-point": "^2.0.0", 2519 "path-exists": "^3.0.0"
2735 "strip-ansi": "^5.1.0"
2736 } 2520 }
2737 }, 2521 },
2738 "strip-ansi": { 2522 "p-locate": {
2739 "version": "5.2.0", 2523 "version": "3.0.0",
2740 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2524 "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
2741 "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2525 "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
2742 "dev": true, 2526 "dev": true,
2743 "requires": { 2527 "requires": {
2744 "ansi-regex": "^4.1.0" 2528 "p-limit": "^2.0.0"
2745 } 2529 }
2530 },
2531 "path-exists": {
2532 "version": "3.0.0",
2533 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
2534 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
2535 "dev": true
2746 } 2536 }
2747 } 2537 }
2748 }, 2538 },
diff --git a/editors/code/package.json b/editors/code/package.json
index 75dbafc05..aac4ba94f 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -39,29 +39,30 @@
39 "vscode-languageclient": "7.0.0-next.1" 39 "vscode-languageclient": "7.0.0-next.1"
40 }, 40 },
41 "devDependencies": { 41 "devDependencies": {
42 "@rollup/plugin-commonjs": "^12.0.0", 42 "@rollup/plugin-commonjs": "^13.0.0",
43 "@rollup/plugin-node-resolve": "^8.0.0", 43 "@rollup/plugin-node-resolve": "^8.1.0",
44 "@types/glob": "^7.1.1", 44 "@types/glob": "^7.1.2",
45 "@types/mocha": "^7.0.2", 45 "@types/mocha": "^7.0.2",
46 "@types/node": "^14.0.5", 46 "@types/node": "~12.7.0",
47 "@types/node-fetch": "^2.5.7", 47 "@types/node-fetch": "^2.5.7",
48 "@types/vscode": "^1.44.1", 48 "@types/vscode": "^1.44.1",
49 "@typescript-eslint/eslint-plugin": "^3.0.0", 49 "@typescript-eslint/eslint-plugin": "^3.4.0",
50 "@typescript-eslint/parser": "^3.0.0", 50 "@typescript-eslint/parser": "^3.4.0",
51 "eslint": "^7.0.0", 51 "eslint": "^7.3.1",
52 "glob": "^7.1.6", 52 "glob": "^7.1.6",
53 "mocha": "^7.1.2", 53 "mocha": "^8.0.1",
54 "rollup": "^2.10.7", 54 "rollup": "^2.18.1",
55 "tslib": "^2.0.0", 55 "tslib": "^2.0.0",
56 "typescript": "^3.9.3", 56 "typescript": "^3.9.5",
57 "typescript-formatter": "^7.2.2", 57 "typescript-formatter": "^7.2.2",
58 "vsce": "^1.75.0", 58 "vsce": "^1.75.0",
59 "vscode-test": "^1.3.0" 59 "vscode-test": "^1.4.0"
60 }, 60 },
61 "activationEvents": [ 61 "activationEvents": [
62 "onLanguage:rust", 62 "onLanguage:rust",
63 "onCommand:rust-analyzer.analyzerStatus", 63 "onCommand:rust-analyzer.analyzerStatus",
64 "onCommand:rust-analyzer.collectGarbage", 64 "onCommand:rust-analyzer.memoryUsage",
65 "onCommand:rust-analyzer.reloadWorkspace",
65 "workspaceContains:**/Cargo.toml" 66 "workspaceContains:**/Cargo.toml"
66 ], 67 ],
67 "main": "./out/src/main", 68 "main": "./out/src/main",
@@ -143,8 +144,13 @@
143 "category": "Rust Analyzer" 144 "category": "Rust Analyzer"
144 }, 145 },
145 { 146 {
146 "command": "rust-analyzer.collectGarbage", 147 "command": "rust-analyzer.memoryUsage",
147 "title": "Run garbage collection", 148 "title": "Memory Usage (Clears Database)",
149 "category": "Rust Analyzer"
150 },
151 {
152 "command": "rust-analyzer.reloadWorkspace",
153 "title": "Reload workspace",
148 "category": "Rust Analyzer" 154 "category": "Rust Analyzer"
149 }, 155 },
150 { 156 {
@@ -231,6 +237,11 @@
231 "default": true, 237 "default": true,
232 "markdownDescription": "Whether to show `can't find Cargo.toml` error message" 238 "markdownDescription": "Whether to show `can't find Cargo.toml` error message"
233 }, 239 },
240 "rust-analyzer.cargo.autoreload": {
241 "type": "boolean",
242 "default": true,
243 "markdownDescription": "Automatically refresh project info via `cargo metadata` on Cargo.toml changes"
244 },
234 "rust-analyzer.cargo.noDefaultFeatures": { 245 "rust-analyzer.cargo.noDefaultFeatures": {
235 "type": "boolean", 246 "type": "boolean",
236 "default": false, 247 "default": false,
@@ -238,7 +249,7 @@
238 }, 249 },
239 "rust-analyzer.cargo.allFeatures": { 250 "rust-analyzer.cargo.allFeatures": {
240 "type": "boolean", 251 "type": "boolean",
241 "default": true, 252 "default": false,
242 "description": "Activate all available features" 253 "description": "Activate all available features"
243 }, 254 },
244 "rust-analyzer.cargo.features": { 255 "rust-analyzer.cargo.features": {
@@ -318,9 +329,60 @@
318 "markdownDescription": "Check all targets and tests (will be passed as `--all-targets`)" 329 "markdownDescription": "Check all targets and tests (will be passed as `--all-targets`)"
319 }, 330 },
320 "rust-analyzer.checkOnSave.allFeatures": { 331 "rust-analyzer.checkOnSave.allFeatures": {
321 "type": "boolean", 332 "type": [
322 "default": true, 333 "null",
323 "markdownDescription": "Check with all features (will be passed as `--all-features`)" 334 "boolean"
335 ],
336 "default": null,
337 "markdownDescription": "Check with all features (will be passed as `--all-features`). Defaults to `rust-analyzer.cargo.allFeatures`."
338 },
339 "rust-analyzer.checkOnSave.features": {
340 "type": [
341 "null",
342 "array"
343 ],
344 "items": {
345 "type": "string"
346 },
347 "default": null,
348 "description": "List of features to activate. Defaults to `rust-analyzer.cargo.features`."
349 },
350 "rust-analyzer.cargoRunner": {
351 "type": [
352 "null",
353 "string"
354 ],
355 "default": null,
356 "description": "Custom cargo runner extension ID."
357 },
358 "rust-analyzer.runnableEnv": {
359 "anyOf": [
360 {
361 "type": "null"
362 },
363 {
364 "type": "array",
365 "items": {
366 "type": "object",
367 "properties": {
368 "mask": {
369 "type": "string",
370 "description": "Runnable name mask"
371 },
372 "env": {
373 "type": "object",
374 "description": "Variables in form of { \"key\": \"value\"}"
375 }
376 }
377 }
378 },
379 {
380 "type": "object",
381 "description": "Variables in form of { \"key\": \"value\"}"
382 }
383 ],
384 "default": null,
385 "description": "Environment variables passed to the runnable launched using `Test ` or `Debug` lens or `rust-analyzer.run` command."
324 }, 386 },
325 "rust-analyzer.inlayHints.enable": { 387 "rust-analyzer.inlayHints.enable": {
326 "type": "boolean", 388 "type": "boolean",
@@ -412,7 +474,7 @@
412 "Full log" 474 "Full log"
413 ], 475 ],
414 "default": "off", 476 "default": "off",
415 "description": "Trace requests to the rust-analyzer" 477 "description": "Trace requests to the rust-analyzer (this is usually overly verbose and not recommended for regular users)"
416 }, 478 },
417 "rust-analyzer.trace.extension": { 479 "rust-analyzer.trace.extension": {
418 "description": "Enable logging of VS Code extensions itself", 480 "description": "Enable logging of VS Code extensions itself",
@@ -462,19 +524,78 @@
462 "default": true 524 "default": true
463 }, 525 },
464 "rust-analyzer.lens.run": { 526 "rust-analyzer.lens.run": {
465 "markdownDescription": "Whether to show Run lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 527 "markdownDescription": "Whether to show `Run` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
466 "type": "boolean", 528 "type": "boolean",
467 "default": true 529 "default": true
468 }, 530 },
469 "rust-analyzer.lens.debug": { 531 "rust-analyzer.lens.debug": {
470 "markdownDescription": "Whether to show Debug lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 532 "markdownDescription": "Whether to show `Debug` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
471 "type": "boolean", 533 "type": "boolean",
472 "default": true 534 "default": true
473 }, 535 },
474 "rust-analyzer.lens.implementations": { 536 "rust-analyzer.lens.implementations": {
475 "markdownDescription": "Whether to show Implementations lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 537 "markdownDescription": "Whether to show `Implementations` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
538 "type": "boolean",
539 "default": true
540 },
541 "rust-analyzer.hoverActions.enable": {
542 "description": "Whether to show HoverActions in Rust files.",
543 "type": "boolean",
544 "default": true
545 },
546 "rust-analyzer.hoverActions.implementations": {
547 "markdownDescription": "Whether to show `Implementations` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
548 "type": "boolean",
549 "default": true
550 },
551 "rust-analyzer.hoverActions.run": {
552 "markdownDescription": "Whether to show `Run` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
553 "type": "boolean",
554 "default": true
555 },
556 "rust-analyzer.hoverActions.debug": {
557 "markdownDescription": "Whether to show `Debug` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
476 "type": "boolean", 558 "type": "boolean",
477 "default": true 559 "default": true
560 },
561 "rust-analyzer.hoverActions.gotoTypeDef": {
562 "markdownDescription": "Whether to show `Go to Type Definition` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
563 "type": "boolean",
564 "default": true
565 },
566 "rust-analyzer.linkedProjects": {
567 "markdownDescription": "Disable project auto-discovery in favor of explicitly specified set of projects. \nElements must be paths pointing to Cargo.toml, rust-project.json, or JSON objects in rust-project.json format",
568 "type": "array",
569 "items": {
570 "type": [
571 "string",
572 "object"
573 ]
574 },
575 "default": null
576 },
577 "rust-analyzer.withSysroot": {
578 "markdownDescription": "Internal config for debugging, disables loading of sysroot crates",
579 "type": "boolean",
580 "default": true
581 },
582 "rust-analyzer.diagnostics.warningsAsInfo": {
583 "type": "array",
584 "uniqueItems": true,
585 "items": {
586 "type": "string"
587 },
588 "description": "List of warnings that should be displayed with info severity.\nThe warnings will be indicated by a blue squiggly underline in code and a blue icon in the problems panel.",
589 "default": []
590 },
591 "rust-analyzer.diagnostics.warningsAsHint": {
592 "type": "array",
593 "uniqueItems": true,
594 "items": {
595 "type": "string"
596 },
597 "description": "List of warnings warnings that should be displayed with hint severity.\nThe warnings will be indicated by faded text or three dots in code and will not show up in the problems panel.",
598 "default": []
478 } 599 }
479 } 600 }
480 }, 601 },
@@ -734,7 +855,11 @@
734 "when": "inRustProject" 855 "when": "inRustProject"
735 }, 856 },
736 { 857 {
737 "command": "rust-analyzer.collectGarbage", 858 "command": "rust-analyzer.memoryUsage",
859 "when": "inRustProject"
860 },
861 {
862 "command": "rust-analyzer.reloadWorkspace",
738 "when": "inRustProject" 863 "when": "inRustProject"
739 }, 864 },
740 { 865 {
diff --git a/editors/code/rollup.config.js b/editors/code/rollup.config.js
index 58360eabb..27abf75ac 100644
--- a/editors/code/rollup.config.js
+++ b/editors/code/rollup.config.js
@@ -11,17 +11,11 @@ export default {
11 resolve({ 11 resolve({
12 preferBuiltins: true 12 preferBuiltins: true
13 }), 13 }),
14 commonjs({ 14 commonjs()
15 namedExports: {
16 // squelch missing import warnings
17 'vscode-languageclient': ['CreateFile', 'RenameFile', 'ErrorCodes', 'WorkDoneProgress', 'WorkDoneProgressBegin', 'WorkDoneProgressReport', 'WorkDoneProgressEnd']
18 }
19 })
20 ], 15 ],
21 external: [...nodeBuiltins, 'vscode'], 16 external: [...nodeBuiltins, 'vscode'],
22 output: { 17 output: {
23 file: './out/src/main.js', 18 file: './out/src/main.js',
24 format: 'cjs', 19 format: 'cjs'
25 exports: 'named'
26 } 20 }
27}; 21};
diff --git a/editors/code/rust.tmGrammar.json b/editors/code/rust.tmGrammar.json
index ab87cd39f..0be2583db 100644
--- a/editors/code/rust.tmGrammar.json
+++ b/editors/code/rust.tmGrammar.json
@@ -268,7 +268,7 @@
268 "match": "\\b(log|error|warn|info|debug|trace|log_enabled)!" 268 "match": "\\b(log|error|warn|info|debug|trace|log_enabled)!"
269 }, 269 },
270 { 270 {
271 "comment": "Invokation of a macro", 271 "comment": "Invocation of a macro",
272 "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*\\!)\\s*[({\\[]", 272 "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*\\!)\\s*[({\\[]",
273 "captures": { 273 "captures": {
274 "1": { 274 "1": {
@@ -683,4 +683,4 @@
683 ] 683 ]
684 } 684 }
685 } 685 }
686} \ No newline at end of file 686}
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts
index d64f9a3f9..41ffac7b3 100644
--- a/editors/code/src/client.ts
+++ b/editors/code/src/client.ts
@@ -1,8 +1,25 @@
1import * as lc from 'vscode-languageclient'; 1import * as lc from 'vscode-languageclient';
2import * as vscode from 'vscode'; 2import * as vscode from 'vscode';
3import * as ra from '../src/lsp_ext';
4import * as Is from 'vscode-languageclient/lib/utils/is';
3 5
4import { CallHierarchyFeature } from 'vscode-languageclient/lib/callHierarchy.proposed'; 6import { CallHierarchyFeature } from 'vscode-languageclient/lib/callHierarchy.proposed';
5import { SemanticTokensFeature, DocumentSemanticsTokensSignature } from 'vscode-languageclient/lib/semanticTokens.proposed'; 7import { SemanticTokensFeature, DocumentSemanticsTokensSignature } from 'vscode-languageclient/lib/semanticTokens.proposed';
8import { assert } from './util';
9
10function renderCommand(cmd: ra.CommandLink) {
11 return `[${cmd.title}](command:${cmd.command}?${encodeURIComponent(JSON.stringify(cmd.arguments))} '${cmd.tooltip!}')`;
12}
13
14function renderHoverActions(actions: ra.CommandLinkGroup[]): vscode.MarkdownString {
15 const text = actions.map(group =>
16 (group.title ? (group.title + " ") : "") + group.commands.map(renderCommand).join(' | ')
17 ).join('___');
18
19 const result = new vscode.MarkdownString(text);
20 result.isTrusted = true;
21 return result;
22}
6 23
7export function createClient(serverPath: string, cwd: string): lc.LanguageClient { 24export function createClient(serverPath: string, cwd: string): lc.LanguageClient {
8 // '.' Is the fallback if no folder is open 25 // '.' Is the fallback if no folder is open
@@ -32,6 +49,25 @@ export function createClient(serverPath: string, cwd: string): lc.LanguageClient
32 if (res === undefined) throw new Error('busy'); 49 if (res === undefined) throw new Error('busy');
33 return res; 50 return res;
34 }, 51 },
52 async provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, _next: lc.ProvideHoverSignature) {
53 return client.sendRequest(lc.HoverRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(
54 (result) => {
55 const hover = client.protocol2CodeConverter.asHover(result);
56 if (hover) {
57 const actions = (<any>result).actions;
58 if (actions) {
59 hover.contents.push(renderHoverActions(actions));
60 }
61 }
62 return hover;
63 },
64 (error) => {
65 client.logFailedRequest(lc.HoverRequest.type, error);
66 return Promise.resolve(null);
67 });
68 },
69 // Using custom handling of CodeActions where each code action is resolved lazily
70 // That's why we are not waiting for any command or edits
35 async provideCodeActions(document: vscode.TextDocument, range: vscode.Range, context: vscode.CodeActionContext, token: vscode.CancellationToken, _next: lc.ProvideCodeActionsSignature) { 71 async provideCodeActions(document: vscode.TextDocument, range: vscode.Range, context: vscode.CodeActionContext, token: vscode.CancellationToken, _next: lc.ProvideCodeActionsSignature) {
36 const params: lc.CodeActionParams = { 72 const params: lc.CodeActionParams = {
37 textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), 73 textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
@@ -43,32 +79,37 @@ export function createClient(serverPath: string, cwd: string): lc.LanguageClient
43 const result: (vscode.CodeAction | vscode.Command)[] = []; 79 const result: (vscode.CodeAction | vscode.Command)[] = [];
44 const groups = new Map<string, { index: number; items: vscode.CodeAction[] }>(); 80 const groups = new Map<string, { index: number; items: vscode.CodeAction[] }>();
45 for (const item of values) { 81 for (const item of values) {
82 // In our case we expect to get code edits only from diagnostics
46 if (lc.CodeAction.is(item)) { 83 if (lc.CodeAction.is(item)) {
84 assert(!item.command, "We don't expect to receive commands in CodeActions");
47 const action = client.protocol2CodeConverter.asCodeAction(item); 85 const action = client.protocol2CodeConverter.asCodeAction(item);
48 const group = actionGroup(item); 86 result.push(action);
49 if (isSnippetEdit(item) || group) { 87 continue;
50 action.command = { 88 }
51 command: "rust-analyzer.applySnippetWorkspaceEdit", 89 assert(isCodeActionWithoutEditsAndCommands(item), "We don't expect edits or commands here");
52 title: "", 90 const kind = client.protocol2CodeConverter.asCodeActionKind((item as any).kind);
53 arguments: [action.edit], 91 const action = new vscode.CodeAction(item.title, kind);
54 }; 92 const group = (item as any).group;
55 action.edit = undefined; 93 const id = (item as any).id;
56 } 94 const resolveParams: ra.ResolveCodeActionParams = {
57 95 id: id,
58 if (group) { 96 codeActionParams: params
59 let entry = groups.get(group); 97 };
60 if (!entry) { 98 action.command = {
61 entry = { index: result.length, items: [] }; 99 command: "rust-analyzer.resolveCodeAction",
62 groups.set(group, entry); 100 title: item.title,
63 result.push(action); 101 arguments: [resolveParams],
64 } 102 };
65 entry.items.push(action); 103 if (group) {
66 } else { 104 let entry = groups.get(group);
105 if (!entry) {
106 entry = { index: result.length, items: [] };
107 groups.set(group, entry);
67 result.push(action); 108 result.push(action);
68 } 109 }
110 entry.items.push(action);
69 } else { 111 } else {
70 const command = client.protocol2CodeConverter.asCommand(item); 112 result.push(action);
71 result.push(command);
72 } 113 }
73 } 114 }
74 for (const [group, { index, items }] of groups) { 115 for (const [group, { index, items }] of groups) {
@@ -76,11 +117,12 @@ export function createClient(serverPath: string, cwd: string): lc.LanguageClient
76 result[index] = items[0]; 117 result[index] = items[0];
77 } else { 118 } else {
78 const action = new vscode.CodeAction(group); 119 const action = new vscode.CodeAction(group);
120 action.kind = items[0].kind;
79 action.command = { 121 action.command = {
80 command: "rust-analyzer.applyActionGroup", 122 command: "rust-analyzer.applyActionGroup",
81 title: "", 123 title: "",
82 arguments: [items.map((item) => { 124 arguments: [items.map((item) => {
83 return { label: item.title, edit: item.command!!.arguments!![0] }; 125 return { label: item.title, arguments: item.command!!.arguments!![0] };
84 })], 126 })],
85 }; 127 };
86 result[index] = action; 128 result[index] = action;
@@ -119,24 +161,19 @@ class ExperimentalFeatures implements lc.StaticFeature {
119 const caps: any = capabilities.experimental ?? {}; 161 const caps: any = capabilities.experimental ?? {};
120 caps.snippetTextEdit = true; 162 caps.snippetTextEdit = true;
121 caps.codeActionGroup = true; 163 caps.codeActionGroup = true;
164 caps.resolveCodeAction = true;
165 caps.hoverActions = true;
166 caps.statusNotification = true;
122 capabilities.experimental = caps; 167 capabilities.experimental = caps;
123 } 168 }
124 initialize(_capabilities: lc.ServerCapabilities<any>, _documentSelector: lc.DocumentSelector | undefined): void { 169 initialize(_capabilities: lc.ServerCapabilities<any>, _documentSelector: lc.DocumentSelector | undefined): void {
125 } 170 }
126} 171}
127 172
128function isSnippetEdit(action: lc.CodeAction): boolean { 173function isCodeActionWithoutEditsAndCommands(value: any): boolean {
129 const documentChanges = action.edit?.documentChanges ?? []; 174 const candidate: lc.CodeAction = value;
130 for (const edit of documentChanges) { 175 return candidate && Is.string(candidate.title) &&
131 if (lc.TextDocumentEdit.is(edit)) { 176 (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, lc.Diagnostic.is)) &&
132 if (edit.edits.some((indel) => (indel as any).insertTextFormat === lc.InsertTextFormat.Snippet)) { 177 (candidate.kind === void 0 || Is.string(candidate.kind)) &&
133 return true; 178 (candidate.edit === void 0 && candidate.command === void 0);
134 }
135 }
136 }
137 return false;
138}
139
140function actionGroup(action: lc.CodeAction): string | undefined {
141 return (action as any).group;
142} 179}
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index 86302db37..1f3a7cf7e 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -8,6 +8,7 @@ import { spawnSync } from 'child_process';
8import { RunnableQuickPick, selectRunnable, createTask } from './run'; 8import { RunnableQuickPick, selectRunnable, createTask } from './run';
9import { AstInspector } from './ast_inspector'; 9import { AstInspector } from './ast_inspector';
10import { isRustDocument, sleep, isRustEditor } from './util'; 10import { isRustDocument, sleep, isRustEditor } from './util';
11import { startDebugSession, makeDebugConfig } from './debug';
11 12
12export * from './ast_inspector'; 13export * from './ast_inspector';
13export * from './run'; 14export * from './run';
@@ -54,6 +55,38 @@ export function analyzerStatus(ctx: Ctx): Cmd {
54 }; 55 };
55} 56}
56 57
58export function memoryUsage(ctx: Ctx): Cmd {
59 const tdcp = new class implements vscode.TextDocumentContentProvider {
60 readonly uri = vscode.Uri.parse('rust-analyzer-memory://memory');
61 readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
62
63 provideTextDocumentContent(_uri: vscode.Uri): vscode.ProviderResult<string> {
64 if (!vscode.window.activeTextEditor) return '';
65
66 return ctx.client.sendRequest(ra.memoryUsage, null).then((mem) => {
67 return 'Per-query memory usage:\n' + mem + '\n(note: database has been cleared)';
68 });
69 }
70
71 get onDidChange(): vscode.Event<vscode.Uri> {
72 return this.eventEmitter.event;
73 }
74 }();
75
76 ctx.pushCleanup(
77 vscode.workspace.registerTextDocumentContentProvider(
78 'rust-analyzer-memory',
79 tdcp,
80 ),
81 );
82
83 return async () => {
84 tdcp.eventEmitter.fire(tdcp.uri);
85 const document = await vscode.workspace.openTextDocument(tdcp.uri);
86 return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true);
87 };
88}
89
57export function matchingBrace(ctx: Ctx): Cmd { 90export function matchingBrace(ctx: Ctx): Cmd {
58 return async () => { 91 return async () => {
59 const editor = ctx.activeRustEditor; 92 const editor = ctx.activeRustEditor;
@@ -157,7 +190,7 @@ export function ssr(ctx: Ctx): Cmd {
157 190
158 const options: vscode.InputBoxOptions = { 191 const options: vscode.InputBoxOptions = {
159 value: "() ==>> ()", 192 value: "() ==>> ()",
160 prompt: "Enter request, for example 'Foo($a:expr) ==> Foo::new($a)' ", 193 prompt: "Enter request, for example 'Foo($a) ==> Foo::new($a)' ",
161 validateInput: async (x: string) => { 194 validateInput: async (x: string) => {
162 try { 195 try {
163 await client.sendRequest(ra.ssr, { query: x, parseOnly: true }); 196 await client.sendRequest(ra.ssr, { query: x, parseOnly: true });
@@ -170,9 +203,15 @@ export function ssr(ctx: Ctx): Cmd {
170 const request = await vscode.window.showInputBox(options); 203 const request = await vscode.window.showInputBox(options);
171 if (!request) return; 204 if (!request) return;
172 205
173 const edit = await client.sendRequest(ra.ssr, { query: request, parseOnly: false }); 206 vscode.window.withProgress({
207 location: vscode.ProgressLocation.Notification,
208 title: "Structured search replace in progress...",
209 cancellable: false,
210 }, async (_progress, _token) => {
211 const edit = await client.sendRequest(ra.ssr, { query: request, parseOnly: false });
174 212
175 await vscode.workspace.applyEdit(client.protocol2CodeConverter.asWorkspaceEdit(edit)); 213 await vscode.workspace.applyEdit(client.protocol2CodeConverter.asWorkspaceEdit(edit));
214 });
176 }; 215 };
177} 216}
178 217
@@ -197,20 +236,6 @@ export function toggleInlayHints(ctx: Ctx): Cmd {
197 }; 236 };
198} 237}
199 238
200export function run(ctx: Ctx): Cmd {
201 let prevRunnable: RunnableQuickPick | undefined;
202
203 return async () => {
204 const item = await selectRunnable(ctx, prevRunnable);
205 if (!item) return;
206
207 item.detail = 'rerun';
208 prevRunnable = item;
209 const task = createTask(item.runnable);
210 return await vscode.tasks.executeTask(task);
211 };
212}
213
214// Opens the virtual file that will show the syntax tree 239// Opens the virtual file that will show the syntax tree
215// 240//
216// The contents of the file come from the `TextDocumentContentProvider` 241// The contents of the file come from the `TextDocumentContentProvider`
@@ -337,8 +362,8 @@ export function expandMacro(ctx: Ctx): Cmd {
337 }; 362 };
338} 363}
339 364
340export function collectGarbage(ctx: Ctx): Cmd { 365export function reloadWorkspace(ctx: Ctx): Cmd {
341 return async () => ctx.client.sendRequest(ra.collectGarbage, null); 366 return async () => ctx.client.sendRequest(ra.reloadWorkspace, null);
342} 367}
343 368
344export function showReferences(ctx: Ctx): Cmd { 369export function showReferences(ctx: Ctx): Cmd {
@@ -356,10 +381,39 @@ export function showReferences(ctx: Ctx): Cmd {
356} 381}
357 382
358export function applyActionGroup(_ctx: Ctx): Cmd { 383export function applyActionGroup(_ctx: Ctx): Cmd {
359 return async (actions: { label: string; edit: vscode.WorkspaceEdit }[]) => { 384 return async (actions: { label: string; arguments: ra.ResolveCodeActionParams }[]) => {
360 const selectedAction = await vscode.window.showQuickPick(actions); 385 const selectedAction = await vscode.window.showQuickPick(actions);
361 if (!selectedAction) return; 386 if (!selectedAction) return;
362 await applySnippetWorkspaceEdit(selectedAction.edit); 387 vscode.commands.executeCommand(
388 'rust-analyzer.resolveCodeAction',
389 selectedAction.arguments,
390 );
391 };
392}
393
394export function gotoLocation(ctx: Ctx): Cmd {
395 return async (locationLink: lc.LocationLink) => {
396 const client = ctx.client;
397 if (client) {
398 const uri = client.protocol2CodeConverter.asUri(locationLink.targetUri);
399 let range = client.protocol2CodeConverter.asRange(locationLink.targetSelectionRange);
400 // collapse the range to a cursor position
401 range = range.with({ end: range.start });
402
403 await vscode.window.showTextDocument(uri, { selection: range });
404 }
405 };
406}
407
408export function resolveCodeAction(ctx: Ctx): Cmd {
409 const client = ctx.client;
410 return async (params: ra.ResolveCodeActionParams) => {
411 const item: lc.WorkspaceEdit = await client.sendRequest(ra.resolveCodeAction, params);
412 if (!item) {
413 return;
414 }
415 const edit = client.protocol2CodeConverter.asWorkspaceEdit(item);
416 await applySnippetWorkspaceEdit(edit);
363 }; 417 };
364} 418}
365 419
@@ -368,3 +422,62 @@ export function applySnippetWorkspaceEditCommand(_ctx: Ctx): Cmd {
368 await applySnippetWorkspaceEdit(edit); 422 await applySnippetWorkspaceEdit(edit);
369 }; 423 };
370} 424}
425
426export function run(ctx: Ctx): Cmd {
427 let prevRunnable: RunnableQuickPick | undefined;
428
429 return async () => {
430 const item = await selectRunnable(ctx, prevRunnable);
431 if (!item) return;
432
433 item.detail = 'rerun';
434 prevRunnable = item;
435 const task = await createTask(item.runnable, ctx.config);
436 return await vscode.tasks.executeTask(task);
437 };
438}
439
440export function runSingle(ctx: Ctx): Cmd {
441 return async (runnable: ra.Runnable) => {
442 const editor = ctx.activeRustEditor;
443 if (!editor) return;
444
445 const task = await createTask(runnable, ctx.config);
446 task.group = vscode.TaskGroup.Build;
447 task.presentationOptions = {
448 reveal: vscode.TaskRevealKind.Always,
449 panel: vscode.TaskPanelKind.Dedicated,
450 clear: true,
451 };
452
453 return vscode.tasks.executeTask(task);
454 };
455}
456
457export function debug(ctx: Ctx): Cmd {
458 let prevDebuggee: RunnableQuickPick | undefined;
459
460 return async () => {
461 const item = await selectRunnable(ctx, prevDebuggee, true);
462 if (!item) return;
463
464 item.detail = 'restart';
465 prevDebuggee = item;
466 return await startDebugSession(ctx, item.runnable);
467 };
468}
469
470export function debugSingle(ctx: Ctx): Cmd {
471 return async (config: ra.Runnable) => {
472 await startDebugSession(ctx, config);
473 };
474}
475
476export function newDebugConfig(ctx: Ctx): Cmd {
477 return async () => {
478 const item = await selectRunnable(ctx, undefined, true, false);
479 if (!item) return;
480
481 await makeDebugConfig(ctx, item.runnable);
482 };
483}
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index e8abf8284..033b04b60 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -5,6 +5,8 @@ export type UpdatesChannel = "stable" | "nightly";
5 5
6export const NIGHTLY_TAG = "nightly"; 6export const NIGHTLY_TAG = "nightly";
7 7
8export type RunnableEnvCfg = undefined | Record<string, string> | { mask?: string; env: Record<string, string> }[];
9
8export class Config { 10export class Config {
9 readonly extensionId = "matklad.rust-analyzer"; 11 readonly extensionId = "matklad.rust-analyzer";
10 12
@@ -16,10 +18,8 @@ export class Config {
16 "files", 18 "files",
17 "highlighting", 19 "highlighting",
18 "updates.channel", 20 "updates.channel",
19 "lens.enable", 21 "lens", // works as lens.*
20 "lens.run", 22 "hoverActions", // works as hoverActions.*
21 "lens.debug",
22 "lens.implementations",
23 ] 23 ]
24 .map(opt => `${this.rootSection}.${opt}`); 24 .map(opt => `${this.rootSection}.${opt}`);
25 25
@@ -39,10 +39,10 @@ export class Config {
39 39
40 private refreshLogging() { 40 private refreshLogging() {
41 log.setEnabled(this.traceExtension); 41 log.setEnabled(this.traceExtension);
42 log.debug( 42 log.info("Extension version:", this.package.version);
43 "Extension version:", this.package.version, 43
44 "using configuration:", this.cfg 44 const cfg = Object.entries(this.cfg).filter(([_, val]) => !(val instanceof Function));
45 ); 45 log.info("Using configuration", Object.fromEntries(cfg));
46 } 46 }
47 47
48 private async onDidChangeConfiguration(event: vscode.ConfigurationChangeEvent) { 48 private async onDidChangeConfiguration(event: vscode.ConfigurationChangeEvent) {
@@ -112,6 +112,14 @@ export class Config {
112 }; 112 };
113 } 113 }
114 114
115 get cargoRunner() {
116 return this.get<string | undefined>("cargoRunner");
117 }
118
119 get runnableEnv() {
120 return this.get<RunnableEnvCfg>("runnableEnv");
121 }
122
115 get debug() { 123 get debug() {
116 // "/rustc/<id>" used by suggestions only. 124 // "/rustc/<id>" used by suggestions only.
117 const { ["/rustc/<id>"]: _, ...sourceFileMap } = this.get<Record<string, string>>("debug.sourceFileMap"); 125 const { ["/rustc/<id>"]: _, ...sourceFileMap } = this.get<Record<string, string>>("debug.sourceFileMap");
@@ -119,7 +127,7 @@ export class Config {
119 return { 127 return {
120 engine: this.get<string>("debug.engine"), 128 engine: this.get<string>("debug.engine"),
121 engineSettings: this.get<object>("debug.engineSettings"), 129 engineSettings: this.get<object>("debug.engineSettings"),
122 openUpDebugPane: this.get<boolean>("debug.openUpDebugPane"), 130 openDebugPane: this.get<boolean>("debug.openDebugPane"),
123 sourceFileMap: sourceFileMap 131 sourceFileMap: sourceFileMap
124 }; 132 };
125 } 133 }
@@ -132,4 +140,14 @@ export class Config {
132 implementations: this.get<boolean>("lens.implementations"), 140 implementations: this.get<boolean>("lens.implementations"),
133 }; 141 };
134 } 142 }
143
144 get hoverActions() {
145 return {
146 enable: this.get<boolean>("hoverActions.enable"),
147 implementations: this.get<boolean>("hoverActions.implementations"),
148 run: this.get<boolean>("hoverActions.run"),
149 debug: this.get<boolean>("hoverActions.debug"),
150 gotoTypeDef: this.get<boolean>("hoverActions.gotoTypeDef"),
151 };
152 }
135} 153}
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index 41df11991..6e767babf 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -1,9 +1,11 @@
1import * as vscode from 'vscode'; 1import * as vscode from 'vscode';
2import * as lc from 'vscode-languageclient'; 2import * as lc from 'vscode-languageclient';
3import * as ra from './lsp_ext';
3 4
4import { Config } from './config'; 5import { Config } from './config';
5import { createClient } from './client'; 6import { createClient } from './client';
6import { isRustEditor, RustEditor } from './util'; 7import { isRustEditor, RustEditor } from './util';
8import { Status } from './lsp_ext';
7 9
8export class Ctx { 10export class Ctx {
9 private constructor( 11 private constructor(
@@ -11,6 +13,7 @@ export class Ctx {
11 private readonly extCtx: vscode.ExtensionContext, 13 private readonly extCtx: vscode.ExtensionContext,
12 readonly client: lc.LanguageClient, 14 readonly client: lc.LanguageClient,
13 readonly serverPath: string, 15 readonly serverPath: string,
16 readonly statusBar: vscode.StatusBarItem,
14 ) { 17 ) {
15 18
16 } 19 }
@@ -22,9 +25,18 @@ export class Ctx {
22 cwd: string, 25 cwd: string,
23 ): Promise<Ctx> { 26 ): Promise<Ctx> {
24 const client = createClient(serverPath, cwd); 27 const client = createClient(serverPath, cwd);
25 const res = new Ctx(config, extCtx, client, serverPath); 28
29 const statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left);
30 extCtx.subscriptions.push(statusBar);
31 statusBar.text = "rust-analyzer";
32 statusBar.tooltip = "ready";
33 statusBar.show();
34
35 const res = new Ctx(config, extCtx, client, serverPath, statusBar);
36
26 res.pushCleanup(client.start()); 37 res.pushCleanup(client.start());
27 await client.onReady(); 38 await client.onReady();
39 client.onNotification(ra.status, (status) => res.setStatus(status));
28 return res; 40 return res;
29 } 41 }
30 42
@@ -54,6 +66,35 @@ export class Ctx {
54 return this.extCtx.subscriptions; 66 return this.extCtx.subscriptions;
55 } 67 }
56 68
69 setStatus(status: Status) {
70 switch (status) {
71 case "loading":
72 this.statusBar.text = "$(sync~spin) rust-analyzer";
73 this.statusBar.tooltip = "Loading the project";
74 this.statusBar.command = undefined;
75 this.statusBar.color = undefined;
76 break;
77 case "ready":
78 this.statusBar.text = "rust-analyzer";
79 this.statusBar.tooltip = "Ready";
80 this.statusBar.command = undefined;
81 this.statusBar.color = undefined;
82 break;
83 case "invalid":
84 this.statusBar.text = "$(error) rust-analyzer";
85 this.statusBar.tooltip = "Failed to load the project";
86 this.statusBar.command = undefined;
87 this.statusBar.color = new vscode.ThemeColor("notificationsErrorIcon.foreground");
88 break;
89 case "needsReload":
90 this.statusBar.text = "$(warning) rust-analyzer";
91 this.statusBar.tooltip = "Click to reload";
92 this.statusBar.command = "rust-analyzer.reloadWorkspace";
93 this.statusBar.color = new vscode.ThemeColor("notificationsWarningIcon.foreground");
94 break;
95 }
96 }
97
57 pushCleanup(d: Disposable) { 98 pushCleanup(d: Disposable) {
58 this.extCtx.subscriptions.push(d); 99 this.extCtx.subscriptions.push(d);
59 } 100 }
diff --git a/editors/code/src/debug.ts b/editors/code/src/debug.ts
index 027504ecd..bd92c5b6d 100644
--- a/editors/code/src/debug.ts
+++ b/editors/code/src/debug.ts
@@ -3,46 +3,60 @@ import * as vscode from 'vscode';
3import * as path from 'path'; 3import * as path from 'path';
4import * as ra from './lsp_ext'; 4import * as ra from './lsp_ext';
5 5
6import { Cargo } from './cargo'; 6import { Cargo } from './toolchain';
7import { Ctx } from "./ctx"; 7import { Ctx } from "./ctx";
8import { prepareEnv } from "./run";
8 9
9const debugOutput = vscode.window.createOutputChannel("Debug"); 10const debugOutput = vscode.window.createOutputChannel("Debug");
10type DebugConfigProvider = (config: ra.Runnable, executable: string, sourceFileMap?: Record<string, string>) => vscode.DebugConfiguration; 11type DebugConfigProvider = (config: ra.Runnable, executable: string, env: Record<string, string>, sourceFileMap?: Record<string, string>) => vscode.DebugConfiguration;
11 12
12function getLldbDebugConfig(config: ra.Runnable, executable: string, sourceFileMap?: Record<string, string>): vscode.DebugConfiguration { 13export async function makeDebugConfig(ctx: Ctx, runnable: ra.Runnable): Promise<void> {
13 return { 14 const scope = ctx.activeRustEditor?.document.uri;
14 type: "lldb", 15 if (!scope) return;
15 request: "launch",
16 name: config.label,
17 program: executable,
18 args: config.extraArgs,
19 cwd: config.cwd,
20 sourceMap: sourceFileMap,
21 sourceLanguages: ["rust"]
22 };
23}
24 16
25function getCppvsDebugConfig(config: ra.Runnable, executable: string, sourceFileMap?: Record<string, string>): vscode.DebugConfiguration { 17 const debugConfig = await getDebugConfiguration(ctx, runnable);
26 return { 18 if (!debugConfig) return;
27 type: (os.platform() === "win32") ? "cppvsdbg" : "cppdbg", 19
28 request: "launch", 20 const wsLaunchSection = vscode.workspace.getConfiguration("launch", scope);
29 name: config.label, 21 const configurations = wsLaunchSection.get<any[]>("configurations") || [];
30 program: executable, 22
31 args: config.extraArgs, 23 const index = configurations.findIndex(c => c.name === debugConfig.name);
32 cwd: config.cwd, 24 if (index !== -1) {
33 sourceFileMap: sourceFileMap, 25 const answer = await vscode.window.showErrorMessage(`Launch configuration '${debugConfig.name}' already exists!`, 'Cancel', 'Update');
34 }; 26 if (answer === "Cancel") return;
27
28 configurations[index] = debugConfig;
29 } else {
30 configurations.push(debugConfig);
31 }
32
33 await wsLaunchSection.update("configurations", configurations);
35} 34}
36 35
37async function getDebug