Переглянути джерело

Separating sidebar provider from the main plugin

Maciej Nowacki 4 роки тому
батько
коміт
101b796bc3

+ 63 - 50
packages/debugger-extension/src/index.ts

@@ -332,33 +332,81 @@ const variables: JupyterFrontEndPlugin<void> = {
 };
 
 /**
- * The main debugger UI plugin.
+ * Debugger sidebar provider plugin.
  */
-const main: JupyterFrontEndPlugin<IDebuggerSidebar> = {
-  id: '@jupyterlab/debugger-extension:main',
+const sidebar: JupyterFrontEndPlugin<IDebugger.ISidebar> = {
+  id: '@jupyterlab/debugger-extension:sidebar',
   provides: IDebuggerSidebar,
   requires: [IDebugger, IEditorServices, ITranslator],
-  optional: [
-    ILabShell,
-    ILayoutRestorer,
-    ICommandPalette,
-    ISettingRegistry,
-    IThemeManager,
-    IDebuggerSources
-  ],
+  optional: [IThemeManager, ISettingRegistry],
   autoStart: true,
   activate: async (
     app: JupyterFrontEnd,
     service: IDebugger,
     editorServices: IEditorServices,
     translator: ITranslator,
+    themeManager: IThemeManager | null,
+    settingRegistry: ISettingRegistry | null
+  ): Promise<IDebugger.ISidebar> => {
+    const { commands } = app;
+    const CommandIDs = Debugger.CommandIDs;
+
+    const callstackCommands = {
+      registry: commands,
+      continue: CommandIDs.debugContinue,
+      terminate: CommandIDs.terminate,
+      next: CommandIDs.next,
+      stepIn: CommandIDs.stepIn,
+      stepOut: CommandIDs.stepOut
+    };
+
+    const sidebar = new Debugger.Sidebar({
+      service,
+      callstackCommands,
+      editorServices,
+      themeManager,
+      translator
+    });
+
+    if (settingRegistry) {
+      const setting = await settingRegistry.load(main.id);
+      const updateSettings = (): void => {
+        const filters = setting.get('variableFilters').composite as {
+          [key: string]: string[];
+        };
+        const kernel = service.session?.connection?.kernel?.name ?? '';
+        if (kernel && filters[kernel]) {
+          sidebar.variables.filter = new Set<string>(filters[kernel]);
+        }
+      };
+      updateSettings();
+      setting.changed.connect(updateSettings);
+      service.sessionChanged.connect(updateSettings);
+    }
+
+    return sidebar;
+  }
+};
+
+/**
+ * The main debugger UI plugin.
+ */
+const main: JupyterFrontEndPlugin<void> = {
+  id: '@jupyterlab/debugger-extension:main',
+  requires: [IDebugger, IEditorServices, ITranslator, IDebuggerSidebar],
+  optional: [ILabShell, ILayoutRestorer, ICommandPalette, IDebuggerSources],
+  autoStart: true,
+  activate: async (
+    app: JupyterFrontEnd,
+    service: IDebugger,
+    editorServices: IEditorServices,
+    translator: ITranslator,
+    sidebar: IDebugger.ISidebar,
     labShell: ILabShell | null,
     restorer: ILayoutRestorer | null,
     palette: ICommandPalette | null,
-    settingRegistry: ISettingRegistry | null,
-    themeManager: IThemeManager | null,
     debuggerSources: IDebugger.ISources | null
-  ): Promise<IDebuggerSidebar> => {
+  ): Promise<void> => {
     const trans = translator.load('jupyterlab');
     const { commands, shell, serviceManager } = app;
     const { kernelspecs } = serviceManager;
@@ -445,40 +493,6 @@ const main: JupyterFrontEndPlugin<IDebuggerSidebar> = {
       }
     });
 
-    const callstackCommands = {
-      registry: commands,
-      continue: CommandIDs.debugContinue,
-      terminate: CommandIDs.terminate,
-      next: CommandIDs.next,
-      stepIn: CommandIDs.stepIn,
-      stepOut: CommandIDs.stepOut
-    };
-
-    const sidebar = new Debugger.Sidebar({
-      service,
-      callstackCommands,
-      editorServices,
-      themeManager,
-      translator
-    });
-
-    if (settingRegistry) {
-      const setting = await settingRegistry.load(main.id);
-      const updateSettings = (): void => {
-        const filters = setting.get('variableFilters').composite as {
-          [key: string]: string[];
-        };
-        const kernel = service.session?.connection?.kernel?.name ?? '';
-        if (kernel && filters[kernel]) {
-          sidebar.variables.filter = new Set<string>(filters[kernel]);
-        }
-      };
-
-      updateSettings();
-      setting.changed.connect(updateSettings);
-      service.sessionChanged.connect(updateSettings);
-    }
-
     service.eventMessage.connect((_, event): void => {
       commands.notifyCommandChanged();
       if (labShell && event.event === 'initialized') {
@@ -586,8 +600,6 @@ const main: JupyterFrontEndPlugin<IDebuggerSidebar> = {
         onCurrentSourceOpened(null, source);
       });
     }
-
-    return sidebar;
   }
 };
 
@@ -600,6 +612,7 @@ const plugins: JupyterFrontEndPlugin<any>[] = [
   files,
   notebooks,
   variables,
+  sidebar,
   main,
   sources,
   configuration

+ 2 - 3
packages/debugger/src/tokens.ts

@@ -489,7 +489,7 @@ export namespace IDebugger {
   /**
    * Debugger sidebar interface.
    */
-  export interface ISidebar {
+  export interface ISidebar extends Widget {
     /**
      * Add panel at the end of the sidebar.
      */
@@ -767,7 +767,6 @@ export const IDebuggerSources = new Token<IDebugger.ISources>(
 /**
  * The debugger configuration token.
  */
-export type IDebuggerSidebar = IDebugger.ISidebar | undefined;
-export const IDebuggerSidebar = new Token<IDebuggerSidebar>(
+export const IDebuggerSidebar = new Token<IDebugger.ISidebar>(
   '@jupyterlab/debugger:IDebuggerSidebar'
 );