Skip to content

Commit 61f8df7

Browse files
authored
Use synchronize-request in LSP tests on 6.2 (#1461)
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
1 parent 5d9898b commit 61f8df7

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

test/integration-tests/language/LanguageClientIntegration.test.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ import { WorkspaceContext } from "../../../src/WorkspaceContext";
2020
import { testAssetUri } from "../../fixtures";
2121
import { executeTaskAndWaitForResult, waitForNoRunningTasks } from "../../utilities/tasks";
2222
import { getBuildAllTask, SwiftTask } from "../../../src/tasks/SwiftTaskProvider";
23-
import { activateExtensionForSuite, folderInRootWorkspace } from "../utilities/testutilities";
23+
import {
24+
activateExtensionForSuite,
25+
folderInRootWorkspace,
26+
updateSettings,
27+
} from "../utilities/testutilities";
2428
import { waitForClientState, waitForIndex } from "../utilities/lsputilities";
2529

2630
async function buildProject(ctx: WorkspaceContext, name: string) {
@@ -42,11 +46,22 @@ suite("Language Client Integration Suite @slow", function () {
4246
async setup(ctx) {
4347
workspaceContext = ctx;
4448

49+
const resetSettings = await updateSettings({
50+
"swift.sourcekit-lsp.serverArguments": [
51+
"--experimental-feature",
52+
"synchronize-request",
53+
],
54+
});
55+
56+
// Restart the LSP after changing its settings
57+
await ctx.languageClientManager.restart();
58+
4559
await buildProject(ctx, "defaultPackage");
4660

4761
// Ensure lsp client is ready
4862
clientManager = ctx.languageClientManager;
4963
await waitForClientState(clientManager, langclient.State.Running);
64+
return resetSettings;
5065
},
5166
});
5267

test/integration-tests/utilities/lsputilities.ts

+28-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import * as vscode from "vscode";
1616
import * as langclient from "vscode-languageclient/node";
1717
import { LanguageClientManager } from "../../../src/sourcekit-lsp/LanguageClientManager";
18+
import { Version } from "../../../src/utilities/version";
1819

1920
export async function waitForClient<Result>(
2021
languageClientManager: LanguageClientManager,
@@ -41,10 +42,34 @@ export namespace PollIndexRequest {
4142
export const type = new langclient.RequestType<object, object, never>(method);
4243
}
4344

45+
// eslint-disable-next-line @typescript-eslint/no-namespace
46+
export namespace WorkspaceSynchronizeRequest {
47+
export const method = "workspace/_synchronize" as const;
48+
export const messageDirection: langclient.MessageDirection =
49+
langclient.MessageDirection.clientToServer;
50+
export const type = new langclient.RequestType<object, object, never>(method);
51+
}
52+
4453
export async function waitForIndex(languageClientManager: LanguageClientManager): Promise<void> {
45-
await languageClientManager.useLanguageClient(async (client, token) =>
46-
client.sendRequest(PollIndexRequest.type, {}, token)
47-
);
54+
if (
55+
languageClientManager.workspaceContext.swiftVersion.isGreaterThanOrEqual(
56+
new Version(6, 2, 0)
57+
)
58+
) {
59+
await languageClientManager.useLanguageClient(async (client, token) =>
60+
client.sendRequest(
61+
WorkspaceSynchronizeRequest.type,
62+
{
63+
index: true,
64+
},
65+
token
66+
)
67+
);
68+
} else {
69+
await languageClientManager.useLanguageClient(async (client, token) =>
70+
client.sendRequest(PollIndexRequest.type, {}, token)
71+
);
72+
}
4873
}
4974

5075
export async function waitForClientState(

0 commit comments

Comments
 (0)