mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 14:13:58 +00:00
internal: Keep output channels across restarts
This commit is contained in:
parent
fd298b3994
commit
1127d2508f
3 changed files with 29 additions and 7 deletions
|
@ -7,6 +7,7 @@ import { WorkspaceEdit } from "vscode";
|
|||
import { Workspace } from "./ctx";
|
||||
import { updateConfig } from "./config";
|
||||
import { substituteVariablesInEnv } from "./config";
|
||||
import { outputChannel, traceOutputChannel } from "./main";
|
||||
import { randomUUID } from "crypto";
|
||||
|
||||
export interface Env {
|
||||
|
@ -82,9 +83,6 @@ export async function createClient(
|
|||
run,
|
||||
debug: run,
|
||||
};
|
||||
const traceOutputChannel = vscode.window.createOutputChannel(
|
||||
"Rust Analyzer Language Server Trace"
|
||||
);
|
||||
|
||||
let initializationOptions = vscode.workspace.getConfiguration("rust-analyzer");
|
||||
|
||||
|
@ -104,7 +102,8 @@ export async function createClient(
|
|||
documentSelector: [{ scheme: "file", language: "rust" }],
|
||||
initializationOptions,
|
||||
diagnosticCollectionName: "rustc",
|
||||
traceOutputChannel,
|
||||
traceOutputChannel: traceOutputChannel(),
|
||||
outputChannel: outputChannel(),
|
||||
middleware: {
|
||||
async provideHover(
|
||||
document: vscode.TextDocument,
|
||||
|
|
|
@ -43,8 +43,6 @@ export class Ctx {
|
|||
const res = new Ctx(config, extCtx, client, serverPath, statusBar);
|
||||
|
||||
res.pushCleanup(client.start());
|
||||
res.pushCleanup(client.traceOutputChannel);
|
||||
res.pushCleanup(client.outputChannel);
|
||||
await client.onReady();
|
||||
client.onNotification(ra.serverStatus, (params) => res.setServerStatus(params));
|
||||
return res;
|
||||
|
|
|
@ -15,6 +15,23 @@ let ctx: Ctx | undefined;
|
|||
|
||||
const RUST_PROJECT_CONTEXT_NAME = "inRustProject";
|
||||
|
||||
let TRACE_OUTPUT_CHANNEL: vscode.OutputChannel | null = null;
|
||||
export function traceOutputChannel() {
|
||||
if (!TRACE_OUTPUT_CHANNEL) {
|
||||
TRACE_OUTPUT_CHANNEL = vscode.window.createOutputChannel(
|
||||
"Rust Analyzer Language Server Trace"
|
||||
);
|
||||
}
|
||||
return TRACE_OUTPUT_CHANNEL;
|
||||
}
|
||||
let OUTPUT_CHANNEL: vscode.OutputChannel | null = null;
|
||||
export function outputChannel() {
|
||||
if (!OUTPUT_CHANNEL) {
|
||||
OUTPUT_CHANNEL = vscode.window.createOutputChannel("Rust Analyzer Language Server");
|
||||
}
|
||||
return OUTPUT_CHANNEL;
|
||||
}
|
||||
|
||||
export interface RustAnalyzerExtensionApi {
|
||||
client: lc.LanguageClient;
|
||||
}
|
||||
|
@ -110,7 +127,7 @@ async function initCommonContext(context: vscode.ExtensionContext, ctx: Ctx) {
|
|||
// Reloading is inspired by @DanTup maneuver: https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895
|
||||
ctx.registerCommand("reload", (_) => async () => {
|
||||
void vscode.window.showInformationMessage("Reloading rust-analyzer...");
|
||||
await deactivate();
|
||||
await doDeactivate();
|
||||
while (context.subscriptions.length > 0) {
|
||||
try {
|
||||
context.subscriptions.pop()!.dispose();
|
||||
|
@ -165,6 +182,14 @@ async function initCommonContext(context: vscode.ExtensionContext, ctx: Ctx) {
|
|||
}
|
||||
|
||||
export async function deactivate() {
|
||||
TRACE_OUTPUT_CHANNEL?.dispose();
|
||||
TRACE_OUTPUT_CHANNEL = null;
|
||||
OUTPUT_CHANNEL?.dispose();
|
||||
OUTPUT_CHANNEL = null;
|
||||
await doDeactivate();
|
||||
}
|
||||
|
||||
async function doDeactivate() {
|
||||
await setContextValue(RUST_PROJECT_CONTEXT_NAME, undefined);
|
||||
await ctx?.client.stop();
|
||||
ctx = undefined;
|
||||
|
|
Loading…
Reference in a new issue