Skip to content

Commit c56fe50

Browse files
committed
Clean off all completer styles when disabling
1 parent 552cfc1 commit c56fe50

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

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

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { JupyterFrontEnd } from '@jupyterlab/application';
22
import { CodeEditor } from '@jupyterlab/codeeditor';
3-
import { CompletionHandler, ICompletionManager } from '@jupyterlab/completer';
3+
import {
4+
CompletionHandler,
5+
ICompletionManager,
6+
CompleterModel
7+
} from '@jupyterlab/completer';
48
import { IDocumentWidget } from '@jupyterlab/docregistry';
59
import { NotebookPanel } from '@jupyterlab/notebook';
610
import { IRenderMimeRegistry } from '@jupyterlab/rendermime';
@@ -27,6 +31,7 @@ import { ICompletionData, LSPCompletionRenderer } from './renderer';
2731

2832
const DOC_PANEL_SELECTOR = '.jp-Completer-docpanel';
2933
const DOC_PANEL_PLACEHOLDER_CLASS = 'lsp-completer-placeholder';
34+
const LSP_COMPLETER_CLASS = 'lsp-completer';
3035

3136
export class CompletionCM extends CodeMirrorIntegration {
3237
private _completionCharacters: string[];
@@ -89,6 +94,7 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
8994
protected renderer: LSPCompletionRenderer;
9095
private _latestActiveItem: LazyCompletionItem | null = null;
9196
private _signalConnected: boolean = false;
97+
private _disabled: boolean;
9298

9399
constructor(
94100
private app: JupyterFrontEnd,
@@ -110,16 +116,20 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
110116
this.renderer.activeChanged.connect(this.active_completion_changed, this);
111117
this.renderer.itemShown.connect(this.resolve_and_update, this);
112118
this._signalConnected = false;
119+
this._disabled = false;
113120
// TODO: figure out a better way to disable lab integration elements (postpone initialization?)
114121
settings.ready
115122
.then(() => {
123+
this._disabled = settings.composite.disable;
116124
if (!settings.composite.disable) {
117125
adapterManager.adapterChanged.connect(this.swap_adapter, this);
118126
this._signalConnected = true;
119127
}
120128
})
121129
.catch(console.warn);
130+
122131
settings.changed.connect(() => {
132+
this._disabled = settings.composite.disable;
123133
if (!settings.composite.disable) {
124134
document.body.dataset.lspCompleterLayout =
125135
this.settings.composite.layout;
@@ -131,16 +141,14 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
131141
adapterManager.adapterChanged.connect(this.swap_adapter, this);
132142
this._signalConnected = true;
133143
}
134-
// TODO connect adapter if not connected
135144
} else {
136145
completionThemeManager.set_theme(null);
137146
delete document.body.dataset.lspCompleterLayout;
138-
if (this._signalConnected) {
139-
adapterManager.adapterChanged.disconnect(this.swap_adapter, this);
140-
this._signalConnected = false;
141-
}
142147
}
143-
if (this.current_completion_handler) {
148+
if (
149+
this.current_completion_handler &&
150+
this.model instanceof LSPCompleterModel
151+
) {
144152
this.model.settings.caseSensitive =
145153
this.settings.composite.caseSensitive;
146154
this.model.settings.includePerfectMatches =
@@ -299,21 +307,26 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
299307
this.renderer
300308
) as CompletionHandler;
301309
let completer = this.completer;
302-
completer.addClass('lsp-completer');
303-
completer.model = new LSPCompleterModel({
304-
caseSensitive: this.settings.composite.caseSensitive,
305-
includePerfectMatches: this.settings.composite.includePerfectMatches,
306-
preFilterMatches: this.settings.composite.preFilterMatches
307-
});
310+
if (this._disabled) {
311+
completer.removeClass(LSP_COMPLETER_CLASS);
312+
completer.model = new CompleterModel();
313+
} else {
314+
completer.addClass(LSP_COMPLETER_CLASS);
315+
completer.model = new LSPCompleterModel({
316+
caseSensitive: this.settings.composite.caseSensitive,
317+
includePerfectMatches: this.settings.composite.includePerfectMatches,
318+
preFilterMatches: this.settings.composite.preFilterMatches
319+
});
320+
}
308321
}
309322

310323
protected get completer() {
311324
// TODO upstream: make completer public?
312325
return this.current_completion_handler.completer;
313326
}
314327

315-
protected get model(): LSPCompleterModel {
316-
return this.completer.model as LSPCompleterModel;
328+
protected get model(): LSPCompleterModel | CompleterModel {
329+
return this.completer.model as LSPCompleterModel | CompleterModel;
317330
}
318331

319332
invoke_completer(kind: ExtendedCompletionTriggerKind) {
@@ -351,6 +364,9 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
351364
private get current_items() {
352365
// TODO upstream: allow to get completionItems() without markup
353366
// (note: not trivial as _markup() does filtering too)
367+
if (!(this.model instanceof LSPCompleterModel)) {
368+
return [];
369+
}
354370
return this.model.completionItems();
355371
}
356372

0 commit comments

Comments
 (0)