diff options
Diffstat (limited to 'editors/code')
-rw-r--r-- | editors/code/package.json | 23 | ||||
-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 |
4 files changed, 45 insertions, 32 deletions
diff --git a/editors/code/package.json b/editors/code/package.json index 225739328..7a4a93e30 100644 --- a/editors/code/package.json +++ b/editors/code/package.json | |||
@@ -191,7 +191,7 @@ | |||
191 | "properties": { | 191 | "properties": { |
192 | "lsp.diagnostics": { | 192 | "lsp.diagnostics": { |
193 | "type": "boolean", | 193 | "type": "boolean", |
194 | "description": "Whether to show diagnostics from `cargo check`" | 194 | "markdownDescription": "Whether to show diagnostics from `cargo check`" |
195 | }, | 195 | }, |
196 | "completion.insertion.add-call-parenthesis": { | 196 | "completion.insertion.add-call-parenthesis": { |
197 | "type": "boolean", | 197 | "type": "boolean", |
@@ -203,7 +203,7 @@ | |||
203 | }, | 203 | }, |
204 | "completion.enable-postfix": { | 204 | "completion.enable-postfix": { |
205 | "type": "boolean", | 205 | "type": "boolean", |
206 | "description": "Whether to show postfix snippets like `dbg`, `if`, `not`, etc." | 206 | "markdownDescription": "Whether to show postfix snippets like `dbg`, `if`, `not`, etc." |
207 | }, | 207 | }, |
208 | "call-info.full": { | 208 | "call-info.full": { |
209 | "type": "boolean", | 209 | "type": "boolean", |
@@ -211,14 +211,19 @@ | |||
211 | }, | 211 | }, |
212 | "notifications.workspace-loaded": { | 212 | "notifications.workspace-loaded": { |
213 | "type": "boolean", | 213 | "type": "boolean", |
214 | "description": "Whether to show `workspace loaded` message" | 214 | "markdownDescription": "Whether to show `workspace loaded` message" |
215 | }, | 215 | }, |
216 | "notifications.cargo-toml-not-found": { | 216 | "notifications.cargo-toml-not-found": { |
217 | "type": "boolean", | 217 | "type": "boolean", |
218 | "description": "Whether to show `can't find Cargo.toml` error message" | 218 | "markdownDescription": "Whether to show `can't find Cargo.toml` error message" |
219 | } | 219 | } |
220 | } | 220 | } |
221 | }, | 221 | }, |
222 | "rust-analyzer.updates.askBeforeDownload": { | ||
223 | "type": "boolean", | ||
224 | "default": true, | ||
225 | "description": "Whether to ask for permission before downloading any files from the Internet" | ||
226 | }, | ||
222 | "rust-analyzer.serverPath": { | 227 | "rust-analyzer.serverPath": { |
223 | "type": [ | 228 | "type": [ |
224 | "null", | 229 | "null", |
@@ -251,24 +256,24 @@ | |||
251 | "rust-analyzer.cargo-watch.enable": { | 256 | "rust-analyzer.cargo-watch.enable": { |
252 | "type": "boolean", | 257 | "type": "boolean", |
253 | "default": true, | 258 | "default": true, |
254 | "description": "Run `cargo check` for diagnostics on save" | 259 | "markdownDescription": "Run `cargo check` for diagnostics on save" |
255 | }, | 260 | }, |
256 | "rust-analyzer.cargo-watch.arguments": { | 261 | "rust-analyzer.cargo-watch.arguments": { |
257 | "type": "array", | 262 | "type": "array", |
258 | "items": { | 263 | "items": { |
259 | "type": "string" | 264 | "type": "string" |
260 | }, | 265 | }, |
261 | "description": "`cargo-watch` arguments. (e.g: `--features=\"shumway,pdf\"` will run as `cargo watch -x \"check --features=\"shumway,pdf\"\"` )", | 266 | "markdownDescription": "`cargo-watch` arguments. (e.g: `--features=\"shumway,pdf\"` will run as `cargo watch -x \"check --features=\"shumway,pdf\"\"` )", |
262 | "default": [] | 267 | "default": [] |
263 | }, | 268 | }, |
264 | "rust-analyzer.cargo-watch.command": { | 269 | "rust-analyzer.cargo-watch.command": { |
265 | "type": "string", | 270 | "type": "string", |
266 | "description": "`cargo-watch` command. (e.g: `clippy` will run as `cargo watch -x clippy` )", | 271 | "markdownDescription": "`cargo-watch` command. (e.g: `clippy` will run as `cargo watch -x clippy` )", |
267 | "default": "check" | 272 | "default": "check" |
268 | }, | 273 | }, |
269 | "rust-analyzer.cargo-watch.allTargets": { | 274 | "rust-analyzer.cargo-watch.allTargets": { |
270 | "type": "boolean", | 275 | "type": "boolean", |
271 | "description": "Check all targets and tests (will be passed as `--all-targets`)", | 276 | "markdownDescription": "Check all targets and tests (will be passed as `--all-targets`)", |
272 | "default": true | 277 | "default": true |
273 | }, | 278 | }, |
274 | "rust-analyzer.trace.server": { | 279 | "rust-analyzer.trace.server": { |
@@ -320,7 +325,7 @@ | |||
320 | "rust-analyzer.cargoFeatures.noDefaultFeatures": { | 325 | "rust-analyzer.cargoFeatures.noDefaultFeatures": { |
321 | "type": "boolean", | 326 | "type": "boolean", |
322 | "default": false, | 327 | "default": false, |
323 | "description": "Do not activate the `default` feature" | 328 | "markdownDescription": "Do not activate the `default` feature" |
324 | }, | 329 | }, |
325 | "rust-analyzer.cargoFeatures.allFeatures": { | 330 | "rust-analyzer.cargoFeatures.allFeatures": { |
326 | "type": "boolean", | 331 | "type": "boolean", |
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index bf915102c..b72206d3c 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts | |||
@@ -1,6 +1,6 @@ | |||
1 | import * as os from "os"; | 1 | import * as os from "os"; |
2 | import * as vscode from 'vscode'; | 2 | import * as vscode from 'vscode'; |
3 | import { BinarySource } from "./installation/interfaces"; | 3 | import { ArtifactSource } from "./installation/interfaces"; |
4 | import { log } from "./util"; | 4 | import { log } from "./util"; |
5 | 5 | ||
6 | const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG; | 6 | const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG; |
@@ -114,12 +114,12 @@ export class Config { | |||
114 | } | 114 | } |
115 | } | 115 | } |
116 | 116 | ||
117 | get serverSource(): null | BinarySource { | 117 | get serverSource(): null | ArtifactSource { |
118 | const serverPath = RA_LSP_DEBUG ?? this.cfg.get<null | string>("serverPath"); | 118 | const serverPath = RA_LSP_DEBUG ?? this.cfg.get<null | string>("serverPath"); |
119 | 119 | ||
120 | if (serverPath) { | 120 | if (serverPath) { |
121 | return { | 121 | return { |
122 | type: BinarySource.Type.ExplicitPath, | 122 | type: ArtifactSource.Type.ExplicitPath, |
123 | path: Config.replaceTildeWithHomeDir(serverPath) | 123 | path: Config.replaceTildeWithHomeDir(serverPath) |
124 | }; | 124 | }; |
125 | } | 125 | } |
@@ -129,11 +129,12 @@ export class Config { | |||
129 | if (!prebuiltBinaryName) return null; | 129 | if (!prebuiltBinaryName) return null; |
130 | 130 | ||
131 | return { | 131 | return { |
132 | type: BinarySource.Type.GithubRelease, | 132 | type: ArtifactSource.Type.GithubRelease, |
133 | dir: this.ctx.globalStoragePath, | 133 | dir: this.ctx.globalStoragePath, |
134 | file: prebuiltBinaryName, | 134 | file: prebuiltBinaryName, |
135 | storage: this.ctx.globalState, | 135 | storage: this.ctx.globalState, |
136 | version: Config.extensionVersion, | 136 | tag: Config.extensionVersion, |
137 | askBeforeDownload: this.cfg.get("updates.askBeforeDownload") as boolean, | ||
137 | repo: { | 138 | repo: { |
138 | name: "rust-analyzer", | 139 | name: "rust-analyzer", |
139 | owner: "rust-analyzer", | 140 | owner: "rust-analyzer", |
diff --git a/editors/code/src/installation/interfaces.ts b/editors/code/src/installation/interfaces.ts index e40839e4b..50b635921 100644 --- a/editors/code/src/installation/interfaces.ts +++ b/editors/code/src/installation/interfaces.ts | |||
@@ -14,14 +14,14 @@ export interface ArtifactReleaseInfo { | |||
14 | } | 14 | } |
15 | 15 | ||
16 | /** | 16 | /** |
17 | * Represents the source of a binary artifact which is either specified by the user | 17 | * Represents the source of a an artifact which is either specified by the user |
18 | * explicitly, or bundled by this extension from GitHub releases. | 18 | * explicitly, or bundled by this extension from GitHub releases. |
19 | */ | 19 | */ |
20 | export type BinarySource = BinarySource.ExplicitPath | BinarySource.GithubRelease; | 20 | export type ArtifactSource = ArtifactSource.ExplicitPath | ArtifactSource.GithubRelease; |
21 | 21 | ||
22 | export namespace BinarySource { | 22 | export namespace ArtifactSource { |
23 | /** | 23 | /** |
24 | * Type tag for `BinarySource` discriminated union. | 24 | * Type tag for `ArtifactSource` discriminated union. |
25 | */ | 25 | */ |
26 | export const enum Type { ExplicitPath, GithubRelease } | 26 | export const enum Type { ExplicitPath, GithubRelease } |
27 | 27 | ||
@@ -56,13 +56,18 @@ export namespace BinarySource { | |||
56 | /** | 56 | /** |
57 | * Tag of github release that denotes a version required by this extension. | 57 | * Tag of github release that denotes a version required by this extension. |
58 | */ | 58 | */ |
59 | version: string; | 59 | tag: string; |
60 | 60 | ||
61 | /** | 61 | /** |
62 | * Object that provides `get()/update()` operations to store metadata | 62 | * Object that provides `get()/update()` operations to store metadata |
63 | * about the actual binary, e.g. its actual version. | 63 | * about the actual binary, e.g. its actual version. |
64 | */ | 64 | */ |
65 | storage: vscode.Memento; | 65 | storage: vscode.Memento; |
66 | |||
67 | /** | ||
68 | * Ask for the user permission before downloading the artifact. | ||
69 | */ | ||
70 | askBeforeDownload: boolean; | ||
66 | } | 71 | } |
67 | 72 | ||
68 | } | 73 | } |
diff --git a/editors/code/src/installation/server.ts b/editors/code/src/installation/server.ts index 6a6cf4f8c..ef1c45ff6 100644 --- a/editors/code/src/installation/server.ts +++ b/editors/code/src/installation/server.ts | |||
@@ -3,12 +3,12 @@ import * as path from "path"; | |||
3 | import { promises as dns } from "dns"; | 3 | import { promises as dns } from "dns"; |
4 | import { spawnSync } from "child_process"; | 4 | import { spawnSync } from "child_process"; |
5 | 5 | ||
6 | import { BinarySource } from "./interfaces"; | 6 | import { ArtifactSource } from "./interfaces"; |
7 | import { fetchArtifactReleaseInfo } from "./fetch_artifact_release_info"; | 7 | import { fetchArtifactReleaseInfo } from "./fetch_artifact_release_info"; |
8 | import { downloadArtifact } from "./download_artifact"; | 8 | import { downloadArtifact } from "./download_artifact"; |
9 | import { log, assert } from "../util"; | 9 | import { log, assert } from "../util"; |
10 | 10 | ||
11 | export async function ensureServerBinary(source: null | BinarySource): Promise<null | string> { | 11 | export async function ensureServerBinary(source: null | ArtifactSource): Promise<null | string> { |
12 | if (!source) { | 12 | if (!source) { |
13 | vscode.window.showErrorMessage( | 13 | vscode.window.showErrorMessage( |
14 | "Unfortunately we don't ship binaries for your platform yet. " + | 14 | "Unfortunately we don't ship binaries for your platform yet. " + |
@@ -22,7 +22,7 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n | |||
22 | } | 22 | } |
23 | 23 | ||
24 | switch (source.type) { | 24 | switch (source.type) { |
25 | case BinarySource.Type.ExplicitPath: { | 25 | case ArtifactSource.Type.ExplicitPath: { |
26 | if (isBinaryAvailable(source.path)) { | 26 | if (isBinaryAvailable(source.path)) { |
27 | return source.path; | 27 | return source.path; |
28 | } | 28 | } |
@@ -34,11 +34,11 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n | |||
34 | ); | 34 | ); |
35 | return null; | 35 | return null; |
36 | } | 36 | } |
37 | case BinarySource.Type.GithubRelease: { | 37 | case ArtifactSource.Type.GithubRelease: { |
38 | const prebuiltBinaryPath = path.join(source.dir, source.file); | 38 | const prebuiltBinaryPath = path.join(source.dir, source.file); |
39 | 39 | ||
40 | const installedVersion: null | string = getServerVersion(source.storage); | 40 | const installedVersion: null | string = getServerVersion(source.storage); |
41 | const requiredVersion: string = source.version; | 41 | const requiredVersion: string = source.tag; |
42 | 42 | ||
43 | log.debug("Installed version:", installedVersion, "required:", requiredVersion); | 43 | log.debug("Installed version:", installedVersion, "required:", requiredVersion); |
44 | 44 | ||
@@ -46,12 +46,14 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n | |||
46 | return prebuiltBinaryPath; | 46 | return prebuiltBinaryPath; |
47 | } | 47 | } |
48 | 48 | ||
49 | const userResponse = await vscode.window.showInformationMessage( | 49 | if (source.askBeforeDownload) { |
50 | `Language server version ${source.version} for rust-analyzer is not installed. ` + | 50 | const userResponse = await vscode.window.showInformationMessage( |
51 | "Do you want to download it now?", | 51 | `Language server version ${source.tag} for rust-analyzer is not installed. ` + |
52 | "Download now", "Cancel" | 52 | "Do you want to download it now?", |
53 | ); | 53 | "Download now", "Cancel" |
54 | if (userResponse !== "Download now") return null; | 54 | ); |
55 | if (userResponse !== "Download now") return null; | ||
56 | } | ||
55 | 57 | ||
56 | if (!await downloadServer(source)) return null; | 58 | if (!await downloadServer(source)) return null; |
57 | 59 | ||
@@ -60,9 +62,9 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n | |||
60 | } | 62 | } |
61 | } | 63 | } |
62 | 64 | ||
63 | async function downloadServer(source: BinarySource.GithubRelease): Promise<boolean> { | 65 | async function downloadServer(source: ArtifactSource.GithubRelease): Promise<boolean> { |
64 | try { | 66 | try { |
65 | const releaseInfo = await fetchArtifactReleaseInfo(source.repo, source.file, source.version); | 67 | const releaseInfo = await fetchArtifactReleaseInfo(source.repo, source.file, source.tag); |
66 | 68 | ||
67 | await downloadArtifact(releaseInfo, source.file, source.dir, "language server"); | 69 | await downloadArtifact(releaseInfo, source.file, source.dir, "language server"); |
68 | await setServerVersion(source.storage, releaseInfo.releaseName); | 70 | await setServerVersion(source.storage, releaseInfo.releaseName); |