diff --git a/package.json b/package.json index 361200db..9f8c17d7 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ { "view": "ObjectScriptExplorer", "contents": "Connect a local workspace folder to an [InterSystems server](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=GVSCO_clientflow) if you want to export or import ObjectScript code.\n[Choose Server and Namespace](command:vscode-objectscript.connectFolderToServerNamespace)", - "when": "vscode-objectscript.explorerRootCount == 0" + "when": "vscode-objectscript.explorerRootCount == 0 && workspaceFolderCount != 0" }, { "view": "ObjectScriptProjectsExplorer", diff --git a/src/commands/connectFolderToServerNamespace.ts b/src/commands/connectFolderToServerNamespace.ts index eb2550a4..3b764477 100644 --- a/src/commands/connectFolderToServerNamespace.ts +++ b/src/commands/connectFolderToServerNamespace.ts @@ -10,16 +10,20 @@ interface ConnSettings { } export async function connectFolderToServerNamespace(): Promise { + if (!vscode.workspace.workspaceFolders?.length) { + vscode.window.showErrorMessage("No folders in the workspace.", "Dismiss"); + return; + } const serverManagerApi = await getServerManagerApi(); if (!serverManagerApi) { vscode.window.showErrorMessage( - "Connecting a folder to a server namespace requires the [InterSystems Server Manager extension](https://marketplace.visualstudio.com/items?itemName=intersystems-community.servermanager) to be installed and enabled." + "Connecting a folder to a server namespace requires the [InterSystems Server Manager extension](https://marketplace.visualstudio.com/items?itemName=intersystems-community.servermanager) to be installed and enabled.", + "Dismiss" ); return; } // Which folder? - const allFolders = vscode.workspace.workspaceFolders; - const items: vscode.QuickPickItem[] = allFolders + const items: vscode.QuickPickItem[] = vscode.workspace.workspaceFolders .filter((folder) => notIsfs(folder.uri)) .map((folder) => { const config = vscode.workspace.getConfiguration("objectscript", folder); @@ -31,14 +35,14 @@ export async function connectFolderToServerNamespace(): Promise { }; }); if (!items.length) { - vscode.window.showErrorMessage("No local folders in the workspace."); + vscode.window.showErrorMessage("No local folders in the workspace.", "Dismiss"); return; } const pick = items.length === 1 && !items[0].detail ? items[0] : await vscode.window.showQuickPick(items, { title: "Pick a folder" }); - const folder = allFolders.find((el) => el.name === pick.label); + const folder = vscode.workspace.workspaceFolders.find((el) => el.name === pick.label); // Get user's choice of server const options: vscode.QuickPickOptions = {}; const serverName: string = await serverManagerApi.pickServer(undefined, options); @@ -60,7 +64,8 @@ export async function connectFolderToServerNamespace(): Promise { .catch((reason) => { // Notify user about serverInfo failure vscode.window.showErrorMessage( - reason.message || `Failed to fetch namespace list from server at ${connDisplayString}` + reason.message || `Failed to fetch namespace list from server at ${connDisplayString}`, + "Dismiss" ); return undefined; }); @@ -73,7 +78,7 @@ export async function connectFolderToServerNamespace(): Promise { } // Handle serverInfo having returned no namespaces if (!allNamespaces.length) { - vscode.window.showErrorMessage(`No namespace list returned by server at ${connDisplayString}`); + vscode.window.showErrorMessage(`No namespace list returned by server at ${connDisplayString}`, "Dismiss"); return; } // Get user's choice of namespace diff --git a/src/utils/index.ts b/src/utils/index.ts index c4706b2e..165eeadc 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -412,7 +412,7 @@ export function uriOfWorkspaceFolder(workspaceFolder: string = currentWorkspaceF return ( vscode.workspace.workspaceFolders.find((el): boolean => el.name.toLowerCase() === workspaceFolder.toLowerCase()) || vscode.workspace.workspaceFolders.find((el): boolean => el.uri.authority == workspaceFolder) - ).uri; + )?.uri; } export function onlyUnique(value: { name: string }, index: number, self: { name: string }[]): boolean { @@ -655,7 +655,7 @@ export async function addWsServerRootFolderData(wsFolders: readonly vscode.Works * is required but not supported by the server and `err` was passed. */ export function redirectDotvscodeRoot(uri: vscode.Uri, err?: vscode.FileSystemError): vscode.Uri { - if (notIsfs(uri)) return; + if (notIsfs(uri)) return uri; const dotMatch = uri.path.match(/^(.*)\/\.vscode(\/.*)?$/); if (dotMatch) { const dotvscodeRoot = uri.with({ path: dotMatch[1] || "/" });