Skip to content

Commit 3436abb

Browse files
committed
Plumb capabilities to SwiftPMTestProject and add a closure that can be executed before SourceKit-LSP is initialized
1 parent 79514e6 commit 3436abb

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

Sources/SKTestSupport/MultiFileTestProject.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,10 @@ public class MultiFileTestProject {
8080
public init(
8181
files: [RelativeFileLocation: String],
8282
workspaces: (URL) async throws -> [WorkspaceFolder] = { [WorkspaceFolder(uri: DocumentURI($0))] },
83+
capabilities: ClientCapabilities = ClientCapabilities(),
8384
serverOptions: SourceKitLSPServer.Options = .testDefault,
8485
usePullDiagnostics: Bool = true,
86+
preInitialization: ((TestSourceKitLSPClient) -> Void)? = nil,
8587
testName: String = #function
8688
) async throws {
8789
scratchDirectory = try testScratchDir(testName: testName)
@@ -112,8 +114,10 @@ public class MultiFileTestProject {
112114

113115
self.testClient = try await TestSourceKitLSPClient(
114116
serverOptions: serverOptions,
117+
capabilities: capabilities,
115118
usePullDiagnostics: usePullDiagnostics,
116119
workspaceFolders: workspaces(scratchDirectory),
120+
preInitialization: preInitialization,
117121
cleanUp: { [scratchDirectory] in
118122
if cleanScratchDirectories {
119123
try? FileManager.default.removeItem(at: scratchDirectory)

Sources/SKTestSupport/SwiftPMTestProject.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ public class SwiftPMTestProject: MultiFileTestProject {
4242
workspaces: (URL) async throws -> [WorkspaceFolder] = { [WorkspaceFolder(uri: DocumentURI($0))] },
4343
build: Bool = false,
4444
allowBuildFailure: Bool = false,
45+
capabilities: ClientCapabilities = ClientCapabilities(),
4546
serverOptions: SourceKitLSPServer.Options = .testDefault,
4647
pollIndex: Bool = true,
48+
preInitialization: ((TestSourceKitLSPClient) -> Void)? = nil,
4749
usePullDiagnostics: Bool = true,
4850
testName: String = #function
4951
) async throws {
@@ -66,8 +68,10 @@ public class SwiftPMTestProject: MultiFileTestProject {
6668
try await super.init(
6769
files: filesByPath,
6870
workspaces: workspaces,
71+
capabilities: capabilities,
6972
serverOptions: serverOptions,
7073
usePullDiagnostics: usePullDiagnostics,
74+
preInitialization: preInitialization,
7175
testName: testName
7276
)
7377

Sources/SKTestSupport/TestSourceKitLSPClient.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ public final class TestSourceKitLSPClient: MessageHandler {
8383
/// - capabilities: The test client's capabilities.
8484
/// - usePullDiagnostics: Whether to use push diagnostics or use push-based diagnostics
8585
/// - workspaceFolders: Workspace folders to open.
86+
/// - preInitialization: A closure that is called after the test client is created but before SourceKit-LSP is
87+
/// initialized. This can be used to eg. register request handlers.
8688
/// - cleanUp: A closure that is called when the `TestSourceKitLSPClient` is destructed.
8789
/// This allows e.g. a `IndexedSingleSwiftFileTestProject` to delete its temporary files when they are no longer
8890
/// needed.
@@ -94,6 +96,7 @@ public final class TestSourceKitLSPClient: MessageHandler {
9496
capabilities: ClientCapabilities = ClientCapabilities(),
9597
usePullDiagnostics: Bool = true,
9698
workspaceFolders: [WorkspaceFolder]? = nil,
99+
preInitialization: ((TestSourceKitLSPClient) -> Void)? = nil,
97100
cleanUp: @escaping () -> Void = {}
98101
) async throws {
99102
if !useGlobalModuleCache {
@@ -135,7 +138,7 @@ public final class TestSourceKitLSPClient: MessageHandler {
135138
guard capabilities.textDocument!.diagnostic == nil else {
136139
struct ConflictingDiagnosticsError: Error, CustomStringConvertible {
137140
var description: String {
138-
"usePushDiagnostics = false is not supported if capabilities already contain diagnostic options"
141+
"usePullDiagnostics = false is not supported if capabilities already contain diagnostic options"
139142
}
140143
}
141144
throw ConflictingDiagnosticsError()
@@ -145,6 +148,7 @@ public final class TestSourceKitLSPClient: MessageHandler {
145148
XCTAssertEqual(request.registrations.only?.method, DocumentDiagnosticsRequest.method)
146149
return VoidResponse()
147150
}
151+
preInitialization?(self)
148152
}
149153
if initialize {
150154
_ = try await self.send(

0 commit comments

Comments
 (0)