Skip to content

Commit

Permalink
Auto merge of #16773 - Veykril:text-explorer, r=Veykril
Browse files Browse the repository at this point in the history
fix: Add config and capability for test explorer
  • Loading branch information
bors committed Mar 6, 2024
2 parents e5889c9 + 1c6d1b4 commit ce15e73
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 12 deletions.
4 changes: 4 additions & 0 deletions crates/rust-analyzer/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1146,6 +1146,10 @@ impl Config {
self.experimental("colorDiagnosticOutput")
}

pub fn test_explorer(&self) -> bool {
self.experimental("testExplorer")
}

pub fn publish_diagnostics(&self) -> bool {
self.data.diagnostics_enable
}
Expand Down
7 changes: 4 additions & 3 deletions crates/rust-analyzer/src/main_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,10 +386,11 @@ impl GlobalState {
}
}

let update_diagnostics = (!was_quiescent || state_changed || memdocs_added_or_removed)
&& self.config.publish_diagnostics();
if update_diagnostics {
let things_changed = !was_quiescent || state_changed || memdocs_added_or_removed;
if things_changed && self.config.publish_diagnostics() {
self.update_diagnostics();
}
if things_changed && self.config.test_explorer() {
self.update_tests();
}
}
Expand Down
5 changes: 5 additions & 0 deletions docs/dev/lsp-extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,11 @@ rust-analyzer supports only one `kind`, `"cargo"`. The `args` for `"cargo"` look

## Test explorer

**Experimental Client Capability:** `{ "testExplorer": boolean }`

If this capability is set, the `experimental/discoveredTests` notification will be sent from the
server to the client.

**Method:** `experimental/discoverTest`

**Request:** `DiscoverTestParams`
Expand Down
5 changes: 5 additions & 0 deletions editors/code/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,11 @@
"default": true,
"type": "boolean"
},
"rust-analyzer.testExplorer": {
"markdownDescription": "Whether to show the test explorer.",
"default": false,
"type": "boolean"
},
"$generated-start": {},
"rust-analyzer.assist.emitMustUse": {
"markdownDescription": "Whether to insert #[must_use] when generating `as_` methods\nfor enum variants.",
Expand Down
8 changes: 7 additions & 1 deletion editors/code/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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" };
}
Expand All @@ -391,6 +396,7 @@ class ExperimentalFeatures implements lc.StaticFeature {
colorDiagnosticOutput: true,
openServerLogs: true,
localDocs: true,
testExplorer: this.testExplorer,
commands: {
commands: [
"rust-analyzer.runSingle",
Expand Down
4 changes: 4 additions & 0 deletions editors/code/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 12 additions & 8 deletions editors/code/src/ctx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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({
Expand All @@ -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());
}
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit ce15e73

Please sign in to comment.