fix: Add config and capability for test explorer

This commit is contained in:
Lukas Wirth 2024-03-06 19:10:50 +01:00
parent 52d8ae791d
commit 1c6d1b4f2a
7 changed files with 41 additions and 12 deletions

View file

@ -372,13 +372,18 @@ export async function createClient(
);
// To turn on all proposed features use: client.registerProposedFeatures();
client.registerFeature(new ExperimentalFeatures());
client.registerFeature(new ExperimentalFeatures(config));
client.registerFeature(new OverrideFeatures());
return client;
}
class ExperimentalFeatures implements lc.StaticFeature {
private readonly testExplorer: boolean;
constructor(config: Config) {
this.testExplorer = config.testExplorer || false;
}
getState(): lc.FeatureState {
return { kind: "static" };
}
@ -391,6 +396,7 @@ class ExperimentalFeatures implements lc.StaticFeature {
colorDiagnosticOutput: true,
openServerLogs: true,
localDocs: true,
testExplorer: this.testExplorer,
commands: {
commands: [
"rust-analyzer.runSingle",

View file

@ -266,6 +266,10 @@ export class Config {
return this.get<string | undefined>("cargoRunner");
}
get testExplorer() {
return this.get<boolean | undefined>("testExplorer");
}
get runnablesExtraEnv() {
const item = this.get<any>("runnables.extraEnv") ?? this.get<any>("runnableEnv");
if (!item) return item;

View file

@ -75,7 +75,7 @@ export class Ctx implements RustAnalyzerExtensionApi {
private _client: lc.LanguageClient | undefined;
private _serverPath: string | undefined;
private traceOutputChannel: vscode.OutputChannel | undefined;
private testController: vscode.TestController;
private testController: vscode.TestController | undefined;
private outputChannel: vscode.OutputChannel | undefined;
private clientSubscriptions: Disposable[];
private state: PersistentState;
@ -104,18 +104,20 @@ export class Ctx implements RustAnalyzerExtensionApi {
workspace: Workspace,
) {
extCtx.subscriptions.push(this);
this.config = new Config(extCtx);
this.statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left);
this.testController = vscode.tests.createTestController(
"rustAnalyzerTestController",
"Rust Analyzer test controller",
);
if (this.config.testExplorer) {
this.testController = vscode.tests.createTestController(
"rustAnalyzerTestController",
"Rust Analyzer test controller",
);
}
this.workspace = workspace;
this.clientSubscriptions = [];
this.commandDisposables = [];
this.commandFactories = commandFactories;
this.unlinkedFiles = [];
this.state = new PersistentState(extCtx.globalState);
this.config = new Config(extCtx);
this.updateCommands("disable");
this.setServerStatus({
@ -126,7 +128,7 @@ export class Ctx implements RustAnalyzerExtensionApi {
dispose() {
this.config.dispose();
this.statusBar.dispose();
this.testController.dispose();
this.testController?.dispose();
void this.disposeClient();
this.commandDisposables.forEach((disposable) => disposable.dispose());
}
@ -271,7 +273,9 @@ export class Ctx implements RustAnalyzerExtensionApi {
await client.start();
this.updateCommands();
prepareTestExplorer(this, this.testController, client);
if (this.testController) {
prepareTestExplorer(this, this.testController, client);
}
if (this.config.showDependenciesExplorer) {
this.prepareTreeDependenciesView(client);
}