From 6b3a97f463b30b777614f1d7798c11eeb38f9f5b Mon Sep 17 00:00:00 2001 From: runchen0919 Date: Tue, 27 Jan 2026 14:47:05 +0800 Subject: [PATCH 1/2] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ce5f014..45cf694 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Bazel support for Java Linting, Intellisense, formatting, refactoring and more...", "author": "Compass", "license": "BSD-3-Clause", - "version": "0.0.2", + "version": "0.0.8", "publisher": "COMP", "bugs": "https://github.com/zhirui1994/bazel-vscode-java/issues", "preview": true, From 42abdf3de18c88b37545f6120d4b693b68028dd8 Mon Sep 17 00:00:00 2001 From: runchen0919 Date: Wed, 28 Jan 2026 11:27:13 +0800 Subject: [PATCH 2/2] Fix:[TECH-16507] fix open workspace failed --- src/extension.api.ts | 2 +- src/extension.ts | 4 +++- src/projectViewManager.ts | 34 +++++++++++++++++++------------ src/provider/bazelTaskProvider.ts | 8 +++++++- src/util.ts | 9 ++++++-- 5 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/extension.api.ts b/src/extension.api.ts index 876b1c3..1f26d3e 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -1,5 +1,5 @@ import { BazelProjectView } from './types'; export interface BazelVscodeExtensionAPI { - readonly parseProjectFile: BazelProjectView; + readonly parseProjectFile: BazelProjectView | undefined; } diff --git a/src/extension.ts b/src/extension.ts index 31d8c38..648e16e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -165,7 +165,9 @@ export async function activate( ); return Promise.resolve({ - parseProjectFile: await getBazelProjectFile(), + parseProjectFile: isBazelWorkspaceRoot() + ? await getBazelProjectFile() + : undefined, }); } diff --git a/src/projectViewManager.ts b/src/projectViewManager.ts index ea50106..9a07e34 100644 --- a/src/projectViewManager.ts +++ b/src/projectViewManager.ts @@ -146,25 +146,33 @@ export namespace ProjectViewManager { .then(() => displayFolders); } + /** + * Updates the project view for a multi-root workspace. + * Adds directories from displayFolders as separate workspace folders in VSCode multi-root workspace. + * + * @param displayFolders List of directories to display + * @returns The original displayFolders list + */ function updateMultiRootProjectView( displayFolders: string[] ): Thenable { + // Build workspace folder entries array + const workspaceFolderEntries = [ + // Add workspace root directory first + { uri: Uri.file(workspaceRoot), name: workspaceRootName }, + // Convert displayFolders to workspace folder entries + ...displayFolders + // Filter out projectRootSymlinks directory (used for storing symlinks to root directory files) + .filter((f) => f !== projectRootSymlinks) + .map((f) => ({ + uri: Uri.file(`${workspaceRoot}/${f}`), + name: f.replaceAll(sep, ' ⇾ '), + })), + ]; workspace.updateWorkspaceFolders( 0, workspace.workspaceFolders?.length, - ...displayFolders.map((f) => { - if (f === projectRootSymlinks) { - return { - uri: Uri.file(projectRootSymlinks), - name: workspaceRootName, - }; - } else { - return { - uri: Uri.file(`${workspaceRoot}/${f}`), - name: f.replaceAll(sep, ' ⇾ '), - }; - } - }) + ...workspaceFolderEntries ); return Promise.resolve(displayFolders); } diff --git a/src/provider/bazelTaskProvider.ts b/src/provider/bazelTaskProvider.ts index f579773..35effcd 100644 --- a/src/provider/bazelTaskProvider.ts +++ b/src/provider/bazelTaskProvider.ts @@ -61,7 +61,13 @@ async function getBazelTasks(): Promise { const taskDefinitions: BazelTaskDefinition[] = []; // add any ij converted run targets to vscode tasks - const bazelProjectFile = await getBazelProjectFile(); + let bazelProjectFile; + try { + bazelProjectFile = await getBazelProjectFile(); + } catch { + // No .bazelproject file exists, return empty tasks + return []; + } if (bazelProjectFile.importRunConfigurations) { const rootPath = getWorkspaceRoot(); bazelProjectFile.importRunConfigurations.forEach((runConfig) => { diff --git a/src/util.ts b/src/util.ts index 20a28e5..7009087 100644 --- a/src/util.ts +++ b/src/util.ts @@ -19,10 +19,15 @@ derive_targets_from_directories: true export function getWorkspaceRoot(): string { if (workspace.workspaceFile) { - return dirname(workspace.workspaceFile.path); + let workspaceFileDir = dirname(workspace.workspaceFile.fsPath); + // If the workspace config file is in .vscode directory, go up one level to get the actual project root + if (workspaceFileDir.endsWith('.vscode')) { + workspaceFileDir = dirname(workspaceFileDir); + } + return workspaceFileDir; } else { if (workspace.workspaceFolders && workspace.workspaceFolders.length > 0) { - return workspace.workspaceFolders[0].uri.path; + return workspace.workspaceFolders[0].uri.fsPath; } } throw new Error('invalid workspace root');