Skip to content

Commit de774fa

Browse files
committed
fix(vscode): tool menu stabilized
1 parent 2be2f1d commit de774fa

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

vscode-client/languageToolsManager.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { LanguageStatusSeverity } from "vscode";
1313
import { TestControllerManager } from "./testcontrollermanager";
1414

1515
const NOT_INSTALLED = "not installed";
16+
1617
type QuickPickActionItem = {
1718
label?: string;
1819
getLabel?(folder?: vscode.WorkspaceFolder): string | undefined;
@@ -117,7 +118,7 @@ export class LanguageToolsManager {
117118
description: "Restarts the language server",
118119
async action(folder?: vscode.WorkspaceFolder): Promise<void> {
119120
if (folder !== undefined) {
120-
await vscode.commands.executeCommand("robotcode.restartLanguageServers");
121+
await vscode.commands.executeCommand("robotcode.restartLanguageServers", folder?.uri);
121122
}
122123
},
123124
},
@@ -126,7 +127,7 @@ export class LanguageToolsManager {
126127
description: "Clears the cache and restarts the language server",
127128
async action(folder?: vscode.WorkspaceFolder): Promise<void> {
128129
if (folder !== undefined) {
129-
await vscode.commands.executeCommand("robotcode.clearCacheRestartLanguageServers");
130+
await vscode.commands.executeCommand("robotcode.clearCacheRestartLanguageServers", folder?.uri);
130131
}
131132
},
132133
},
@@ -220,6 +221,38 @@ export class LanguageToolsManager {
220221
),
221222

222223
vscode.commands.registerCommand("robotcode.showToolMenu", async (folder?: vscode.WorkspaceFolder) => {
224+
let f = folder;
225+
226+
if (f === undefined) {
227+
if (vscode.window.activeTextEditor !== undefined) {
228+
f = vscode.workspace.getWorkspaceFolder(vscode.window.activeTextEditor.document.uri);
229+
if (f === undefined) {
230+
vscode.window.showErrorMessage("Active document does not belong to a workspace folder.");
231+
return;
232+
}
233+
} else {
234+
if (vscode.workspace.workspaceFolders !== undefined && vscode.workspace.workspaceFolders.length === 1) {
235+
f = vscode.workspace.workspaceFolders[0];
236+
} else {
237+
if (vscode.workspace.workspaceFolders !== undefined && vscode.workspace.workspaceFolders.length > 1) {
238+
f = await vscode.window.showWorkspaceFolderPick({
239+
placeHolder: "Select a workspace folder",
240+
});
241+
}
242+
}
243+
}
244+
}
245+
246+
if (f !== undefined && this.languageClientsManager.hasClientForResource(f.uri)) {
247+
folder = f;
248+
} else {
249+
vscode.window.showErrorMessage("No RobotCode Language Server running for this workspace folder.");
250+
}
251+
252+
if (folder === undefined) {
253+
return;
254+
}
255+
223256
const result = await vscode.window.showQuickPick(
224257
this.toolMenu.map((v) => {
225258
return {

vscode-client/languageclientsmanger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ export class LanguageClientsManager {
493493
return this.getLanguageClientForResource(document.uri);
494494
}
495495

496-
public hasClientForFolder(resource: string | vscode.Uri): boolean {
496+
public hasClientForResource(resource: string | vscode.Uri): boolean {
497497
const uri = resource instanceof vscode.Uri ? resource : vscode.Uri.parse(resource);
498498
const workspaceFolder = vscode.workspace.getWorkspaceFolder(uri);
499499
if (!workspaceFolder) return false;
@@ -892,7 +892,7 @@ export class LanguageClientsManager {
892892
workspaceFolder: vscode.WorkspaceFolder,
893893
token?: vscode.CancellationToken | undefined,
894894
): Promise<ProjectInfo | undefined> {
895-
if (!this.hasClientForFolder(workspaceFolder.uri)) return undefined;
895+
if (!this.hasClientForResource(workspaceFolder.uri)) return undefined;
896896

897897
const client = await this.getLanguageClientForResource(workspaceFolder.uri);
898898

0 commit comments

Comments
 (0)