diff options
| author | Veetaha <gerzoh1@gmail.com> | 2020-03-08 00:01:48 +0200 |
|---|---|---|
| committer | Veetaha <gerzoh1@gmail.com> | 2020-03-08 00:01:48 +0200 |
| commit | c29a502e2549aba7e47a6f40581e5ccf74b5f481 (patch) | |
| tree | 72e84436a18794f40ffc93757d4c29075f9c3de8 /editors/code/src | |
| parent | 9dae94a78dd5b660dd97f884b91067c55b4a418e (diff) | |
| download | rust-c29a502e2549aba7e47a6f40581e5ccf74b5f481.tar.gz rust-c29a502e2549aba7e47a6f40581e5ccf74b5f481.zip | |
vscode: care about alwaysDownloadServer option before asking
Also renamed BinarySource to ArtifactSource in anticipation of nightlies installation that requires downloading not a binary itself but .vsix package, thus generalized to `artifact` term
Diffstat (limited to 'editors/code/src')
| -rw-r--r-- | editors/code/src/config.ts | 11 | ||||
| -rw-r--r-- | editors/code/src/installation/interfaces.ts | 15 | ||||
| -rw-r--r-- | editors/code/src/installation/server.ts | 28 |
3 files changed, 31 insertions, 23 deletions
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index bf915102c80..c4acb632dbf 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -1,6 +1,6 @@ import * as os from "os"; import * as vscode from 'vscode'; -import { BinarySource } from "./installation/interfaces"; +import { ArtifactSource } from "./installation/interfaces"; import { log } from "./util"; const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG; @@ -114,12 +114,12 @@ export class Config { } } - get serverSource(): null | BinarySource { + get serverSource(): null | ArtifactSource { const serverPath = RA_LSP_DEBUG ?? this.cfg.get<null | string>("serverPath"); if (serverPath) { return { - type: BinarySource.Type.ExplicitPath, + type: ArtifactSource.Type.ExplicitPath, path: Config.replaceTildeWithHomeDir(serverPath) }; } @@ -129,11 +129,12 @@ export class Config { if (!prebuiltBinaryName) return null; return { - type: BinarySource.Type.GithubRelease, + type: ArtifactSource.Type.GithubRelease, dir: this.ctx.globalStoragePath, file: prebuiltBinaryName, storage: this.ctx.globalState, - version: Config.extensionVersion, + tag: Config.extensionVersion, + askBeforeDownload: !(this.cfg.get("alwaysDownloadServer") as boolean), repo: { name: "rust-analyzer", owner: "rust-analyzer", diff --git a/editors/code/src/installation/interfaces.ts b/editors/code/src/installation/interfaces.ts index e40839e4b2b..50b63592186 100644 --- a/editors/code/src/installation/interfaces.ts +++ b/editors/code/src/installation/interfaces.ts @@ -14,14 +14,14 @@ export interface ArtifactReleaseInfo { } /** - * Represents the source of a binary artifact which is either specified by the user + * Represents the source of a an artifact which is either specified by the user * explicitly, or bundled by this extension from GitHub releases. */ -export type BinarySource = BinarySource.ExplicitPath | BinarySource.GithubRelease; +export type ArtifactSource = ArtifactSource.ExplicitPath | ArtifactSource.GithubRelease; -export namespace BinarySource { +export namespace ArtifactSource { /** - * Type tag for `BinarySource` discriminated union. + * Type tag for `ArtifactSource` discriminated union. */ export const enum Type { ExplicitPath, GithubRelease } @@ -56,13 +56,18 @@ export namespace BinarySource { /** * Tag of github release that denotes a version required by this extension. */ - version: string; + tag: string; /** * Object that provides `get()/update()` operations to store metadata * about the actual binary, e.g. its actual version. */ storage: vscode.Memento; + + /** + * Ask for the user permission before downloading the artifact. + */ + askBeforeDownload: boolean; } } diff --git a/editors/code/src/installation/server.ts b/editors/code/src/installation/server.ts index 6a6cf4f8c3a..ef1c45ff659 100644 --- a/editors/code/src/installation/server.ts +++ b/editors/code/src/installation/server.ts @@ -3,12 +3,12 @@ import * as path from "path"; import { promises as dns } from "dns"; import { spawnSync } from "child_process"; -import { BinarySource } from "./interfaces"; +import { ArtifactSource } from "./interfaces"; import { fetchArtifactReleaseInfo } from "./fetch_artifact_release_info"; import { downloadArtifact } from "./download_artifact"; import { log, assert } from "../util"; -export async function ensureServerBinary(source: null | BinarySource): Promise<null | string> { +export async function ensureServerBinary(source: null | ArtifactSource): Promise<null | string> { if (!source) { vscode.window.showErrorMessage( "Unfortunately we don't ship binaries for your platform yet. " + @@ -22,7 +22,7 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n } switch (source.type) { - case BinarySource.Type.ExplicitPath: { + case ArtifactSource.Type.ExplicitPath: { if (isBinaryAvailable(source.path)) { return source.path; } @@ -34,11 +34,11 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n ); return null; } - case BinarySource.Type.GithubRelease: { + case ArtifactSource.Type.GithubRelease: { const prebuiltBinaryPath = path.join(source.dir, source.file); const installedVersion: null | string = getServerVersion(source.storage); - const requiredVersion: string = source.version; + const requiredVersion: string = source.tag; log.debug("Installed version:", installedVersion, "required:", requiredVersion); @@ -46,12 +46,14 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n return prebuiltBinaryPath; } - const userResponse = await vscode.window.showInformationMessage( - `Language server version ${source.version} for rust-analyzer is not installed. ` + - "Do you want to download it now?", - "Download now", "Cancel" - ); - if (userResponse !== "Download now") return null; + if (source.askBeforeDownload) { + const userResponse = await vscode.window.showInformationMessage( + `Language server version ${source.tag} for rust-analyzer is not installed. ` + + "Do you want to download it now?", + "Download now", "Cancel" + ); + if (userResponse !== "Download now") return null; + } if (!await downloadServer(source)) return null; @@ -60,9 +62,9 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n } } -async function downloadServer(source: BinarySource.GithubRelease): Promise<boolean> { +async function downloadServer(source: ArtifactSource.GithubRelease): Promise<boolean> { try { - const releaseInfo = await fetchArtifactReleaseInfo(source.repo, source.file, source.version); + const releaseInfo = await fetchArtifactReleaseInfo(source.repo, source.file, source.tag); await downloadArtifact(releaseInfo, source.file, source.dir, "language server"); await setServerVersion(source.storage, releaseInfo.releaseName); |
