From 0e356608b1f6470fe4b677a6dea175de8944f7b4 Mon Sep 17 00:00:00 2001 From: Paul LeMarquand Date: Mon, 24 Mar 2025 17:01:34 -0400 Subject: [PATCH] Use `synchronize-request` in LSP tests on 6.2 The tests used `workspace/_pollIndex` to determine if sourcekit-lsp had finished indexing, however this hidden request was removed from sourcekit-lsp recently in favour of `workspace/_synchronize` Issue: #1457 --- .../LanguageClientIntegration.test.ts | 17 +++++++++- .../utilities/lsputilities.ts | 31 +++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/test/integration-tests/language/LanguageClientIntegration.test.ts b/test/integration-tests/language/LanguageClientIntegration.test.ts index 883cc49a1..db33e8d87 100644 --- a/test/integration-tests/language/LanguageClientIntegration.test.ts +++ b/test/integration-tests/language/LanguageClientIntegration.test.ts @@ -20,7 +20,11 @@ import { WorkspaceContext } from "../../../src/WorkspaceContext"; import { testAssetUri } from "../../fixtures"; import { executeTaskAndWaitForResult, waitForNoRunningTasks } from "../../utilities/tasks"; import { getBuildAllTask, SwiftTask } from "../../../src/tasks/SwiftTaskProvider"; -import { activateExtensionForSuite, folderInRootWorkspace } from "../utilities/testutilities"; +import { + activateExtensionForSuite, + folderInRootWorkspace, + updateSettings, +} from "../utilities/testutilities"; import { waitForClientState, waitForIndex } from "../utilities/lsputilities"; async function buildProject(ctx: WorkspaceContext, name: string) { @@ -42,11 +46,22 @@ suite("Language Client Integration Suite @slow", function () { async setup(ctx) { workspaceContext = ctx; + const resetSettings = await updateSettings({ + "swift.sourcekit-lsp.serverArguments": [ + "--experimental-feature", + "synchronize-request", + ], + }); + + // Restart the LSP after changing its settings + await ctx.languageClientManager.restart(); + await buildProject(ctx, "defaultPackage"); // Ensure lsp client is ready clientManager = ctx.languageClientManager; await waitForClientState(clientManager, langclient.State.Running); + return resetSettings; }, }); diff --git a/test/integration-tests/utilities/lsputilities.ts b/test/integration-tests/utilities/lsputilities.ts index 066b791ce..a3f8e3fc0 100644 --- a/test/integration-tests/utilities/lsputilities.ts +++ b/test/integration-tests/utilities/lsputilities.ts @@ -15,6 +15,7 @@ import * as vscode from "vscode"; import * as langclient from "vscode-languageclient/node"; import { LanguageClientManager } from "../../../src/sourcekit-lsp/LanguageClientManager"; +import { Version } from "../../../src/utilities/version"; export async function waitForClient( languageClientManager: LanguageClientManager, @@ -41,10 +42,34 @@ export namespace PollIndexRequest { export const type = new langclient.RequestType(method); } +// eslint-disable-next-line @typescript-eslint/no-namespace +export namespace WorkspaceSynchronizeRequest { + export const method = "workspace/_synchronize" as const; + export const messageDirection: langclient.MessageDirection = + langclient.MessageDirection.clientToServer; + export const type = new langclient.RequestType(method); +} + export async function waitForIndex(languageClientManager: LanguageClientManager): Promise { - await languageClientManager.useLanguageClient(async (client, token) => - client.sendRequest(PollIndexRequest.type, {}, token) - ); + if ( + languageClientManager.workspaceContext.swiftVersion.isGreaterThanOrEqual( + new Version(6, 2, 0) + ) + ) { + await languageClientManager.useLanguageClient(async (client, token) => + client.sendRequest( + WorkspaceSynchronizeRequest.type, + { + index: true, + }, + token + ) + ); + } else { + await languageClientManager.useLanguageClient(async (client, token) => + client.sendRequest(PollIndexRequest.type, {}, token) + ); + } } export async function waitForClientState(