import { PersistentState } from './persistent_state';
import { fetchRelease, download } from './net';
import { activateTaskProvider } from './tasks';
+import { setContextValue } from './util';
import { exec } from 'child_process';
let ctx: Ctx | undefined;
+const RUST_PROJECT_CONTEXT_NAME = "inRustProject";
+
export async function activate(context: vscode.ExtensionContext) {
// Register a "dumb" onEnter command for the case where server fails to
// start.
// This a horribly, horribly wrong way to deal with this problem.
ctx = await Ctx.create(config, context, serverPath, workspaceFolder.uri.fsPath);
+ setContextValue(RUST_PROJECT_CONTEXT_NAME, true);
+
// Commands which invokes manually via command palette, shortcut, etc.
// Reloading is inspired by @DanTup maneuver: https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895
ctx.registerCommand('ssr', commands.ssr);
ctx.registerCommand('serverVersion', commands.serverVersion);
+ ctx.registerCommand('toggleInlayHints', commands.toggleInlayHints);
// Internal commands which are invoked by the server.
ctx.registerCommand('runSingle', commands.runSingle);
ctx.registerCommand('debugSingle', commands.debugSingle);
ctx.registerCommand('showReferences', commands.showReferences);
- ctx.registerCommand('applySourceChange', commands.applySourceChange);
- ctx.registerCommand('applySnippetWorkspaceEdit', commands.applySnippetWorkspaceEdit);
- ctx.registerCommand('selectAndApplySourceChange', commands.selectAndApplySourceChange);
+ ctx.registerCommand('applySnippetWorkspaceEdit', commands.applySnippetWorkspaceEditCommand);
+ ctx.registerCommand('resolveCodeAction', commands.resolveCodeAction);
+ ctx.registerCommand('applyActionGroup', commands.applyActionGroup);
ctx.pushCleanup(activateTaskProvider(workspaceFolder));
}
export async function deactivate() {
+ setContextValue(RUST_PROJECT_CONTEXT_NAME, undefined);
await ctx?.client.stop();
ctx = undefined;
}
await vscode.window.withProgress(
{
location: vscode.ProgressLocation.Notification,
- title: "Patching rust-analysis for NixOS"
+ title: "Patching rust-analyzer for NixOS"
},
async (progress, _) => {
const expression = `
await download(artifact.browser_download_url, dest, "Downloading rust-analyzer server", { mode: 0o755 });
// Patching executable if that's NixOS.
- if (fs.stat("/etc/nixos").then(_ => true).catch(_ => false)) {
+ if (await fs.stat("/etc/nixos").then(_ => true).catch(_ => false)) {
await patchelf(dest);
}