diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-06-15 21:05:07 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2021-06-15 21:05:07 +0100 |
commit | d0f2bc3b878d1c1d8eaf081e6f670ebb928b7a5f (patch) | |
tree | d704be44422c3fe3981a43055a336141a88922c9 /editors/code/src/main.ts | |
parent | dcea1c536c351a6063ba887813d54911a2b7eb39 (diff) | |
parent | a6b0c056dedb17fa2056e5186bd73af66c5e84e3 (diff) |
Merge #9292
9292: fix: Code: clean-up #8951 r=wxb1ank a=wxb1ank
#8951 was a major change in the VS Code extension and caused quite a few problems. This PR is a catch-all for bugs and improvements in the new code.
This should fix:
- #9284
- [this unreported bug](https://github.com/rust-analyzer/rust-analyzer/pull/8951/files#r651570446)
- ...and one or two uncaught exceptions I just found
The original lack of testing was my own fault, but this area of the VS Code API is also tricky for a couple reasons:
- The [FileSystem](https://github.com/rust-analyzer/rust-analyzer/pull/8951/files#r651570446) API does not list or warn about any exceptions, but [FileSystemProvider](https://github.com/rust-analyzer/rust-analyzer/pull/8951/files#r651570446) (which `FileSystem` is a wrapper of, AFAICT) does.
- At first glance, [Uri.path](https://github.com/rust-analyzer/rust-analyzer/pull/8951/files#r651570446) *looks* like it works for FS operations. It does not, at least, on Windows. You need to use `Uri.fsPath`.
I only use Windows, so I need people on macOS, Linux, and (possibly) NixOS to test this.
Co-authored-by: wxb1ank <[email protected]>
Diffstat (limited to 'editors/code/src/main.ts')
-rw-r--r-- | editors/code/src/main.ts | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index f58d26215..15f2151ad 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts | |||
@@ -158,7 +158,7 @@ export async function deactivate() { | |||
158 | } | 158 | } |
159 | 159 | ||
160 | async function bootstrap(config: Config, state: PersistentState): Promise<string> { | 160 | async function bootstrap(config: Config, state: PersistentState): Promise<string> { |
161 | await vscode.workspace.fs.createDirectory(config.globalStorageUri); | 161 | await vscode.workspace.fs.createDirectory(config.globalStorageUri).then(); |
162 | 162 | ||
163 | if (!config.currentExtensionIsNightly) { | 163 | if (!config.currentExtensionIsNightly) { |
164 | await state.updateNightlyReleaseId(undefined); | 164 | await state.updateNightlyReleaseId(undefined); |
@@ -277,11 +277,11 @@ async function patchelf(dest: vscode.Uri): Promise<void> { | |||
277 | ''; | 277 | ''; |
278 | } | 278 | } |
279 | `; | 279 | `; |
280 | const origFile = vscode.Uri.file(dest.path + "-orig"); | 280 | const origFile = vscode.Uri.file(dest.fsPath + "-orig"); |
281 | await vscode.workspace.fs.rename(dest, origFile); | 281 | await vscode.workspace.fs.rename(dest, origFile); |
282 | progress.report({ message: "Patching executable", increment: 20 }); | 282 | progress.report({ message: "Patching executable", increment: 20 }); |
283 | await new Promise((resolve, reject) => { | 283 | await new Promise((resolve, reject) => { |
284 | const handle = exec(`nix-build -E - --argstr srcStr '${origFile.path}' -o '${dest.path}'`, | 284 | const handle = exec(`nix-build -E - --argstr srcStr '${origFile.fsPath}' -o '${dest.fsPath}'`, |
285 | (err, stdout, stderr) => { | 285 | (err, stdout, stderr) => { |
286 | if (err != null) { | 286 | if (err != null) { |
287 | reject(Error(stderr)); | 287 | reject(Error(stderr)); |
@@ -338,14 +338,14 @@ async function getServer(config: Config, state: PersistentState): Promise<string | |||
338 | await state.updateServerVersion(undefined); | 338 | await state.updateServerVersion(undefined); |
339 | } | 339 | } |
340 | 340 | ||
341 | if (state.serverVersion === config.package.version) return dest.path; | 341 | if (state.serverVersion === config.package.version) return dest.fsPath; |
342 | 342 | ||
343 | if (config.askBeforeDownload) { | 343 | if (config.askBeforeDownload) { |
344 | const userResponse = await vscode.window.showInformationMessage( | 344 | const userResponse = await vscode.window.showInformationMessage( |
345 | `Language server version ${config.package.version} for rust-analyzer is not installed.`, | 345 | `Language server version ${config.package.version} for rust-analyzer is not installed.`, |
346 | "Download now" | 346 | "Download now" |
347 | ); | 347 | ); |
348 | if (userResponse !== "Download now") return dest.path; | 348 | if (userResponse !== "Download now") return dest.fsPath; |
349 | } | 349 | } |
350 | 350 | ||
351 | const releaseTag = config.package.releaseTag; | 351 | const releaseTag = config.package.releaseTag; |
@@ -372,7 +372,7 @@ async function getServer(config: Config, state: PersistentState): Promise<string | |||
372 | } | 372 | } |
373 | 373 | ||
374 | await state.updateServerVersion(config.package.version); | 374 | await state.updateServerVersion(config.package.version); |
375 | return dest.path; | 375 | return dest.fsPath; |
376 | } | 376 | } |
377 | 377 | ||
378 | function serverPath(config: Config): string | null { | 378 | function serverPath(config: Config): string | null { |
@@ -383,7 +383,7 @@ async function isNixOs(): Promise<boolean> { | |||
383 | try { | 383 | try { |
384 | const contents = (await vscode.workspace.fs.readFile(vscode.Uri.file("/etc/os-release"))).toString(); | 384 | const contents = (await vscode.workspace.fs.readFile(vscode.Uri.file("/etc/os-release"))).toString(); |
385 | return contents.indexOf("ID=nixos") !== -1; | 385 | return contents.indexOf("ID=nixos") !== -1; |
386 | } catch (e) { | 386 | } catch { |
387 | return false; | 387 | return false; |
388 | } | 388 | } |
389 | } | 389 | } |