Skip to content

Commit 495448c

Browse files
committed
Keep track of registered capabilities in tests
1 parent c8ddc9d commit 495448c

File tree

1 file changed

+44
-0
lines changed
  • packages/tailwindcss-language-server/tests/utils

1 file changed

+44
-0
lines changed

packages/tailwindcss-language-server/tests/utils/client.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ import {
1515
NotificationHandler,
1616
ProtocolConnection,
1717
PublishDiagnosticsParams,
18+
Registration,
1819
SymbolInformation,
20+
UnregistrationRequest,
1921
WorkspaceFolder,
2022
} from 'vscode-languageserver'
2123
import type { Position } from 'vscode-languageserver-textdocument'
@@ -191,6 +193,16 @@ export interface Client extends ClientWorkspace {
191193
*/
192194
readonly conn: ProtocolConnection
193195

196+
/**
197+
* Get the currently registered server capabilities
198+
*/
199+
serverCapabilities: Registration[]
200+
201+
/**
202+
* Get the currently registered server capabilities
203+
*/
204+
onServerCapabilitiesChanged(cb: () => void): void
205+
194206
/**
195207
* Get a workspace by name
196208
*/
@@ -428,12 +440,40 @@ export async function createClient(opts: ClientOptions): Promise<Client> {
428440
})
429441
}
430442

443+
let serverCapabilityChangeCallbacks: (() => void)[] = []
444+
445+
function onServerCapabilitiesChanged(cb: () => void) {
446+
serverCapabilityChangeCallbacks.push(cb)
447+
}
448+
449+
let registeredCapabilities: Registration[] = []
450+
431451
conn.onRequest(RegistrationRequest.type, ({ registrations }) => {
432452
trace('Registering capabilities')
433453

434454
for (let registration of registrations) {
455+
registeredCapabilities.push(registration)
435456
trace('-', registration.method)
436457
}
458+
459+
for (let cb of serverCapabilityChangeCallbacks) cb()
460+
})
461+
462+
conn.onRequest(UnregistrationRequest.type, ({ unregisterations }) => {
463+
trace('Unregistering capabilities')
464+
465+
let idsToRemove = new Set<string>()
466+
467+
for (let registration of unregisterations) {
468+
idsToRemove.add(registration.id)
469+
trace('-', registration.method)
470+
}
471+
472+
registeredCapabilities = registeredCapabilities.filter(
473+
(capability) => !idsToRemove.has(capability.id),
474+
)
475+
476+
for (let cb of serverCapabilityChangeCallbacks) cb()
437477
})
438478

439479
// TODO: Remove this its a hack
@@ -495,6 +535,10 @@ export async function createClient(opts: ClientOptions): Promise<Client> {
495535

496536
return {
497537
...clientWorkspaces[0],
538+
get serverCapabilities() {
539+
return registeredCapabilities
540+
},
541+
onServerCapabilitiesChanged,
498542
workspace,
499543
updateSettings,
500544
}

0 commit comments

Comments
 (0)