Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--editors/code/src/new_project.ts6
-rw-r--r--editors/code/src/util.ts6
-rw-r--r--editors/code/tests/unit/launch_config.test.ts44
3 files changed, 51 insertions, 5 deletions
diff --git a/editors/code/src/new_project.ts b/editors/code/src/new_project.ts
index da3181ea3e..f5f6d86da0 100644
--- a/editors/code/src/new_project.ts
+++ b/editors/code/src/new_project.ts
@@ -228,10 +228,10 @@ async function showNewProjectError(
}
const selection = await vscode.window.showErrorMessage(
details ? `${message}\n${details}` : message,
- "Open Logs",
+ "Open Extension Logs",
);
- if (selection === "Open Logs") {
- await vscode.commands.executeCommand("rust-analyzer.openLogs");
+ if (selection === "Open Extension Logs") {
+ log.show();
}
}
diff --git a/editors/code/src/util.ts b/editors/code/src/util.ts
index 05b475080c..ddeec814b4 100644
--- a/editors/code/src/util.ts
+++ b/editors/code/src/util.ts
@@ -22,6 +22,10 @@ class Log {
log: true,
});
+ show(): void {
+ this.output.show(true);
+ }
+
trace(...messages: [unknown, ...unknown[]]): void {
this.output.trace(this.stringify(messages));
}
@@ -40,7 +44,7 @@ class Log {
error(...messages: [unknown, ...unknown[]]): void {
this.output.error(this.stringify(messages));
- this.output.show(true);
+ this.show();
}
private stringify(messages: unknown[]): string {
diff --git a/editors/code/tests/unit/launch_config.test.ts b/editors/code/tests/unit/launch_config.test.ts
index eeb8608a42..69be84dcea 100644
--- a/editors/code/tests/unit/launch_config.test.ts
+++ b/editors/code/tests/unit/launch_config.test.ts
@@ -1,5 +1,8 @@
import * as assert from "assert";
-import { Cargo } from "../../src/toolchain";
+import * as os from "os";
+import * as path from "path";
+import { mkdtemp, mkdir, rm, writeFile } from "fs/promises";
+import { Cargo, cargoPath } from "../../src/toolchain";
import type { Context } from ".";
export async function getTests(ctx: Context) {
@@ -96,4 +99,43 @@ export async function getTests(ctx: Context) {
assert.notDeepStrictEqual(args.filter, undefined);
});
});
+
+ await ctx.suite("Toolchain resolution", (suite) => {
+ suite.addTest("prefers explicit CARGO from provided env", async () => {
+ const explicitCargo = path.join(os.tmpdir(), "custom-cargo");
+ assert.strictEqual(await cargoPath({ CARGO: explicitCargo }), explicitCargo);
+ });
+
+ suite.addTest("resolves cargo from provided PATH", async () => {
+ const tempDir = await mkdtemp(path.join(os.tmpdir(), "ra-cargo-path-"));
+ try {
+ const cargoBinary = path.join(tempDir, process.platform === "win32" ? "cargo.exe" : "cargo");
+ await writeFile(cargoBinary, "");
+
+ assert.strictEqual(await cargoPath({ PATH: tempDir }), "cargo");
+ } finally {
+ await rm(tempDir, { recursive: true, force: true });
+ }
+ });
+
+ suite.addTest("resolves cargo from provided CARGO_HOME", async () => {
+ const cargoHome = await mkdtemp(path.join(os.tmpdir(), "ra-cargo-home-"));
+ try {
+ const binDir = path.join(cargoHome, "bin");
+ await mkdir(binDir);
+ const cargoBinary = path.join(
+ binDir,
+ process.platform === "win32" ? "cargo.exe" : "cargo",
+ );
+ await writeFile(cargoBinary, "");
+
+ assert.strictEqual(
+ await cargoPath({ PATH: "", CARGO_HOME: cargoHome }),
+ cargoBinary,
+ );
+ } finally {
+ await rm(cargoHome, { recursive: true, force: true });
+ }
+ });
+ });
}