Skip to content

Commit 7b6f85f

Browse files
fix: Don't instantiate CompletionItemProvider when using a language server (#440)
Instantiating and refreshing the `CompletionItemProvider` is very expensive with large repos, due to it querying all targets from the repo. When using a language server the `CompletionItemProvider` is not even registered, so we avoid instantiating and refreshing it in this case. Relates to #395.
1 parent a47f461 commit 7b6f85f

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/extension/extension.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ export async function activate(context: vscode.ExtensionContext) {
4646

4747
const codeLensProvider = new BazelBuildCodeLensProvider(context);
4848
const buildifierDiagnostics = new BuildifierDiagnosticsManager();
49-
const completionItemProvider = new BazelCompletionItemProvider();
50-
51-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
52-
completionItemProvider.refresh();
49+
let completionItemProvider: BazelCompletionItemProvider | null = null;
5350

5451
const config = vscode.workspace.getConfiguration("bazel");
5552
const lspEnabled = !!config.get<string>("lsp.command");
@@ -66,6 +63,10 @@ export async function activate(context: vscode.ExtensionContext) {
6663

6764
await lspClient.start();
6865
} else {
66+
completionItemProvider = new BazelCompletionItemProvider();
67+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
68+
completionItemProvider.refresh();
69+
6970
context.subscriptions.push(
7071
vscode.languages.registerCompletionItemProvider(
7172
[{ pattern: "**/BUILD" }, { pattern: "**/BUILD.bazel" }],
@@ -97,7 +98,7 @@ export async function activate(context: vscode.ExtensionContext) {
9798
...activateWrapperCommands(),
9899
vscode.commands.registerCommand("bazel.refreshBazelBuildTargets", () => {
99100
// eslint-disable-next-line @typescript-eslint/no-floating-promises
100-
completionItemProvider.refresh();
101+
completionItemProvider?.refresh();
101102
workspaceTreeProvider.refresh();
102103
}),
103104
vscode.commands.registerCommand(

0 commit comments

Comments
 (0)