Unnamed repository; edit this file 'description' to name the repository.
Prepare Code extension for bundling
Laurențiu Nicola 2021-12-18
parent 9f1a3ae · commit 262a698
-rw-r--r--docs/user/manual.adoc2
-rw-r--r--editors/code/.vscodeignore1
-rw-r--r--editors/code/src/config.ts2
-rw-r--r--editors/code/src/main.ts15
4 files changed, 19 insertions, 1 deletions
diff --git a/docs/user/manual.adoc b/docs/user/manual.adoc
index 4fbe2379c3..cfcad7c66b 100644
--- a/docs/user/manual.adoc
+++ b/docs/user/manual.adoc
@@ -74,6 +74,8 @@ The server binary is stored in:
* macOS: `~/Library/Application\ Support/Code/User/globalStorage/matklad.rust-analyzer`
* Windows: `%APPDATA%\Code\User\globalStorage\matklad.rust-analyzer`
+However, if you are using a version of the extension with a bundled server binary and you are not running NixOS, the server binary might be instead running from: `~/.vscode/extensions/matklad.rust-analyzer-VERSION`.
+
Note that we only support two most recent versions of VS Code.
==== Updates
diff --git a/editors/code/.vscodeignore b/editors/code/.vscodeignore
index ec3c10e025..09dc27056b 100644
--- a/editors/code/.vscodeignore
+++ b/editors/code/.vscodeignore
@@ -10,4 +10,5 @@
!package-lock.json
!package.json
!ra_syntax_tree.tmGrammar.json
+!server
!README.md
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index 58947118c9..cb0868db59 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -36,9 +36,11 @@ export class Config {
} = vscode.extensions.getExtension(this.extensionId)!.packageJSON;
readonly globalStorageUri: vscode.Uri;
+ readonly installUri: vscode.Uri;
constructor(ctx: vscode.ExtensionContext) {
this.globalStorageUri = ctx.globalStorageUri;
+ this.installUri = ctx.extensionUri;
vscode.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, ctx.subscriptions);
this.refreshLogging();
}
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index a06fc09fc8..e2a9c4c737 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -345,7 +345,20 @@ async function getServer(config: Config, state: PersistentState): Promise<string
}
const ext = platform.indexOf("-windows-") !== -1 ? ".exe" : "";
const dest = vscode.Uri.joinPath(config.globalStorageUri, `rust-analyzer-${platform}${ext}`);
- const exists = await vscode.workspace.fs.stat(dest).then(() => true, () => false);
+ const bundled = vscode.Uri.joinPath(config.installUri, "server", `rust-analyzer${ext}`);
+ const bundledExists = await vscode.workspace.fs.stat(bundled).then(() => true, () => false);
+ let exists = await vscode.workspace.fs.stat(dest).then(() => true, () => false);
+ if (bundledExists) {
+ await state.updateServerVersion(config.package.version);
+ if (!await isNixOs()) {
+ return bundled.fsPath;
+ }
+ if (!exists) {
+ await vscode.workspace.fs.copy(bundled, dest);
+ await patchelf(dest);
+ exists = true;
+ }
+ }
if (!exists) {
await state.updateServerVersion(undefined);
}