@@ -14,31 +14,45 @@ import { createHidingMiddleware } from '@vscode/jupyter-lsp-middleware';
1414export class LanguageClientMiddleware extends LanguageClientMiddlewareBase {
1515 public constructor ( serviceContainer : IServiceContainer , serverType : LanguageServerType , serverVersion ?: string ) {
1616 super ( serviceContainer , serverType , sendTelemetryEvent , serverVersion ) ;
17+ }
1718
18- if ( serverType === LanguageServerType . None ) {
19- return ;
20- }
21-
19+ /**
20+ * Creates the HidingMiddleware if needed and sets up code to do so if needed after
21+ * Jupyter is installed.
22+ *
23+ * This method should be called from the constructor of derived classes. It is separated
24+ * from the constructor to allow derived classes to initialize before it is called.
25+ */
26+ protected setupHidingMiddleware ( serviceContainer : IServiceContainer ) {
2227 const jupyterDependencyManager = serviceContainer . get < IJupyterExtensionDependencyManager > (
2328 IJupyterExtensionDependencyManager ,
2429 ) ;
2530 const disposables = serviceContainer . get < IDisposableRegistry > ( IDisposableRegistry ) || [ ] ;
2631 const extensions = serviceContainer . get < IExtensions > ( IExtensions ) ;
2732
2833 // Enable notebook support if jupyter support is installed
29- if ( jupyterDependencyManager && jupyterDependencyManager . isJupyterExtensionInstalled ) {
34+ if ( this . shouldCreateHidingMiddleware ( jupyterDependencyManager ) ) {
3035 this . notebookAddon = createHidingMiddleware ( ) ;
3136 }
37+
3238 disposables . push (
33- extensions ?. onDidChange ( ( ) => {
34- if ( jupyterDependencyManager ) {
35- if ( this . notebookAddon && ! jupyterDependencyManager . isJupyterExtensionInstalled ) {
36- this . notebookAddon = undefined ;
37- } else if ( ! this . notebookAddon && jupyterDependencyManager . isJupyterExtensionInstalled ) {
38- this . notebookAddon = createHidingMiddleware ( ) ;
39- }
40- }
39+ extensions ?. onDidChange ( async ( ) => {
40+ await this . onExtensionChange ( jupyterDependencyManager ) ;
4141 } ) ,
4242 ) ;
4343 }
44+
45+ protected shouldCreateHidingMiddleware ( jupyterDependencyManager : IJupyterExtensionDependencyManager ) : boolean {
46+ return jupyterDependencyManager && jupyterDependencyManager . isJupyterExtensionInstalled ;
47+ }
48+
49+ protected async onExtensionChange ( jupyterDependencyManager : IJupyterExtensionDependencyManager ) : Promise < void > {
50+ if ( jupyterDependencyManager ) {
51+ if ( this . notebookAddon && ! this . shouldCreateHidingMiddleware ( jupyterDependencyManager ) ) {
52+ this . notebookAddon = undefined ;
53+ } else if ( ! this . notebookAddon && this . shouldCreateHidingMiddleware ( jupyterDependencyManager ) ) {
54+ this . notebookAddon = createHidingMiddleware ( ) ;
55+ }
56+ }
57+ }
4458}
0 commit comments