diff --git a/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx b/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx index a075ec3ab..42f481475 100644 --- a/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx +++ b/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx @@ -1,7 +1,7 @@ import { LibroKernelManager, LibroSessionManager } from '@difizen/libro-kernel'; -import { DocumentConnectionManager } from '@difizen/libro-lsp'; import type { ILanguageServerManager } from '@difizen/libro-lsp'; -import type { ILSPDocumentConnectionManager } from '@difizen/libro-lsp'; +import { DocumentConnectionManager } from '@difizen/libro-lsp'; +import { ILSPDocumentConnectionManager } from '@difizen/libro-lsp'; import { TerminalManager } from '@difizen/libro-terminal'; import { BaseView, @@ -31,8 +31,13 @@ const PanelRender: React.FC = () => { const instance = useInject(ViewInstance); const openedTabView = instance.getAllOpenedTabView(); - const { libroKernelManager, libroSessionManager, terminalManager, lspManager } = - instance; + const { + libroKernelManager, + libroSessionManager, + terminalManager, + lspManager, + lspConnectionManager, + } = instance; const [kernelItems, setKernelItems] = useState< LibroPanelCollapseKernelItem[] | undefined @@ -57,7 +62,7 @@ const PanelRender: React.FC = () => { items.push({ id: key, name: `${key} (${session.spec.languages.join('/')})`, - shutdown: async () => lspManager.shutdown(key), + shutdown: async () => lspConnectionManager.disconnectServer(key), }); }); @@ -160,7 +165,7 @@ const PanelRender: React.FC = () => { lspManager.shutdownAll()} + shutdownAll={() => lspConnectionManager.disconnectAllServers()} /> ); @@ -178,13 +183,14 @@ export class KernelAndTerminalPanelView extends BaseView { libroKernelManager: LibroKernelManager; libroSessionManager: LibroSessionManager; terminalManager: TerminalManager; + lspConnectionManager: ILSPDocumentConnectionManager; lspManager: ILanguageServerManager; constructor( @inject(LibroKernelManager) libroKernelManager: LibroKernelManager, @inject(LibroSessionManager) libroSessionManager: LibroSessionManager, @inject(TerminalManager) terminalManager: TerminalManager, - @inject(DocumentConnectionManager) + @inject(ILSPDocumentConnectionManager) lspDocumentConnectionManager: ILSPDocumentConnectionManager, ) { super(); @@ -194,6 +200,7 @@ export class KernelAndTerminalPanelView extends BaseView { this.libroKernelManager = libroKernelManager; this.libroSessionManager = libroSessionManager; this.terminalManager = terminalManager; + this.lspConnectionManager = lspDocumentConnectionManager; this.lspManager = lspDocumentConnectionManager.languageServerManager; } diff --git a/packages/libro-lsp/src/connection-manager.ts b/packages/libro-lsp/src/connection-manager.ts index ea797da1a..fbcadf28f 100644 --- a/packages/libro-lsp/src/connection-manager.ts +++ b/packages/libro-lsp/src/connection-manager.ts @@ -58,14 +58,24 @@ export class DocumentConnectionManager implements ILSPDocumentConnectionManager private _connections: Map = new Map(); - protected disconnectServer(languageServerId: TLanguageServerId): void { + disconnectServer(languageServerId: TLanguageServerId): void { const connection = this._connections.get(languageServerId); if (connection) { connection.close(); this._connections.delete(languageServerId); + this.languageServerManager.refreshRunning(); } } + disconnectAllServers(): void { + this.connections.forEach((connection, languageServerId) => { + connection.close(); + this._connections.delete(languageServerId as TLanguageServerId); + }); + + this.languageServerManager.refreshRunning(); + } + /** * Return (or create and initialize) the WebSocket associated with the language */ diff --git a/packages/libro-lsp/src/manager.ts b/packages/libro-lsp/src/manager.ts index 8dddbfb6b..761afc61e 100644 --- a/packages/libro-lsp/src/manager.ts +++ b/packages/libro-lsp/src/manager.ts @@ -44,16 +44,7 @@ export class LanguageServerManager implements ILanguageServerManager { } async refreshRunning() { - // TODO: refreshRunning - } - - async shutdownAll() { - // TODO: shutdownAll - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async shutdown(key: string) { - // TODO: shutdown + this.fetchSessions(); } /**