1
1
import { Unsubscribable } from 'rxjs'
2
2
import { MessageType as RPCMessageType } from '../../jsonrpc2/messages'
3
- import { ClientCapabilities , InitializeParams , ServerCapabilities } from '../../protocol'
4
- import { DocumentSelector } from '../../types/document'
3
+ import { ClientCapabilities , InitializeParams } from '../../protocol'
5
4
import { isFunction } from '../../util'
6
5
import { Client } from '../client'
7
6
8
7
/** A client feature that exposes functionality that is always enabled. */
9
8
export interface StaticFeature {
10
9
fillInitializeParams ?: ( params : InitializeParams ) => void
11
10
fillClientCapabilities ?: ( capabilities : ClientCapabilities ) => void
12
- initialize ( capabilities : ServerCapabilities , documentSelector : DocumentSelector | undefined ) : void
11
+
12
+ /**
13
+ * Called when the client connection is initializing. The feature can add client request and notification
14
+ * listeners in this method.
15
+ */
16
+ initialize ?: ( ) => void
13
17
14
18
/** Free resources acquired in initialize. */
15
19
deinitialize ?: ( ) => void
@@ -27,13 +31,11 @@ export interface DynamicFeature<T> {
27
31
messages : RPCMessageType | RPCMessageType [ ]
28
32
fillInitializeParams ?: ( params : InitializeParams ) => void
29
33
fillClientCapabilities ( capabilities : ClientCapabilities ) : void
30
- initialize ( capabilities : ServerCapabilities , documentSelector : DocumentSelector | undefined ) : void
31
34
register ( message : RPCMessageType , data : RegistrationData < T > ) : void
32
35
unregister ( id : string ) : void
33
36
34
37
/**
35
- * Unregisters all static and dynamic registrations and prepares the feature to be reused for a
36
- * new connection.
38
+ * Unregisters all registrations and prepares the feature to be reused for a new connection.
37
39
*/
38
40
unregisterAll ( ) : void
39
41
}
@@ -81,13 +83,12 @@ export abstract class Feature<O> implements DynamicFeature<O> {
81
83
82
84
public abstract fillClientCapabilities ( capabilities : ClientCapabilities ) : void
83
85
84
- public abstract initialize ( capabilities : ServerCapabilities , documentSelector : DocumentSelector ) : void
85
-
86
86
public unregister ( id : string ) : void {
87
87
const sub = this . subscriptionsByID . get ( id )
88
88
if ( ! sub ) {
89
89
throw new Error ( `no registration with ID ${ id } ` )
90
90
}
91
+ sub . unsubscribe ( )
91
92
this . subscriptionsByID . delete ( id )
92
93
}
93
94
0 commit comments