Skip to content

Commit e53022a

Browse files
committed
fix(language-server): prepare language service for synchronized documents
1 parent 5d328de commit e53022a

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

packages/language-server/lib/features/languageFeatures.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,15 @@ export function register(
215215
if (languageServicePlugins.some(({ capabilities }) => capabilities.workspaceSymbolProvider)) {
216216
serverCapabilities.workspaceSymbolProvider = {};
217217
server.connection.onWorkspaceSymbol(async (params, token) => {
218+
let languageServices = await project.getExistingLanguageServices();
219+
if (!languageServices.length) {
220+
for (const document of documents.all()) {
221+
await project.getLanguageService(URI.parse(document.uri));
222+
}
223+
languageServices = await project.getExistingLanguageServices();
224+
}
218225
const symbols: vscode.WorkspaceSymbol[] = [];
219-
for (const languageService of await project.getExistingLanguageServices()) {
226+
for (const languageService of languageServices) {
220227
if (token.isCancellationRequested) {
221228
return;
222229
}
@@ -473,7 +480,14 @@ export function register(
473480
commands: [...new Set(languageServicePlugins.map(({ capabilities }) => capabilities.executeCommandProvider?.commands ?? []).flat())],
474481
};
475482
server.connection.onExecuteCommand(async (params, token) => {
476-
for (const languageService of await project.getExistingLanguageServices()) {
483+
let languageServices = await project.getExistingLanguageServices();
484+
if (!languageServices.length) {
485+
for (const document of documents.all()) {
486+
await project.getLanguageService(URI.parse(document.uri));
487+
}
488+
languageServices = await project.getExistingLanguageServices();
489+
}
490+
for (const languageService of languageServices) {
477491
if (languageService.executeCommand && languageService.commands.includes(params.command)) {
478492
try {
479493
return await languageService.executeCommand(params.command, params.arguments ?? [], token);
@@ -706,8 +720,15 @@ export function register(
706720

707721
if (workspaceDiagnostics) {
708722
server.connection.languages.diagnostics.onWorkspace(async (_params, token) => {
723+
let languageServices = await project.getExistingLanguageServices();
724+
if (!languageServices.length) {
725+
for (const document of documents.all()) {
726+
await project.getLanguageService(URI.parse(document.uri));
727+
}
728+
languageServices = await project.getExistingLanguageServices();
729+
}
709730
const items: vscode.WorkspaceDocumentDiagnosticReport[] = [];
710-
for (const languageService of await project.getExistingLanguageServices()) {
731+
for (const languageService of languageServices) {
711732
if (token.isCancellationRequested) {
712733
break;
713734
}

0 commit comments

Comments
 (0)