From 17301c42fa8b25d3a166aa467b68fd5a2b28f57c Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Sat, 30 Sep 2023 14:41:36 +0100 Subject: [PATCH 1/3] Restore reuse of unused standalone connections --- .../jupyterlab-lsp/src/virtual/document.ts | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/jupyterlab-lsp/src/virtual/document.ts b/packages/jupyterlab-lsp/src/virtual/document.ts index 29f8e643d..2898252aa 100644 --- a/packages/jupyterlab-lsp/src/virtual/document.ts +++ b/packages/jupyterlab-lsp/src/virtual/document.ts @@ -4,7 +4,8 @@ import type { IVirtualPosition, IRootPosition, Document, - ForeignDocumentsMap + ForeignDocumentsMap, + IForeignCodeExtractor } from '@jupyterlab/lsp'; import { VirtualDocument as VirtualDocumentBase } from '@jupyterlab/lsp'; @@ -33,6 +34,9 @@ export class VirtualDocument extends VirtualDocumentBase { this.lineMagicsOverrides = new ReversibleOverridesMap( overrides ? overrides.line : [] ); + // override private `chooseForeignDocument` as a workaround for + // https://github.com/jupyter-lsp/jupyterlab-lsp/issues/959 + this['chooseForeignDocument'] = this._chooseForeignDocument; } // TODO: this could be moved out @@ -202,4 +206,37 @@ export class VirtualDocument extends VirtualDocumentBase { } return [...maps.values()]; } + + /** + * Get the foreign document that can be opened with the input extractor. + */ + private _chooseForeignDocument( + extractor: IForeignCodeExtractor + ): VirtualDocumentBase { + let foreignDocument: VirtualDocumentBase; + // if not standalone, try to append to existing document + let foreignExists = this.foreignDocuments.has(extractor.language); + if (!extractor.standalone && foreignExists) { + foreignDocument = this.foreignDocuments.get(extractor.language)!; + } else { + // if standalone, try to re-use existing connection to the server + let unusedStandalone = this.unusedStandaloneDocuments.get( + extractor.language + ); + if (extractor.standalone && unusedStandalone.length > 0) { + foreignDocument = unusedStandalone.pop()!; + this.unusedDocuments.delete(foreignDocument); + } else { + // if (previous document does not exists) or (extractor produces standalone documents + // and no old standalone document could be reused): create a new document + // @ts-ignore + foreignDocument = this.openForeign( + extractor.language, + extractor.standalone, + extractor.fileExtension + ); + } + } + return foreignDocument; + } } From 54f9d9700517efe2ef237cd403ee9b3fd00cc47a Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Sat, 30 Sep 2023 14:43:27 +0100 Subject: [PATCH 2/3] Bump version to 5.0.0-rc.1 --- CHANGELOG.md | 3 +++ packages/jupyterlab-lsp/package.json | 2 +- packages/metapackage/package.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f82acfc47..4bfb8c9c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## Changelog +### `@jupyter-lsp/jupyterlab-lsp 5.0.0-rc.1` +- restore re-use of unused standalone connections + ### `@jupyter-lsp/jupyterlab-lsp 5.0.0-rc.0` - fixes diagnostics not showing up in text editor in certain circumstances diff --git a/packages/jupyterlab-lsp/package.json b/packages/jupyterlab-lsp/package.json index 4b1306814..dd7a6dc25 100644 --- a/packages/jupyterlab-lsp/package.json +++ b/packages/jupyterlab-lsp/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-lsp/jupyterlab-lsp", - "version": "5.0.0-rc.0", + "version": "5.0.0-rc.1", "description": "Language Server Protocol integration for JupyterLab", "keywords": [ "jupyter", diff --git a/packages/metapackage/package.json b/packages/metapackage/package.json index 520219f66..355ac623e 100644 --- a/packages/metapackage/package.json +++ b/packages/metapackage/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-lsp/jupyterlab-lsp-metapackage", - "version": "5.0.0-rc.0", + "version": "5.0.0-rc.1", "description": "JupyterLab LSP - Meta Package. All of the packages used by JupyterLab LSP", "homepage": "https://github.com/jupyter-lsp/jupyterlab-lsp", "bugs": { From 406c43e0300c59395021908bed4613f6f9731346 Mon Sep 17 00:00:00 2001 From: krassowski <5832902+krassowski@users.noreply.github.com> Date: Sat, 30 Sep 2023 14:47:03 +0100 Subject: [PATCH 3/3] Lint --- CHANGELOG.md | 1 + packages/jupyterlab-lsp/src/virtual/document.ts | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bfb8c9c5..3ec3ce330 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog ### `@jupyter-lsp/jupyterlab-lsp 5.0.0-rc.1` + - restore re-use of unused standalone connections ### `@jupyter-lsp/jupyterlab-lsp 5.0.0-rc.0` diff --git a/packages/jupyterlab-lsp/src/virtual/document.ts b/packages/jupyterlab-lsp/src/virtual/document.ts index 2898252aa..44d601fef 100644 --- a/packages/jupyterlab-lsp/src/virtual/document.ts +++ b/packages/jupyterlab-lsp/src/virtual/document.ts @@ -220,15 +220,16 @@ export class VirtualDocument extends VirtualDocumentBase { foreignDocument = this.foreignDocuments.get(extractor.language)!; } else { // if standalone, try to re-use existing connection to the server - let unusedStandalone = this.unusedStandaloneDocuments.get( - extractor.language - ); - if (extractor.standalone && unusedStandalone.length > 0) { - foreignDocument = unusedStandalone.pop()!; - this.unusedDocuments.delete(foreignDocument); - } else { + let unusedStandalone = this.unusedStandaloneDocuments.get( + extractor.language + ); + if (extractor.standalone && unusedStandalone.length > 0) { + foreignDocument = unusedStandalone.pop()!; + this.unusedDocuments.delete(foreignDocument); + } else { // if (previous document does not exists) or (extractor produces standalone documents // and no old standalone document could be reused): create a new document + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore foreignDocument = this.openForeign( extractor.language,