Skip to content

Commit a988979

Browse files
authored
Fix hover malfunction messages (jupyter-lsp#630)
* Fix hover malfunction messages * Sync completion-theme version, relax some constraints * Update changelog, bump theme versions (as pin was relaxed)
1 parent 364af88 commit a988979

File tree

6 files changed

+60
-15
lines changed

6 files changed

+60
-15
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22

33
### `@krassowski/jupyterlab-lsp 3.7.1` (unreleased)
44

5+
- improvements:
6+
7+
- add a note on manually enabling backend extension ([#621], thanks @icankeep)
8+
59
- bug fixes:
610
- fix rename shortcut registration in file editor ([#614])
7-
- add a note on manually enabling backend extension ([#621], thanks @icankeep)
811
- improve performance of icon rendering in completer ([#625])
12+
- fix cache misses and concurrency issues for hover ([#630])
913

1014
[#614]: https://github.com/krassowski/jupyterlab-lsp/pull/614
1115
[#621]: https://github.com/krassowski/jupyterlab-lsp/pull/621
1216
[#625]: https://github.com/krassowski/jupyterlab-lsp/pull/625
17+
[#630]: https://github.com/krassowski/jupyterlab-lsp/pull/630
1318

1419
### `jupyter-lsp 1.3.0` (2021-06-02)
1520

packages/jupyterlab-lsp/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@
5858
},
5959
"dependencies": {
6060
"@krassowski/code-jumpers": "~1.1.0",
61-
"@krassowski/completion-theme": "~3.0.0",
62-
"@krassowski/theme-material": "~2.1.0",
63-
"@krassowski/theme-vscode": "~2.1.0",
61+
"@krassowski/completion-theme": "~3.1.0",
62+
"@krassowski/theme-material": "~2.1.1",
63+
"@krassowski/theme-vscode": "~2.1.1",
6464
"lodash.mergewith": "^4.6.1",
6565
"lsp-ws-connection": "~0.6.0"
6666
},

packages/jupyterlab-lsp/src/features/hover.ts

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ import {
1818
CodeMirrorIntegration,
1919
IEditorRange
2020
} from '../editor_integration/codemirror';
21-
import { FeatureSettings, IFeatureLabIntegration } from '../feature';
21+
import {
22+
FeatureSettings,
23+
IEditorIntegrationOptions,
24+
IFeatureLabIntegration
25+
} from '../feature';
2226
import { IRootPosition, IVirtualPosition, is_equal } from '../positioning';
2327
import { ILSPFeatureManager, PLUGIN_ID } from '../tokens';
2428
import { getModifierState } from '../utils';
@@ -48,6 +52,18 @@ class ResponseCache {
4852
}
4953

5054
store(item: IResponseData) {
55+
const previousIndex = this._data.findIndex(
56+
previous =>
57+
previous.document === item.document &&
58+
is_equal(previous.editor_range.start, item.editor_range.start) &&
59+
is_equal(previous.editor_range.end, item.editor_range.end) &&
60+
previous.editor_range.editor === item.editor_range.editor
61+
);
62+
if (previousIndex !== -1) {
63+
this._data[previousIndex] = item;
64+
return;
65+
}
66+
5167
if (this._data.length >= this.maxSize) {
5268
this._data.shift();
5369
}
@@ -85,6 +101,12 @@ export class HoverCM extends CodeMirrorIntegration {
85101

86102
private debounced_get_hover: Throttler<Promise<lsProtocol.Hover>>;
87103
private tooltip: FreeTooltip;
104+
private _previousHoverRequest: Promise<Promise<lsProtocol.Hover>> | null;
105+
106+
constructor(options: IEditorIntegrationOptions) {
107+
super(options);
108+
this._previousHoverRequest = null;
109+
}
88110

89111
protected get modifierKey(): ModifierKey {
90112
return this.settings.composite.modifierKey;
@@ -111,7 +133,8 @@ export class HoverCM extends CodeMirrorIntegration {
111133
return (
112134
line >= range.start.line &&
113135
line <= range.end.line &&
114-
(line != range.start.line || ch >= range.start.character) &&
136+
// need to be non-overlapping see https://github.com/krassowski/jupyterlab-lsp/issues/628
137+
(line != range.start.line || ch > range.start.character) &&
115138
(line != range.end.line || ch <= range.end.character)
116139
);
117140
});
@@ -380,10 +403,27 @@ export class HoverCM extends CodeMirrorIntegration {
380403
this.virtual_position = virtual_position;
381404
this.last_hover_character = root_position;
382405

406+
// if we already sent a request, maybe it already covers the are of interest?
407+
// not harm waiting as the server won't be able to help us anyways
408+
if (this._previousHoverRequest) {
409+
await Promise.race([
410+
this._previousHoverRequest,
411+
// just in case if the request stalled, set a timeout so we do not
412+
// get stuck indefinitely
413+
new Promise(resolve => {
414+
return setTimeout(resolve, 1000);
415+
})
416+
]);
417+
}
383418
let response_data = this.restore_from_cache(document, virtual_position);
384419

385420
if (response_data == null) {
386-
let response = await this.debounced_get_hover.invoke();
421+
const promise = this.debounced_get_hover.invoke();
422+
this._previousHoverRequest = promise;
423+
let response = await promise;
424+
if (this._previousHoverRequest === promise) {
425+
this._previousHoverRequest = null;
426+
}
387427
if (this.is_useful_response(response)) {
388428
let ce_editor = this.virtual_editor.get_editor_at_root_position(
389429
root_position

packages/theme-material/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@krassowski/theme-material",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"description": "Material theme for JupyterLab-LSP",
55
"keywords": [
66
"jupyter",
@@ -33,7 +33,7 @@
3333
"clean": "rimraf lib"
3434
},
3535
"dependencies": {
36-
"@krassowski/completion-theme": "~3.0.0"
36+
"@krassowski/completion-theme": "^3.0.0"
3737
},
3838
"devDependencies": {},
3939
"peerDependencies": {},

packages/theme-vscode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@krassowski/theme-vscode",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"description": "VSCode theme for JupyterLab-LSP",
55
"keywords": [
66
"jupyter",
@@ -33,7 +33,7 @@
3333
"clean": "rimraf lib"
3434
},
3535
"dependencies": {
36-
"@krassowski/completion-theme": "~3.0.0"
36+
"@krassowski/completion-theme": "^3.0.0"
3737
},
3838
"devDependencies": {},
3939
"peerDependencies": {},

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,7 +1987,7 @@
19871987
version "1.1.0"
19881988

19891989
"@krassowski/completion-theme@file:packages/completion-theme":
1990-
version "3.0.0"
1990+
version "3.1.0"
19911991

19921992
"@krassowski/jupyterlab-lsp-example-extractor@file:packages/_example-extractor":
19931993
version "0.0.0"
@@ -1998,7 +1998,7 @@
19981998
version "3.7.0"
19991999
dependencies:
20002000
"@krassowski/code-jumpers" "~1.1.0"
2001-
"@krassowski/completion-theme" "~3.0.0"
2001+
"@krassowski/completion-theme" "~3.1.0"
20022002
"@krassowski/theme-material" "~2.1.0"
20032003
"@krassowski/theme-vscode" "~2.1.0"
20042004
lodash.mergewith "^4.6.1"
@@ -2007,12 +2007,12 @@
20072007
"@krassowski/theme-material@file:packages/theme-material":
20082008
version "2.1.0"
20092009
dependencies:
2010-
"@krassowski/completion-theme" "~3.0.0"
2010+
"@krassowski/completion-theme" "^3.0.0"
20112011

20122012
"@krassowski/theme-vscode@file:packages/theme-vscode":
20132013
version "2.1.0"
20142014
dependencies:
2015-
"@krassowski/completion-theme" "~3.0.0"
2015+
"@krassowski/completion-theme" "^3.0.0"
20162016

20172017
20182018
version "3.21.0"

0 commit comments

Comments
 (0)