@@ -32,12 +32,13 @@ export interface ISocketConnectionOptions {
3232}
3333
3434/**
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.
3738 */
3839export 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 > ;
4142 initialized : Signal < DocumentConnectionManager , IDocumentConnectionData > ;
4243 connected : Signal < DocumentConnectionManager , IDocumentConnectionData > ;
4344 /**
@@ -53,7 +54,7 @@ export class DocumentConnectionManager {
5354 closed : Signal < DocumentConnectionManager , IDocumentConnectionData > ;
5455 documents_changed : Signal <
5556 DocumentConnectionManager ,
56- Map < VirtualDocument . id_path , VirtualDocument >
57+ Map < VirtualDocument . uri , VirtualDocument >
5758 > ;
5859 language_server_manager : ILanguageServerManager ;
5960 initial_configurations : TLanguageServerConfigurations ;
@@ -83,7 +84,7 @@ export class DocumentConnectionManager {
8384 this
8485 ) ;
8586
86- this . documents . set ( virtual_document . id_path , virtual_document ) ;
87+ this . documents . set ( virtual_document . uri , virtual_document ) ;
8788 this . documents_changed . emit ( this . documents ) ;
8889 }
8990
@@ -98,7 +99,7 @@ export class DocumentConnectionManager {
9899 this
99100 ) ;
100101
101- this . documents . delete ( virtual_document . id_path ) ;
102+ this . documents . delete ( virtual_document . uri ) ;
102103 for ( const foreign of virtual_document . foreign_documents . values ( ) ) {
103104 this . disconnect_document_signals ( foreign , false ) ;
104105 }
@@ -111,7 +112,7 @@ export class DocumentConnectionManager {
111112 on_foreign_document_opened ( _host : VirtualDocument , context : IForeignContext ) {
112113 console . log (
113114 'LSP: ConnectionManager received foreign document: ' ,
114- context . foreign_document . id_path
115+ context . foreign_document . uri
115116 ) ;
116117 }
117118
@@ -149,7 +150,7 @@ export class DocumentConnectionManager {
149150
150151 // if connecting for the first time, all documents subsequent documents will
151152 // be re-opened and synced
152- this . connections . set ( virtual_document . id_path , connection ) ;
153+ this . connections . set ( virtual_document . uri , connection ) ;
153154
154155 return connection ;
155156 }
@@ -188,12 +189,12 @@ export class DocumentConnectionManager {
188189 if ( error . message . indexOf ( 'code = 1005' ) !== - 1 ) {
189190 console . warn ( `LSP: Connection failed for ${ connection } ` ) ;
190191 this . forEachDocumentOfConnection ( connection , virtual_document => {
191- console . warn ( 'LSP: disconnecting ' + virtual_document . id_path ) ;
192+ console . warn ( 'LSP: disconnecting ' + virtual_document . uri ) ;
192193 this . closed . emit ( { connection, virtual_document } ) ;
193194 this . ignored_languages . add ( virtual_document . language ) ;
194195
195196 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)`
197198 ) ;
198199 } ) ;
199200 } else if ( error . message . indexOf ( 'code = 1006' ) !== - 1 ) {
@@ -230,13 +231,13 @@ export class DocumentConnectionManager {
230231 callback : ( virtual_document : VirtualDocument ) => void
231232 ) {
232233 for ( const [
233- virtual_document_id_path ,
234+ virtual_document_uri ,
234235 a_connection
235236 ] of this . connections . entries ( ) ) {
236237 if ( connection !== a_connection ) {
237238 continue ;
238239 }
239- callback ( this . documents . get ( virtual_document_id_path ) ) ;
240+ callback ( this . documents . get ( virtual_document_uri ) ) ;
240241 }
241242 }
242243
@@ -287,20 +288,20 @@ export class DocumentConnectionManager {
287288 try {
288289 await until_ready ( ( ) => connection . isReady , 200 , 200 ) ;
289290 } catch {
290- console . warn ( `LSP: Connect timed out for ${ virtual_document . id_path } ` ) ;
291+ console . warn ( `LSP: Connect timed out for ${ virtual_document . uri } ` ) ;
291292 return ;
292293 }
293294 }
294295
295- console . log ( 'LSP:' , document_path , virtual_document . id_path , 'connected.' ) ;
296+ console . log ( 'LSP:' , document_path , virtual_document . uri , 'connected.' ) ;
296297
297298 this . connected . emit ( { connection, virtual_document } ) ;
298299
299300 return connection ;
300301 }
301302
302303 public unregister_document ( virtual_document : VirtualDocument ) {
303- this . connections . delete ( virtual_document . id_path ) ;
304+ this . connections . delete ( virtual_document . uri ) ;
304305 this . documents_changed . emit ( this . documents ) ;
305306 }
306307}
0 commit comments