Skip to content

Commit 4f28cc3

Browse files
Ensure that server actually forwards events it does not directly handle
1 parent 36899c8 commit 4f28cc3

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

Package.resolved

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/LanguageClient/InitializingServer.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,7 @@ extension InitializingServer {
250250
await handler(AnyJSONRPCResponseError(error: error))
251251
}
252252
default:
253-
print("unhandled request: \(request)")
254-
255-
await request.relyWithError(InitializingServerError.stateInvalid)
253+
break
256254
}
257255

258256
if initResp.capabilities != newCaps {

Tests/LanguageClientTests/ServerTests.swift

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,49 @@ final class ServerTests: XCTestCase {
8787

8888
await fulfillment(of: [registerExp], timeout: 1.0)
8989
}
90+
91+
func testPassesRequestsThrough() async throws {
92+
let mockChannel = MockServer()
93+
let config = Server.Configuration(
94+
serverProvider: { mockChannel },
95+
textDocumentItemProvider: { _ in throw ServerTestError.unsupported },
96+
initializeParamsProvider: { Self.initParams }
97+
)
98+
let server = Server(configuration: config)
99+
100+
let mockRequest = ServerRequest.windowWorkDoneProgressCreate(
101+
WorkDoneProgressCreateParams(token: .optionA(1)),
102+
{ error in
103+
if let error {
104+
print(error)
105+
}
106+
107+
XCTFail()
108+
}
109+
)
110+
111+
await mockChannel.sendMockResponse(
112+
"""
113+
{"capabilities": {"textDocumentSync": 0}}
114+
"""
115+
)
116+
_ = try await server.initializeIfNeeded()
117+
118+
var iterator = server.eventSequence.makeAsyncIterator()
119+
120+
print("sending")
121+
await mockChannel.sendMockRequest(mockRequest)
122+
123+
print("waiting")
124+
let event = await iterator.next()
125+
126+
guard
127+
case let .request(_, request) = event,
128+
case .windowWorkDoneProgressCreate = request
129+
else {
130+
XCTFail()
131+
return
132+
}
133+
}
90134
}
91135
#endif

0 commit comments

Comments
 (0)