]> git.lizzy.rs Git - rust.git/commitdiff
Drop extensionUri copy
authorLaurențiu Nicola <lnicola@dend.ro>
Thu, 23 Dec 2021 06:44:23 +0000 (08:44 +0200)
committerLaurențiu Nicola <lnicola@dend.ro>
Thu, 23 Dec 2021 07:36:55 +0000 (09:36 +0200)
editors/code/src/config.ts
editors/code/src/main.ts
editors/code/src/persistent_state.ts

index 9ed573ccf5c0de308f1963abb3a1f8510477ba91..cdbaa67fe22cdb65fb7752cfcb108ed6d073c8fd 100644 (file)
@@ -30,11 +30,9 @@ 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();
     }
index 06e231a9732f2617420f338911cf8d6e804f4621..74fdc59a1ef7043b9bee18cf32dd1ce5f52978da 100644 (file)
@@ -156,14 +156,10 @@ export async function deactivate() {
     ctx = undefined;
 }
 
-async function bootstrap(config: Config, state: PersistentState): Promise<string> {
+async function bootstrap(context: vscode.ExtensionContext, config: Config, state: PersistentState): Promise<string> {
     await vscode.workspace.fs.createDirectory(config.globalStorageUri).then();
-    const path = await bootstrapServer(config, state);
-    return path;
-}
 
-async function bootstrapServer(config: Config, state: PersistentState): Promise<string> {
-    const path = await getServer(config, state);
+    const path = await getServer(context, config, state);
     if (!path) {
         throw new Error(
             "Rust Analyzer Language Server is not available. " +
@@ -228,7 +224,7 @@ async function patchelf(dest: vscode.Uri): Promise<void> {
     );
 }
 
-async function getServer(config: Config, state: PersistentState): Promise<string | undefined> {
+async function getServer(context: vscode.ExtensionContext, config: Config, state: PersistentState): Promise<string | undefined> {
     const explicitPath = serverPath(config);
     if (explicitPath) {
         if (explicitPath.startsWith("~/")) {
@@ -264,14 +260,14 @@ 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 bundled = vscode.Uri.joinPath(config.installUri, "server", `rust-analyzer${ext}`);
+    const bundled = vscode.Uri.joinPath(context.extensionUri, "server", `rust-analyzer${ext}`);
     const bundledExists = await vscode.workspace.fs.stat(bundled).then(() => true, () => false);
     const exists = await vscode.workspace.fs.stat(dest).then(() => true, () => false);
     if (bundledExists) {
         if (!await isNixOs()) {
             return bundled.fsPath;
         }
-        if (!exists) {
+        if (!exists || config.package.version !== state.serverVersion) {
             await vscode.workspace.fs.copy(bundled, dest);
             await patchelf(dest);
         }
index f6d0a3d015f7069ea7db5d29b5eec6b1ba0d4968..3e86ed1e32317b3adff1151917a23e434c91ca92 100644 (file)
@@ -3,5 +3,18 @@ import { log } from './util';
 
 export class PersistentState {
     constructor(private readonly globalState: vscode.Memento) {
+        const { serverVersion } = this;
+        log.info("PersistentState:", { serverVersion });
+    }
+
+    /**
+     * Version of the extension that installed the server.
+     * Used to check if we need to run patchelf again on NixOS.
+     */
+    get serverVersion(): string | undefined {
+        return this.globalState.get("serverVersion");
+    }
+    async updateServerVersion(value: string | undefined) {
+        await this.globalState.update("serverVersion", value);
     }
 }