@@ -32,12 +32,13 @@ export interface ISocketConnectionOptions {
32
32
}
33
33
34
34
/**
35
- * Each Widget with a document (whether file or a notebook) has its own DocumentConnectionManager
36
- * (see JupyterLabWidgetAdapter), keeping the virtual document spaces separate if a file is opened twice.
35
+ * Each Widget with a document (whether file or a notebook) has the same DocumentConnectionManager
36
+ * (see JupyterLabWidgetAdapter). Using id_path instead of uri led to documents being overwritten
37
+ * as two identical id_paths could be created for two different notebooks.
37
38
*/
38
39
export class DocumentConnectionManager {
39
- connections : Map < VirtualDocument . id_path , LSPConnection > ;
40
- documents : Map < VirtualDocument . id_path , VirtualDocument > ;
40
+ connections : Map < VirtualDocument . uri , LSPConnection > ;
41
+ documents : Map < VirtualDocument . uri , VirtualDocument > ;
41
42
initialized : Signal < DocumentConnectionManager , IDocumentConnectionData > ;
42
43
connected : Signal < DocumentConnectionManager , IDocumentConnectionData > ;
43
44
/**
@@ -53,7 +54,7 @@ export class DocumentConnectionManager {
53
54
closed : Signal < DocumentConnectionManager , IDocumentConnectionData > ;
54
55
documents_changed : Signal <
55
56
DocumentConnectionManager ,
56
- Map < VirtualDocument . id_path , VirtualDocument >
57
+ Map < VirtualDocument . uri , VirtualDocument >
57
58
> ;
58
59
language_server_manager : ILanguageServerManager ;
59
60
initial_configurations : TLanguageServerConfigurations ;
@@ -83,7 +84,7 @@ export class DocumentConnectionManager {
83
84
this
84
85
) ;
85
86
86
- this . documents . set ( virtual_document . id_path , virtual_document ) ;
87
+ this . documents . set ( virtual_document . uri , virtual_document ) ;
87
88
this . documents_changed . emit ( this . documents ) ;
88
89
}
89
90
@@ -98,7 +99,7 @@ export class DocumentConnectionManager {
98
99
this
99
100
) ;
100
101
101
- this . documents . delete ( virtual_document . id_path ) ;
102
+ this . documents . delete ( virtual_document . uri ) ;
102
103
for ( const foreign of virtual_document . foreign_documents . values ( ) ) {
103
104
this . disconnect_document_signals ( foreign , false ) ;
104
105
}
@@ -111,7 +112,7 @@ export class DocumentConnectionManager {
111
112
on_foreign_document_opened ( _host : VirtualDocument , context : IForeignContext ) {
112
113
console . log (
113
114
'LSP: ConnectionManager received foreign document: ' ,
114
- context . foreign_document . id_path
115
+ context . foreign_document . uri
115
116
) ;
116
117
}
117
118
@@ -149,7 +150,7 @@ export class DocumentConnectionManager {
149
150
150
151
// if connecting for the first time, all documents subsequent documents will
151
152
// be re-opened and synced
152
- this . connections . set ( virtual_document . id_path , connection ) ;
153
+ this . connections . set ( virtual_document . uri , connection ) ;
153
154
154
155
return connection ;
155
156
}
@@ -188,12 +189,12 @@ export class DocumentConnectionManager {
188
189
if ( error . message . indexOf ( 'code = 1005' ) !== - 1 ) {
189
190
console . warn ( `LSP: Connection failed for ${ connection } ` ) ;
190
191
this . forEachDocumentOfConnection ( connection , virtual_document => {
191
- console . warn ( 'LSP: disconnecting ' + virtual_document . id_path ) ;
192
+ console . warn ( 'LSP: disconnecting ' + virtual_document . uri ) ;
192
193
this . closed . emit ( { connection, virtual_document } ) ;
193
194
this . ignored_languages . add ( virtual_document . language ) ;
194
195
195
196
console . warn (
196
- `Cancelling further attempts to connect ${ virtual_document . id_path } and other documents for this language (no support from the server)`
197
+ `Cancelling further attempts to connect ${ virtual_document . uri } and other documents for this language (no support from the server)`
197
198
) ;
198
199
} ) ;
199
200
} else if ( error . message . indexOf ( 'code = 1006' ) !== - 1 ) {
@@ -230,13 +231,13 @@ export class DocumentConnectionManager {
230
231
callback : ( virtual_document : VirtualDocument ) => void
231
232
) {
232
233
for ( const [
233
- virtual_document_id_path ,
234
+ virtual_document_uri ,
234
235
a_connection
235
236
] of this . connections . entries ( ) ) {
236
237
if ( connection !== a_connection ) {
237
238
continue ;
238
239
}
239
- callback ( this . documents . get ( virtual_document_id_path ) ) ;
240
+ callback ( this . documents . get ( virtual_document_uri ) ) ;
240
241
}
241
242
}
242
243
@@ -287,20 +288,20 @@ export class DocumentConnectionManager {
287
288
try {
288
289
await until_ready ( ( ) => connection . isReady , 200 , 200 ) ;
289
290
} catch {
290
- console . warn ( `LSP: Connect timed out for ${ virtual_document . id_path } ` ) ;
291
+ console . warn ( `LSP: Connect timed out for ${ virtual_document . uri } ` ) ;
291
292
return ;
292
293
}
293
294
}
294
295
295
- console . log ( 'LSP:' , document_path , virtual_document . id_path , 'connected.' ) ;
296
+ console . log ( 'LSP:' , document_path , virtual_document . uri , 'connected.' ) ;
296
297
297
298
this . connected . emit ( { connection, virtual_document } ) ;
298
299
299
300
return connection ;
300
301
}
301
302
302
303
public unregister_document ( virtual_document : VirtualDocument ) {
303
- this . connections . delete ( virtual_document . id_path ) ;
304
+ this . connections . delete ( virtual_document . uri ) ;
304
305
this . documents_changed . emit ( this . documents ) ;
305
306
}
306
307
}
0 commit comments