Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update to the release version of our plugin.

"publisher": "COMP",
"bugs": "https://github.com/zhirui1994/bazel-vscode-java/issues",
"preview": true,
Expand Down
2 changes: 1 addition & 1 deletion src/extension.api.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { BazelProjectView } from './types';

export interface BazelVscodeExtensionAPI {
readonly parseProjectFile: BazelProjectView;
readonly parseProjectFile: BazelProjectView | undefined;
}
4 changes: 3 additions & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,9 @@ export async function activate(
);

return Promise.resolve({
parseProjectFile: await getBazelProjectFile(),
parseProjectFile: isBazelWorkspaceRoot()
? await getBazelProjectFile()
: undefined,
});
}

Expand Down
34 changes: 21 additions & 13 deletions src/projectViewManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string[]> {
// 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);
}
Expand Down
8 changes: 7 additions & 1 deletion src/provider/bazelTaskProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,13 @@ async function getBazelTasks(): Promise<Task[]> {
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) => {
Expand Down
9 changes: 7 additions & 2 deletions src/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down