import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { ITranslator, TranslationBundle } from '@jupyterlab/translation'; import { FeatureSettings, IFeatureCommand } from '../../feature'; import { DiagnosticTag } from '../../lsp'; import { ILSPFeatureManager, PLUGIN_ID } from '../../tokens'; import { DiagnosticsCM, diagnosticsIcon, diagnostics_panel } from './diagnostics'; export const FEATURE_ID = PLUGIN_ID + ':diagnostics'; const COMMANDS = (trans: TranslationBundle): IFeatureCommand[] => [ { id: 'show-diagnostics-panel', execute: ({ app, features, adapter }) => { let diagnostics_feature = features.get(FEATURE_ID) as DiagnosticsCM; diagnostics_feature.switchDiagnosticsPanelSource(); if (!diagnostics_panel.is_registered) { diagnostics_panel.trans = trans; diagnostics_panel.register(app); } const panel_widget = diagnostics_panel.widget; if (!panel_widget.isAttached) { app.shell.add(panel_widget, 'main', { ref: adapter.widget_id, mode: 'split-bottom' }); } app.shell.activateById(panel_widget.id); }, is_enabled: context => { return context.app.name != 'JupyterLab Classic'; }, label: trans.__('Show diagnostics panel'), rank: 3, icon: diagnosticsIcon } ]; export const DIAGNOSTICS_PLUGIN: JupyterFrontEndPlugin = { id: FEATURE_ID, requires: [ILSPFeatureManager, ISettingRegistry, ITranslator], autoStart: true, activate: ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, translator: ITranslator ) => { const settings = new FeatureSettings(settingRegistry, FEATURE_ID); const trans = translator.load('jupyterlab_lsp'); featureManager.register({ feature: { editorIntegrationFactory: new Map([ ['CodeMirrorEditor', DiagnosticsCM] ]), id: FEATURE_ID, capabilities: { textDocument: { publishDiagnostics: { tagSupport: { valueSet: [DiagnosticTag.Deprecated, DiagnosticTag.Unnecessary] } } } }, name: 'LSP Diagnostics', settings: settings, commands: COMMANDS(trans) } }); } };