aboutsummaryrefslogtreecommitdiff
path: root/editors/code
diff options
context:
space:
mode:
Diffstat (limited to 'editors/code')
-rw-r--r--editors/code/package-lock.json17
-rw-r--r--editors/code/package.json56
-rw-r--r--editors/code/src/config.ts8
-rw-r--r--editors/code/src/main.ts6
-rw-r--r--editors/code/src/net.ts25
5 files changed, 72 insertions, 40 deletions
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json
index 9d0d1d4ec..198c17556 100644
--- a/editors/code/package-lock.json
+++ b/editors/code/package-lock.json
@@ -9,6 +9,7 @@
9 "version": "0.4.0-dev", 9 "version": "0.4.0-dev",
10 "license": "MIT OR Apache-2.0", 10 "license": "MIT OR Apache-2.0",
11 "dependencies": { 11 "dependencies": {
12 "https-proxy-agent": "^5.0.0",
12 "node-fetch": "^2.6.1", 13 "node-fetch": "^2.6.1",
13 "vscode-languageclient": "^7.1.0-next.4" 14 "vscode-languageclient": "^7.1.0-next.4"
14 }, 15 },
@@ -515,7 +516,6 @@
515 "version": "6.0.2", 516 "version": "6.0.2",
516 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 517 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
517 "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 518 "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
518 "dev": true,
519 "dependencies": { 519 "dependencies": {
520 "debug": "4" 520 "debug": "4"
521 }, 521 },
@@ -830,6 +830,7 @@
830 "dependencies": { 830 "dependencies": {
831 "anymatch": "~3.1.1", 831 "anymatch": "~3.1.1",
832 "braces": "~3.0.2", 832 "braces": "~3.0.2",
833 "fsevents": "~2.3.1",
833 "glob-parent": "~5.1.0", 834 "glob-parent": "~5.1.0",
834 "is-binary-path": "~2.1.0", 835 "is-binary-path": "~2.1.0",
835 "is-glob": "~4.0.1", 836 "is-glob": "~4.0.1",
@@ -959,7 +960,6 @@
959 "version": "4.3.1", 960 "version": "4.3.1",
960 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 961 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
961 "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 962 "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
962 "dev": true,
963 "dependencies": { 963 "dependencies": {
964 "ms": "2.1.2" 964 "ms": "2.1.2"
965 }, 965 },
@@ -1759,7 +1759,6 @@
1759 "version": "5.0.0", 1759 "version": "5.0.0",
1760 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1760 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
1761 "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1761 "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
1762 "dev": true,
1763 "dependencies": { 1762 "dependencies": {
1764 "agent-base": "6", 1763 "agent-base": "6",
1765 "debug": "4" 1764 "debug": "4"
@@ -2236,8 +2235,7 @@
2236 "node_modules/ms": { 2235 "node_modules/ms": {
2237 "version": "2.1.2", 2236 "version": "2.1.2",
2238 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2237 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2239 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2238 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2240 "dev": true
2241 }, 2239 },
2242 "node_modules/mute-stream": { 2240 "node_modules/mute-stream": {
2243 "version": "0.0.8", 2241 "version": "0.0.8",
@@ -2682,6 +2680,9 @@
2682 "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", 2680 "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz",
2683 "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", 2681 "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==",
2684 "dev": true, 2682 "dev": true,
2683 "dependencies": {
2684 "fsevents": "~2.3.1"
2685 },
2685 "bin": { 2686 "bin": {
2686 "rollup": "dist/bin/rollup" 2687 "rollup": "dist/bin/rollup"
2687 }, 2688 },
@@ -3843,7 +3844,6 @@
3843 "version": "6.0.2", 3844 "version": "6.0.2",
3844 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 3845 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
3845 "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 3846 "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
3846 "dev": true,
3847 "requires": { 3847 "requires": {
3848 "debug": "4" 3848 "debug": "4"
3849 } 3849 }
@@ -4190,7 +4190,6 @@
4190 "version": "4.3.1", 4190 "version": "4.3.1",
4191 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 4191 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
4192 "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 4192 "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
4193 "dev": true,
4194 "requires": { 4193 "requires": {
4195 "ms": "2.1.2" 4194 "ms": "2.1.2"
4196 } 4195 }
@@ -4798,7 +4797,6 @@
4798 "version": "5.0.0", 4797 "version": "5.0.0",
4799 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 4798 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
4800 "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 4799 "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
4801 "dev": true,
4802 "requires": { 4800 "requires": {
4803 "agent-base": "6", 4801 "agent-base": "6",
4804 "debug": "4" 4802 "debug": "4"
@@ -5175,8 +5173,7 @@
5175 "ms": { 5173 "ms": {
5176 "version": "2.1.2", 5174 "version": "2.1.2",
5177 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 5175 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
5178 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 5176 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
5179 "dev": true
5180 }, 5177 },
5181 "mute-stream": { 5178 "mute-stream": {
5182 "version": "0.0.8", 5179 "version": "0.0.8",
diff --git a/editors/code/package.json b/editors/code/package.json
index 1987364bc..b29f006f0 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -35,6 +35,7 @@
35 "test": "node ./out/tests/runTests.js" 35 "test": "node ./out/tests/runTests.js"
36 }, 36 },
37 "dependencies": { 37 "dependencies": {
38 "https-proxy-agent": "^5.0.0",
38 "node-fetch": "^2.6.1", 39 "node-fetch": "^2.6.1",
39 "vscode-languageclient": "^7.1.0-next.4" 40 "vscode-languageclient": "^7.1.0-next.4"
40 }, 41 },
@@ -385,13 +386,18 @@
385 "Force import paths to be absolute by always starting them with `crate` or the crate name they refer to." 386 "Force import paths to be absolute by always starting them with `crate` or the crate name they refer to."
386 ] 387 ]
387 }, 388 },
389 "rust-analyzer.assist.importGroup": {
390 "markdownDescription": "Group inserted imports by the [following order](https://rust-analyzer.github.io/manual.html#auto-import). Groups are separated by newlines.",
391 "default": true,
392 "type": "boolean"
393 },
388 "rust-analyzer.callInfo.full": { 394 "rust-analyzer.callInfo.full": {
389 "markdownDescription": "Show function name and docs in parameter hints.", 395 "markdownDescription": "Show function name and docs in parameter hints.",
390 "default": true, 396 "default": true,
391 "type": "boolean" 397 "type": "boolean"
392 }, 398 },
393 "rust-analyzer.cargo.autoreload": { 399 "rust-analyzer.cargo.autoreload": {
394 "markdownDescription": "Automatically refresh project info via `cargo metadata` on `Cargo.toml` changes.", 400 "markdownDescription": "Automatically refresh project info via `cargo metadata` on\n`Cargo.toml` changes.",
395 "default": true, 401 "default": true,
396 "type": "boolean" 402 "type": "boolean"
397 }, 403 },
@@ -410,7 +416,7 @@
410 }, 416 },
411 "rust-analyzer.cargo.runBuildScripts": { 417 "rust-analyzer.cargo.runBuildScripts": {
412 "markdownDescription": "Run build scripts (`build.rs`) for more precise code analysis.", 418 "markdownDescription": "Run build scripts (`build.rs`) for more precise code analysis.",
413 "default": false, 419 "default": true,
414 "type": "boolean" 420 "type": "boolean"
415 }, 421 },
416 "rust-analyzer.cargo.noDefaultFeatures": { 422 "rust-analyzer.cargo.noDefaultFeatures": {
@@ -437,7 +443,7 @@
437 "type": "boolean" 443 "type": "boolean"
438 }, 444 },
439 "rust-analyzer.checkOnSave.allFeatures": { 445 "rust-analyzer.checkOnSave.allFeatures": {
440 "markdownDescription": "Check with all features (`--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`.", 446 "markdownDescription": "Check with all features (`--all-features`).\nDefaults to `#rust-analyzer.cargo.allFeatures#`.",
441 "default": null, 447 "default": null,
442 "type": [ 448 "type": [
443 "null", 449 "null",
@@ -463,7 +469,7 @@
463 ] 469 ]
464 }, 470 },
465 "rust-analyzer.checkOnSave.target": { 471 "rust-analyzer.checkOnSave.target": {
466 "markdownDescription": "Check for a specific target. Defaults to `#rust-analyzer.cargo.target#`.", 472 "markdownDescription": "Check for a specific target. Defaults to\n`#rust-analyzer.cargo.target#`.",
467 "default": null, 473 "default": null,
468 "type": [ 474 "type": [
469 "null", 475 "null",
@@ -479,7 +485,7 @@
479 } 485 }
480 }, 486 },
481 "rust-analyzer.checkOnSave.features": { 487 "rust-analyzer.checkOnSave.features": {
482 "markdownDescription": "List of features to activate. Defaults to `#rust-analyzer.cargo.features#`.", 488 "markdownDescription": "List of features to activate. Defaults to\n`#rust-analyzer.cargo.features#`.",
483 "default": null, 489 "default": null,
484 "type": [ 490 "type": [
485 "null", 491 "null",
@@ -490,7 +496,7 @@
490 } 496 }
491 }, 497 },
492 "rust-analyzer.checkOnSave.overrideCommand": { 498 "rust-analyzer.checkOnSave.overrideCommand": {
493 "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for checking. The command should include `--message-format=json` or similar option.", 499 "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for\nchecking. The command should include `--message-format=json` or\nsimilar option.",
494 "default": null, 500 "default": null,
495 "type": [ 501 "type": [
496 "null", 502 "null",
@@ -516,7 +522,7 @@
516 "type": "boolean" 522 "type": "boolean"
517 }, 523 },
518 "rust-analyzer.completion.autoimport.enable": { 524 "rust-analyzer.completion.autoimport.enable": {
519 "markdownDescription": "Toggles the additional completions that automatically add imports when completed. Note that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled.", 525 "markdownDescription": "Toggles the additional completions that automatically add imports when completed.\nNote that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled.",
520 "default": true, 526 "default": true,
521 "type": "boolean" 527 "type": "boolean"
522 }, 528 },
@@ -526,7 +532,7 @@
526 "type": "boolean" 532 "type": "boolean"
527 }, 533 },
528 "rust-analyzer.diagnostics.enableExperimental": { 534 "rust-analyzer.diagnostics.enableExperimental": {
529 "markdownDescription": "Whether to show experimental rust-analyzer diagnostics that might have more false positives than usual.", 535 "markdownDescription": "Whether to show experimental rust-analyzer diagnostics that might\nhave more false positives than usual.",
530 "default": true, 536 "default": true,
531 "type": "boolean" 537 "type": "boolean"
532 }, 538 },
@@ -540,7 +546,7 @@
540 "uniqueItems": true 546 "uniqueItems": true
541 }, 547 },
542 "rust-analyzer.diagnostics.warningsAsHint": { 548 "rust-analyzer.diagnostics.warningsAsHint": {
543 "markdownDescription": "List of warnings that should be displayed with info severity.\\n\\nThe warnings will be indicated by a blue squiggly underline in code and a blue icon in the `Problems Panel`.", 549 "markdownDescription": "List of warnings that should be displayed with info severity.\n\nThe warnings will be indicated by a blue squiggly underline in code\nand a blue icon in the `Problems Panel`.",
544 "default": [], 550 "default": [],
545 "type": "array", 551 "type": "array",
546 "items": { 552 "items": {
@@ -548,7 +554,7 @@
548 } 554 }
549 }, 555 },
550 "rust-analyzer.diagnostics.warningsAsInfo": { 556 "rust-analyzer.diagnostics.warningsAsInfo": {
551 "markdownDescription": "List of warnings that should be displayed with hint severity.\\n\\nThe warnings will be indicated by faded text or three dots in code and will not show up in the `Problems Panel`.", 557 "markdownDescription": "List of warnings that should be displayed with hint severity.\n\nThe warnings will be indicated by faded text or three dots in code\nand will not show up in the `Problems Panel`.",
552 "default": [], 558 "default": [],
553 "type": "array", 559 "type": "array",
554 "items": { 560 "items": {
@@ -569,7 +575,7 @@
569 } 575 }
570 }, 576 },
571 "rust-analyzer.hoverActions.debug": { 577 "rust-analyzer.hoverActions.debug": {
572 "markdownDescription": "Whether to show `Debug` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.", 578 "markdownDescription": "Whether to show `Debug` action. Only applies when\n`#rust-analyzer.hoverActions.enable#` is set.",
573 "default": true, 579 "default": true,
574 "type": "boolean" 580 "type": "boolean"
575 }, 581 },
@@ -579,17 +585,17 @@
579 "type": "boolean" 585 "type": "boolean"
580 }, 586 },
581 "rust-analyzer.hoverActions.gotoTypeDef": { 587 "rust-analyzer.hoverActions.gotoTypeDef": {
582 "markdownDescription": "Whether to show `Go to Type Definition` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.", 588 "markdownDescription": "Whether to show `Go to Type Definition` action. Only applies when\n`#rust-analyzer.hoverActions.enable#` is set.",
583 "default": true, 589 "default": true,
584 "type": "boolean" 590 "type": "boolean"
585 }, 591 },
586 "rust-analyzer.hoverActions.implementations": { 592 "rust-analyzer.hoverActions.implementations": {
587 "markdownDescription": "Whether to show `Implementations` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.", 593 "markdownDescription": "Whether to show `Implementations` action. Only applies when\n`#rust-analyzer.hoverActions.enable#` is set.",
588 "default": true, 594 "default": true,
589 "type": "boolean" 595 "type": "boolean"
590 }, 596 },
591 "rust-analyzer.hoverActions.run": { 597 "rust-analyzer.hoverActions.run": {
592 "markdownDescription": "Whether to show `Run` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.", 598 "markdownDescription": "Whether to show `Run` action. Only applies when\n`#rust-analyzer.hoverActions.enable#` is set.",
593 "default": true, 599 "default": true,
594 "type": "boolean" 600 "type": "boolean"
595 }, 601 },
@@ -613,7 +619,7 @@
613 "minimum": 0 619 "minimum": 0
614 }, 620 },
615 "rust-analyzer.inlayHints.parameterHints": { 621 "rust-analyzer.inlayHints.parameterHints": {
616 "markdownDescription": "Whether to show function parameter name inlay hints at the call site.", 622 "markdownDescription": "Whether to show function parameter name inlay hints at the call\nsite.",
617 "default": true, 623 "default": true,
618 "type": "boolean" 624 "type": "boolean"
619 }, 625 },
@@ -623,7 +629,7 @@
623 "type": "boolean" 629 "type": "boolean"
624 }, 630 },
625 "rust-analyzer.lens.debug": { 631 "rust-analyzer.lens.debug": {
626 "markdownDescription": "Whether to show `Debug` lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 632 "markdownDescription": "Whether to show `Debug` lens. Only applies when\n`#rust-analyzer.lens.enable#` is set.",
627 "default": true, 633 "default": true,
628 "type": "boolean" 634 "type": "boolean"
629 }, 635 },
@@ -633,27 +639,27 @@
633 "type": "boolean" 639 "type": "boolean"
634 }, 640 },
635 "rust-analyzer.lens.implementations": { 641 "rust-analyzer.lens.implementations": {
636 "markdownDescription": "Whether to show `Implementations` lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 642 "markdownDescription": "Whether to show `Implementations` lens. Only applies when\n`#rust-analyzer.lens.enable#` is set.",
637 "default": true, 643 "default": true,
638 "type": "boolean" 644 "type": "boolean"
639 }, 645 },
640 "rust-analyzer.lens.run": { 646 "rust-analyzer.lens.run": {
641 "markdownDescription": "Whether to show `Run` lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 647 "markdownDescription": "Whether to show `Run` lens. Only applies when\n`#rust-analyzer.lens.enable#` is set.",
642 "default": true, 648 "default": true,
643 "type": "boolean" 649 "type": "boolean"
644 }, 650 },
645 "rust-analyzer.lens.methodReferences": { 651 "rust-analyzer.lens.methodReferences": {
646 "markdownDescription": "Whether to show `Method References` lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 652 "markdownDescription": "Whether to show `Method References` lens. Only applies when\n`#rust-analyzer.lens.enable#` is set.",
647 "default": false, 653 "default": false,
648 "type": "boolean" 654 "type": "boolean"
649 }, 655 },
650 "rust-analyzer.lens.references": { 656 "rust-analyzer.lens.references": {
651 "markdownDescription": "Whether to show `References` lens. Only applies when `#rust-analyzer.lens.enable#` is set.", 657 "markdownDescription": "Whether to show `References` lens. Only applies when\n`#rust-analyzer.lens.enable#` is set.",
652 "default": false, 658 "default": false,
653 "type": "boolean" 659 "type": "boolean"
654 }, 660 },
655 "rust-analyzer.linkedProjects": { 661 "rust-analyzer.linkedProjects": {
656 "markdownDescription": "Disable project auto-discovery in favor of explicitly specified set of projects.\\n\\nElements must be paths pointing to `Cargo.toml`, `rust-project.json`, or JSON objects in `rust-project.json` format.", 662 "markdownDescription": "Disable project auto-discovery in favor of explicitly specified set\nof projects.\n\nElements must be paths pointing to `Cargo.toml`,\n`rust-project.json`, or JSON objects in `rust-project.json` format.",
657 "default": [], 663 "default": [],
658 "type": "array", 664 "type": "array",
659 "items": { 665 "items": {
@@ -683,7 +689,7 @@
683 "type": "boolean" 689 "type": "boolean"
684 }, 690 },
685 "rust-analyzer.procMacro.server": { 691 "rust-analyzer.procMacro.server": {
686 "markdownDescription": "Internal config, path to proc-macro server executable (typically, this is rust-analyzer itself, but we override this in tests).", 692 "markdownDescription": "Internal config, path to proc-macro server executable (typically,\nthis is rust-analyzer itself, but we override this in tests).",
687 "default": null, 693 "default": null,
688 "type": [ 694 "type": [
689 "null", 695 "null",
@@ -699,7 +705,7 @@
699 ] 705 ]
700 }, 706 },
701 "rust-analyzer.runnables.cargoExtraArgs": { 707 "rust-analyzer.runnables.cargoExtraArgs": {
702 "markdownDescription": "Additional arguments to be passed to cargo for runnables such as tests or binaries.\\nFor example, it may be `--release`.", 708 "markdownDescription": "Additional arguments to be passed to cargo for runnables such as\ntests or binaries. For example, it may be `--release`.",
703 "default": [], 709 "default": [],
704 "type": "array", 710 "type": "array",
705 "items": { 711 "items": {
@@ -707,7 +713,7 @@
707 } 713 }
708 }, 714 },
709 "rust-analyzer.rustcSource": { 715 "rust-analyzer.rustcSource": {
710 "markdownDescription": "Path to the rust compiler sources, for usage in rustc_private projects, or \"discover\" to try to automatically find it.", 716 "markdownDescription": "Path to the Cargo.toml of the rust compiler workspace, for usage in rustc_private\nprojects, or \"discover\" to try to automatically find it.\n\nAny project which uses rust-analyzer with the rustcPrivate\ncrates must set `[package.metadata.rust-analyzer] rustc_private=true` to use it.\n\nThis option is not reloaded automatically; you must restart rust-analyzer for it to take effect.",
711 "default": null, 717 "default": null,
712 "type": [ 718 "type": [
713 "null", 719 "null",
@@ -723,7 +729,7 @@
723 } 729 }
724 }, 730 },
725 "rust-analyzer.rustfmt.overrideCommand": { 731 "rust-analyzer.rustfmt.overrideCommand": {
726 "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for formatting.", 732 "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for\nformatting.",
727 "default": null, 733 "default": null,
728 "type": [ 734 "type": [
729 "null", 735 "null",
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index ddb5cfbd3..82f0a0566 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -100,6 +100,14 @@ export class Config {
100 get channel() { return this.get<UpdatesChannel>("updates.channel"); } 100 get channel() { return this.get<UpdatesChannel>("updates.channel"); }
101 get askBeforeDownload() { return this.get<boolean>("updates.askBeforeDownload"); } 101 get askBeforeDownload() { return this.get<boolean>("updates.askBeforeDownload"); }
102 get traceExtension() { return this.get<boolean>("trace.extension"); } 102 get traceExtension() { return this.get<boolean>("trace.extension"); }
103 get httpProxy() {
104 const httpProxy = vscode
105 .workspace
106 .getConfiguration('http')
107 .get<null | string>("proxy")!;
108
109 return httpProxy || process.env["https_proxy"] || process.env["HTTPS_PROXY"];
110 }
103 111
104 get inlayHints() { 112 get inlayHints() {
105 return { 113 return {
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 00393d6e8..1be4f1758 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -183,7 +183,7 @@ async function bootstrapExtension(config: Config, state: PersistentState): Promi
183 } 183 }
184 184
185 const release = await downloadWithRetryDialog(state, async () => { 185 const release = await downloadWithRetryDialog(state, async () => {
186 return await fetchRelease("nightly", state.githubToken); 186 return await fetchRelease("nightly", state.githubToken, config.httpProxy);
187 }).catch(async (e) => { 187 }).catch(async (e) => {
188 log.error(e); 188 log.error(e);
189 if (state.releaseId === undefined) { // Show error only for the initial download 189 if (state.releaseId === undefined) { // Show error only for the initial download
@@ -209,6 +209,7 @@ async function bootstrapExtension(config: Config, state: PersistentState): Promi
209 url: artifact.browser_download_url, 209 url: artifact.browser_download_url,
210 dest, 210 dest,
211 progressTitle: "Downloading rust-analyzer extension", 211 progressTitle: "Downloading rust-analyzer extension",
212 httpProxy: config.httpProxy,
212 }); 213 });
213 }); 214 });
214 215
@@ -331,7 +332,7 @@ async function getServer(config: Config, state: PersistentState): Promise<string
331 332
332 const releaseTag = config.package.releaseTag; 333 const releaseTag = config.package.releaseTag;
333 const release = await downloadWithRetryDialog(state, async () => { 334 const release = await downloadWithRetryDialog(state, async () => {
334 return await fetchRelease(releaseTag, state.githubToken); 335 return await fetchRelease(releaseTag, state.githubToken, config.httpProxy);
335 }); 336 });
336 const artifact = release.assets.find(artifact => artifact.name === `rust-analyzer-${platform}.gz`); 337 const artifact = release.assets.find(artifact => artifact.name === `rust-analyzer-${platform}.gz`);
337 assert(!!artifact, `Bad release: ${JSON.stringify(release)}`); 338 assert(!!artifact, `Bad release: ${JSON.stringify(release)}`);
@@ -343,6 +344,7 @@ async function getServer(config: Config, state: PersistentState): Promise<string
343 progressTitle: "Downloading rust-analyzer server", 344 progressTitle: "Downloading rust-analyzer server",
344 gunzip: true, 345 gunzip: true,
345 mode: 0o755, 346 mode: 0o755,
347 httpProxy: config.httpProxy,
346 }); 348 });
347 }); 349 });
348 350
diff --git a/editors/code/src/net.ts b/editors/code/src/net.ts
index d39dc1baf..07ebc615c 100644
--- a/editors/code/src/net.ts
+++ b/editors/code/src/net.ts
@@ -1,4 +1,6 @@
1import fetch from "node-fetch"; 1import fetch from "node-fetch";
2var HttpsProxyAgent = require('https-proxy-agent');
3
2import * as vscode from "vscode"; 4import * as vscode from "vscode";
3import * as stream from "stream"; 5import * as stream from "stream";
4import * as crypto from "crypto"; 6import * as crypto from "crypto";
@@ -17,6 +19,7 @@ const REPO = "rust-analyzer";
17export async function fetchRelease( 19export async function fetchRelease(
18 releaseTag: string, 20 releaseTag: string,
19 githubToken: string | null | undefined, 21 githubToken: string | null | undefined,
22 httpProxy: string | null | undefined,
20): Promise<GithubRelease> { 23): Promise<GithubRelease> {
21 24
22 const apiEndpointPath = `/repos/${OWNER}/${REPO}/releases/tags/${releaseTag}`; 25 const apiEndpointPath = `/repos/${OWNER}/${REPO}/releases/tags/${releaseTag}`;
@@ -30,7 +33,14 @@ export async function fetchRelease(
30 headers.Authorization = "token " + githubToken; 33 headers.Authorization = "token " + githubToken;
31 } 34 }
32 35
33 const response = await fetch(requestUrl, { headers: headers }); 36 const response = await (() => {
37 if (httpProxy) {
38 log.debug(`Fetching release metadata via proxy: ${httpProxy}`);
39 return fetch(requestUrl, { headers: headers, agent: new HttpsProxyAgent(httpProxy) });
40 }
41
42 return fetch(requestUrl, { headers: headers });
43 })();
34 44
35 if (!response.ok) { 45 if (!response.ok) {
36 log.error("Error fetching artifact release info", { 46 log.error("Error fetching artifact release info", {
@@ -73,6 +83,7 @@ interface DownloadOpts {
73 dest: string; 83 dest: string;
74 mode?: number; 84 mode?: number;
75 gunzip?: boolean; 85 gunzip?: boolean;
86 httpProxy?: string;
76} 87}
77 88
78export async function download(opts: DownloadOpts) { 89export async function download(opts: DownloadOpts) {
@@ -91,7 +102,7 @@ export async function download(opts: DownloadOpts) {
91 }, 102 },
92 async (progress, _cancellationToken) => { 103 async (progress, _cancellationToken) => {
93 let lastPercentage = 0; 104 let lastPercentage = 0;
94 await downloadFile(opts.url, tempFile, opts.mode, !!opts.gunzip, (readBytes, totalBytes) => { 105 await downloadFile(opts.url, tempFile, opts.mode, !!opts.gunzip, opts.httpProxy, (readBytes, totalBytes) => {
95 const newPercentage = Math.round((readBytes / totalBytes) * 100); 106 const newPercentage = Math.round((readBytes / totalBytes) * 100);
96 if (newPercentage !== lastPercentage) { 107 if (newPercentage !== lastPercentage) {
97 progress.report({ 108 progress.report({
@@ -113,9 +124,17 @@ async function downloadFile(
113 destFilePath: fs.PathLike, 124 destFilePath: fs.PathLike,
114 mode: number | undefined, 125 mode: number | undefined,
115 gunzip: boolean, 126 gunzip: boolean,
127 httpProxy: string | null | undefined,
116 onProgress: (readBytes: number, totalBytes: number) => void 128 onProgress: (readBytes: number, totalBytes: number) => void
117): Promise<void> { 129): Promise<void> {
118 const res = await fetch(url); 130 const res = await (() => {
131 if (httpProxy) {
132 log.debug(`Downloading ${url} via proxy: ${httpProxy}`);
133 return fetch(url, { agent: new HttpsProxyAgent(httpProxy) });
134 }
135
136 return fetch(url);
137 })();
119 138
120 if (!res.ok) { 139 if (!res.ok) {
121 log.error("Error", res.status, "while downloading file from", url); 140 log.error("Error", res.status, "while downloading file from", url);