1
1
import { JupyterFrontEnd } from '@jupyterlab/application' ;
2
2
import { CodeEditor } from '@jupyterlab/codeeditor' ;
3
- import { CompletionHandler , ICompletionManager } from '@jupyterlab/completer' ;
3
+ import {
4
+ CompletionHandler ,
5
+ ICompletionManager ,
6
+ CompleterModel
7
+ } from '@jupyterlab/completer' ;
4
8
import { IDocumentWidget } from '@jupyterlab/docregistry' ;
5
9
import { NotebookPanel } from '@jupyterlab/notebook' ;
6
10
import { IRenderMimeRegistry } from '@jupyterlab/rendermime' ;
@@ -27,6 +31,7 @@ import { ICompletionData, LSPCompletionRenderer } from './renderer';
27
31
28
32
const DOC_PANEL_SELECTOR = '.jp-Completer-docpanel' ;
29
33
const DOC_PANEL_PLACEHOLDER_CLASS = 'lsp-completer-placeholder' ;
34
+ const LSP_COMPLETER_CLASS = 'lsp-completer' ;
30
35
31
36
export class CompletionCM extends CodeMirrorIntegration {
32
37
private _completionCharacters : string [ ] ;
@@ -89,6 +94,7 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
89
94
protected renderer : LSPCompletionRenderer ;
90
95
private _latestActiveItem : LazyCompletionItem | null = null ;
91
96
private _signalConnected : boolean = false ;
97
+ private _disabled : boolean ;
92
98
93
99
constructor (
94
100
private app : JupyterFrontEnd ,
@@ -110,16 +116,20 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
110
116
this . renderer . activeChanged . connect ( this . active_completion_changed , this ) ;
111
117
this . renderer . itemShown . connect ( this . resolve_and_update , this ) ;
112
118
this . _signalConnected = false ;
119
+ this . _disabled = false ;
113
120
// TODO: figure out a better way to disable lab integration elements (postpone initialization?)
114
121
settings . ready
115
122
. then ( ( ) => {
123
+ this . _disabled = settings . composite . disable ;
116
124
if ( ! settings . composite . disable ) {
117
125
adapterManager . adapterChanged . connect ( this . swap_adapter , this ) ;
118
126
this . _signalConnected = true ;
119
127
}
120
128
} )
121
129
. catch ( console . warn ) ;
130
+
122
131
settings . changed . connect ( ( ) => {
132
+ this . _disabled = settings . composite . disable ;
123
133
if ( ! settings . composite . disable ) {
124
134
document . body . dataset . lspCompleterLayout =
125
135
this . settings . composite . layout ;
@@ -131,16 +141,14 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
131
141
adapterManager . adapterChanged . connect ( this . swap_adapter , this ) ;
132
142
this . _signalConnected = true ;
133
143
}
134
- // TODO connect adapter if not connected
135
144
} else {
136
145
completionThemeManager . set_theme ( null ) ;
137
146
delete document . body . dataset . lspCompleterLayout ;
138
- if ( this . _signalConnected ) {
139
- adapterManager . adapterChanged . disconnect ( this . swap_adapter , this ) ;
140
- this . _signalConnected = false ;
141
- }
142
147
}
143
- if ( this . current_completion_handler ) {
148
+ if (
149
+ this . current_completion_handler &&
150
+ this . model instanceof LSPCompleterModel
151
+ ) {
144
152
this . model . settings . caseSensitive =
145
153
this . settings . composite . caseSensitive ;
146
154
this . model . settings . includePerfectMatches =
@@ -299,21 +307,26 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
299
307
this . renderer
300
308
) as CompletionHandler ;
301
309
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
+ }
308
321
}
309
322
310
323
protected get completer ( ) {
311
324
// TODO upstream: make completer public?
312
325
return this . current_completion_handler . completer ;
313
326
}
314
327
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 ;
317
330
}
318
331
319
332
invoke_completer ( kind : ExtendedCompletionTriggerKind ) {
@@ -351,6 +364,9 @@ export class CompletionLabIntegration implements IFeatureLabIntegration {
351
364
private get current_items ( ) {
352
365
// TODO upstream: allow to get completionItems() without markup
353
366
// (note: not trivial as _markup() does filtering too)
367
+ if ( ! ( this . model instanceof LSPCompleterModel ) ) {
368
+ return [ ] ;
369
+ }
354
370
return this . model . completionItems ( ) ;
355
371
}
356
372
0 commit comments