Skip to content

Commit a1aedf7

Browse files
authored
Merge pull request #202 from bollwyvl/fix-docker-diagnostics
sendOpen after connection handlers are installed
2 parents f3fd809 + 31bf3ec commit a1aedf7

File tree

10 files changed

+127
-37
lines changed

10 files changed

+127
-37
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@
1111
- ignores malformed diagnostic ranges, enabling markdown support ([#165][])
1212
- passes tests on Python 3.8 on Windows ([#165][])
1313

14+
- bug fixes
15+
16+
- reports files are open only after installing all handlers to avoid missing messages ([#201][])
17+
18+
[#201]: https://github.com/krassowski/jupyterlab-lsp/issues/201
19+
1420
### `lsp-ws-connection 0.4.0` (unreleased)
1521

1622
- breaking changes

ci/job.docs.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ jobs:
3131
- script: ${{ parameters.env_docs }} || ${{ parameters.env_docs }} || ${{ parameters.env_docs }}
3232
displayName: docs dependencies
3333

34+
- script: ${{ platform.activate }} jupyterlab-lsp && conda uninstall -y --force-remove pytest-cov
35+
displayName: remove coverage to prevent warning
36+
3437
- script: ${{ platform.activate }} jupyterlab-lsp && jlpm || jlpm || jlpm
3538
displayName: install npm dependencies (for language servers)
3639

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
},
44
"devDependencies": {
55
"bash-language-server": "^1.6.1",
6-
"dockerfile-language-server-nodejs": "^0.0.21",
6+
"dockerfile-language-server-nodejs": "^0.0.22",
77
"eslint": "^5.16.0",
88
"eslint-config-prettier": "^4.1.0",
99
"eslint-plugin-prettier": "^3.0.1",

packages/jupyterlab-lsp/src/adapters/jupyterlab/file_editor.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ export class FileEditorAdapter extends JupyterLabWidgetAdapter {
7070
this.connect_contentChanged_signal();
7171

7272
console.log('LSP: file ready for connection:', this.path);
73-
this.connect_document(this.virtual_editor.virtual_document).catch(
73+
74+
// connect the document, but do not open it as the adapter will handle this
75+
// after registering all features
76+
this.connect_document(this.virtual_editor.virtual_document, false).catch(
7477
console.warn
7578
);
7679

packages/jupyterlab-lsp/src/adapters/jupyterlab/jl_adapter.ts

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ export abstract class JupyterLabWidgetAdapter
241241
// recreate virtual document using current path and language
242242
this.virtual_editor.create_virtual_document();
243243
// reconnect
244-
this.connect_document(this.virtual_editor.virtual_document).catch(
244+
this.connect_document(this.virtual_editor.virtual_document, true).catch(
245245
console.warn
246246
);
247247
}
@@ -287,23 +287,57 @@ export abstract class JupyterLabWidgetAdapter
287287
});
288288
}
289289

290-
protected async connect_document(virtual_document: VirtualDocument) {
290+
/**
291+
* Opens a connection for the document. The connection may or may
292+
* not be initialized, yet, and depending on when this is called, the client
293+
* may not be fully connected.
294+
*
295+
* @param virtual_document a VirtualDocument
296+
* @param send_open whether to open the document immediately
297+
*/
298+
protected async connect_document(
299+
virtual_document: VirtualDocument,
300+
send_open = false
301+
): Promise<void> {
291302
virtual_document.changed.connect(this.document_changed, this);
292303

293304
virtual_document.foreign_document_opened.connect(
294305
this.on_foreign_document_opened,
295306
this
296307
);
297308

298-
await this.connect(virtual_document).catch(console.warn);
309+
const connection_context = await this.connect(virtual_document).catch(
310+
console.warn
311+
);
312+
313+
if (!send_open) {
314+
return;
315+
}
316+
317+
if (connection_context && connection_context.connection) {
318+
connection_context.connection.sendOpenWhenReady(
319+
virtual_document.document_info
320+
);
321+
} else {
322+
console.warn(`Connection for ${virtual_document.path} was not opened`);
323+
}
299324
}
300325

326+
/**
327+
* Handler for opening a document contained in a parent document. The assumption
328+
* is that the editor already exists for this, and as such the document
329+
* should be queued for immediate opening.
330+
*
331+
* @param host the VirtualDocument that contains the VirtualDocument in another language
332+
* @param context information about the foreign VirtualDocument
333+
*/
301334
protected async on_foreign_document_opened(
302335
host: VirtualDocument,
303336
context: IForeignContext
304337
) {
305338
const { foreign_document } = context;
306-
this.connect_document(foreign_document).catch(console.warn);
339+
340+
await this.connect_document(foreign_document, true);
307341

308342
foreign_document.foreign_document_closed.connect(
309343
this.on_foreign_document_closed,
@@ -453,6 +487,8 @@ export abstract class JupyterLabWidgetAdapter
453487
adapter_features
454488
);
455489
console.log('LSP: Adapter for', this.document_path, 'is ready.');
490+
// the client is now fully ready: signal to the server that the document is "open"
491+
connection.sendOpenWhenReady(virtual_document.document_info);
456492
return adapter;
457493
}
458494

packages/jupyterlab-lsp/src/adapters/jupyterlab/notebook.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ export class NotebookAdapter extends JupyterLabWidgetAdapter {
158158
);
159159
this.connect_contentChanged_signal();
160160

161-
this.connect_document(this.virtual_editor.virtual_document).catch(
161+
// connect the document, but do not open it as the adapter will handle this
162+
// after registering all features
163+
this.connect_document(this.virtual_editor.virtual_document, false).catch(
162164
console.warn
163165
);
164166
}

packages/jupyterlab-lsp/src/connection.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,26 @@ import { until_ready } from './utils';
1414
interface ILSPOptions extends ILspOptions {}
1515

1616
export class LSPConnection extends LspWsConnection {
17+
protected documentsToOpen: IDocumentInfo[];
18+
1719
constructor(options: ILSPOptions) {
1820
super(options);
21+
this.documentsToOpen = [];
22+
}
23+
24+
sendOpenWhenReady(documentInfo: IDocumentInfo) {
25+
if (this.isReady) {
26+
this.sendOpen(documentInfo);
27+
} else {
28+
this.documentsToOpen.push(documentInfo);
29+
}
30+
}
31+
32+
protected onServerInitialized(params: lsProtocol.InitializeResult) {
33+
super.onServerInitialized(params);
34+
while (this.documentsToOpen.length) {
35+
this.sendOpen(this.documentsToOpen.pop());
36+
}
1937
}
2038

2139
public sendSelectiveChange(

packages/jupyterlab-lsp/src/connection_manager.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,6 @@ export class DocumentConnectionManager {
145145
// be re-opened and synced
146146
this.connections.set(virtual_document.id_path, connection);
147147

148-
if (connection.isReady) {
149-
connection.sendOpen(virtual_document.document_info);
150-
}
151-
152148
return connection;
153149
}
154150

@@ -183,7 +179,6 @@ export class DocumentConnectionManager {
183179

184180
connection.on('serverInitialized', capabilities => {
185181
this.forEachDocumentOfConnection(connection, virtual_document => {
186-
connection.sendOpen(virtual_document.document_info);
187182
// TODO: is this still neccessary, e.g. for status bar to update responsively?
188183
this.initialized.emit({ connection, virtual_document });
189184
});

requirements/docs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ channels:
77
dependencies:
88
- nbsphinx
99
- pandas
10+
- pip
1011
- pytest
1112
- python-graphviz
1213
- recommonmark

yarn.lock

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,7 +1313,7 @@
13131313
typestyle "^2.0.1"
13141314

13151315
"@krassowski/jupyterlab-lsp@file:packages/jupyterlab-lsp":
1316-
version "0.7.0"
1316+
version "0.7.1"
13171317
dependencies:
13181318
"@krassowski/jupyterlab_go_to_definition" "^0.7.1"
13191319
lsp-ws-connection "0.3.1"
@@ -4315,30 +4315,31 @@ [email protected]:
43154315
dependencies:
43164316
vscode-languageserver-types "^3.5.0"
43174317

4318-
4319-
version "0.0.16"
4320-
resolved "https://registry.yarnpkg.com/dockerfile-ast/-/dockerfile-ast-0.0.16.tgz#10b329d343329dab1de70375833495f85ad65913"
4321-
integrity sha512-+HZToHjjiLPl46TqBrok5dMrg5oCkZFPSROMQjRmvin0zG4FxK0DJXTpV/CUPYY2zpmEvVza55XLwSHFx/xZMw==
4318+
4319+
version "0.0.20"
4320+
resolved "https://registry.yarnpkg.com/dockerfile-ast/-/dockerfile-ast-0.0.20.tgz#fd1ce404b5a8b414a9a4d600bcc9ca64a42fd659"
4321+
integrity sha512-VGFMBT0Av1Sk4SCjafsv2S/MCVy6+AuhLW+958wS2df86wb90JPl+WJXhTTGHk5DQVwQX0NoQQBzQQP1U7GaWg==
43224322
dependencies:
43234323
vscode-languageserver-types "^3.5.0"
43244324

4325-
dockerfile-language-server-nodejs@^0.0.21:
4326-
version "0.0.21"
4327-
resolved "https://registry.yarnpkg.com/dockerfile-language-server-nodejs/-/dockerfile-language-server-nodejs-0.0.21.tgz#cb6a526524d5ea5a2580b56cd3ce3102ba6384fc"
4328-
integrity sha512-lZ7VFAlS4vTm5MvxmwpREcYMARB3RQaGX0OZdcY8oSytsu4i5mMGVa6mi9/pZ9soqcUC08uxEA8EcqIeL3lyAA==
4325+
dockerfile-language-server-nodejs@^0.0.22:
4326+
version "0.0.22"
4327+
resolved "https://registry.yarnpkg.com/dockerfile-language-server-nodejs/-/dockerfile-language-server-nodejs-0.0.22.tgz#9b214988b16b7c32986a66741e1f6eb88da62385"
4328+
integrity sha512-Vf/Zieb/BBs/VQnaxntshlTExR3FyE6FO1NxS+yO3SVqzcEVHYkHMC8f/+XRRROVHFh41YfzVfPhSxdCxfbviQ==
43294329
dependencies:
4330-
dockerfile-language-service "0.0.8"
4330+
dockerfile-language-service "0.0.9"
43314331
dockerfile-utils "0.0.11"
4332-
vscode-languageserver "^5.1.0"
4332+
vscode-languageserver "^6.1.0"
43334333

4334-
4335-
version "0.0.8"
4336-
resolved "https://registry.yarnpkg.com/dockerfile-language-service/-/dockerfile-language-service-0.0.8.tgz#12c1e7fa5dc8152af915e1e52bd0303d4c540231"
4337-
integrity sha512-peko1rQtZ81e3QK3VLZgkCKkCMnuoSqZxCQuudyEbtYqqAe6jJ4r0bwOnWD9hyH/FMg7jMvI5uLsoo7/dHLNYw==
4334+
4335+
version "0.0.9"
4336+
resolved "https://registry.yarnpkg.com/dockerfile-language-service/-/dockerfile-language-service-0.0.9.tgz#75e38a523b490732bac538773447c15c01ecddf4"
4337+
integrity sha512-g+TFMRG/Vv+yKqYJ2EE5KZlmwbPShWhlGhyG6tFEhUlHUt2Cd3wMr35popmc5Y9ra3OPwR3nY9cQFWIt8OP1Kw==
43384338
dependencies:
4339-
dockerfile-ast "0.0.16"
4340-
dockerfile-utils "0.0.13"
4341-
vscode-languageserver-types "^3.10.0"
4339+
dockerfile-ast "0.0.20"
4340+
dockerfile-utils "0.0.14"
4341+
vscode-languageserver-protocol "^3.15.1"
4342+
vscode-languageserver-types "^3.15.1"
43424343

43434344
43444345
version "0.0.11"
@@ -4348,12 +4349,12 @@ [email protected]:
43484349
dockerfile-ast "0.0.12"
43494350
vscode-languageserver-types "3.6.0"
43504351

4351-
4352-
version "0.0.13"
4353-
resolved "https://registry.yarnpkg.com/dockerfile-utils/-/dockerfile-utils-0.0.13.tgz#43dd955e6c4d2c4c844216b7128d5a95b8fdc783"
4354-
integrity sha512-+MAmhEnQ16B7+3C2UDWpmIS1D8EiKvpl4LDRjrMv94bOusaeRcLagRR0AvgV6NWT+oiRxDMLDyay6yjm6LESsw==
4352+
4353+
version "0.0.14"
4354+
resolved "https://registry.yarnpkg.com/dockerfile-utils/-/dockerfile-utils-0.0.14.tgz#76e053d430cfa08b7a9480c03a4c8f8816877177"
4355+
integrity sha512-9S77f18SmnI4hJ1Ndv1h1/gPxm74uV/n9E/2JMp6I9D3cSLrNdBZwq3FpNiXX1TRJQAn+Ufl/5b7YzH63NZ6jA==
43554356
dependencies:
4356-
dockerfile-ast "0.0.16"
4357+
dockerfile-ast "0.0.20"
43574358
vscode-languageserver-types "3.6.0"
43584359

43594360
doctrine@^3.0.0:
@@ -11819,6 +11820,11 @@ vscode-jsonrpc@^4.1.0-next:
1181911820
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.1.0-next.3.tgz#05fe742959a2726020d4d0bfbc3d3c97873c7fde"
1182011821
integrity sha512-Z6oxBiMks2+UADV1QHXVooSakjyhI+eHTnXzDyVvVMmegvSfkXk2w6mPEdSkaNHFBdtWW7n20H1yw2nA3A17mg==
1182111822

11823+
vscode-jsonrpc@^5.0.1:
11824+
version "5.0.1"
11825+
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz#9bab9c330d89f43fc8c1e8702b5c36e058a01794"
11826+
integrity sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==
11827+
1182211828
vscode-languageclient@^5.2.1:
1182311829
version "5.2.1"
1182411830
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.2.1.tgz#7cfc83a294c409f58cfa2b910a8cfeaad0397193"
@@ -11851,16 +11857,29 @@ [email protected]:
1185111857
vscode-jsonrpc "3.5.0"
1185211858
vscode-languageserver-types "3.5.0"
1185311859

11860+
vscode-languageserver-protocol@^3.15.1, vscode-languageserver-protocol@^3.15.3:
11861+
version "3.15.3"
11862+
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz#3fa9a0702d742cf7883cb6182a6212fcd0a1d8bb"
11863+
integrity sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==
11864+
dependencies:
11865+
vscode-jsonrpc "^5.0.1"
11866+
vscode-languageserver-types "3.15.1"
11867+
1185411868
vscode-languageserver-textdocument@^1.0.0-next.4:
1185511869
version "1.0.0-next.5"
1185611870
resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.0-next.5.tgz#dbb7a45dd973a19261a7c57ab9a439c40f3799ee"
1185711871
integrity sha512-1jp/zAidN/bF/sqPimhBX1orH5G4rzRw63k75TesukJDuxm8yW79ECStWbDSy41BHGOwSGN4M69QFvhancSr5A==
1185811872

11859-
[email protected], vscode-languageserver-types@^3.0.3, vscode-languageserver-types@^3.10.0, vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.14.0, vscode-languageserver-types@^3.5.0, vscode-languageserver-types@^3.6.1, vscode-languageserver-types@^3.7.2:
11873+
[email protected], vscode-languageserver-types@^3.0.3, vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.14.0, vscode-languageserver-types@^3.6.1, vscode-languageserver-types@^3.7.2:
1186011874
version "3.14.0"
1186111875
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
1186211876
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
1186311877

11878+
[email protected], vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.5.0:
11879+
version "3.15.1"
11880+
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de"
11881+
integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==
11882+
1186411883
1186511884
version "3.5.0"
1186611885
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374"
@@ -11892,14 +11911,21 @@ vscode-languageserver@^4.0.0, vscode-languageserver@^4.1.3:
1189211911
vscode-languageserver-protocol "^3.10.3"
1189311912
vscode-uri "^1.0.5"
1189411913

11895-
vscode-languageserver@^5.0.0, vscode-languageserver@^5.1.0, vscode-languageserver@^5.2.1:
11914+
vscode-languageserver@^5.0.0, vscode-languageserver@^5.2.1:
1189611915
version "5.2.1"
1189711916
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz#0d2feddd33f92aadf5da32450df498d52f6f14eb"
1189811917
integrity sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A==
1189911918
dependencies:
1190011919
vscode-languageserver-protocol "3.14.1"
1190111920
vscode-uri "^1.0.6"
1190211921

11922+
vscode-languageserver@^6.1.0:
11923+
version "6.1.1"
11924+
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz#d76afc68172c27d4327ee74332b468fbc740d762"
11925+
integrity sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==
11926+
dependencies:
11927+
vscode-languageserver-protocol "^3.15.3"
11928+
1190311929
vscode-nls@^2.0.2:
1190411930
version "2.0.2"
1190511931
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da"

0 commit comments

Comments
 (0)