From 070f0675e1d36b6eb18f73a1ae6de9c28b8d8fe8 Mon Sep 17 00:00:00 2001 From: Bell Date: Mon, 8 Dec 2025 18:03:23 +0800 Subject: [PATCH 1/3] fix: problem panel show error when init,#197 --- website/src/workbench/problems/clients/paneView/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/workbench/problems/clients/paneView/index.tsx b/website/src/workbench/problems/clients/paneView/index.tsx index be3c7241..77abde64 100644 --- a/website/src/workbench/problems/clients/paneView/index.tsx +++ b/website/src/workbench/problems/clients/paneView/index.tsx @@ -16,7 +16,7 @@ const treeLeafSubInfoClassName = getBEMElement(treeLeafClassName, 'subInfo'); function ProblemsPaneView({ problemsService }: { problemsService: any }) { const localize = useLocale(); - const [data, setData] = useState(() => problemsService.get()); + const [data, setData] = useState(() => problemsService.get()?.filter(Boolean)); useEffect(() => { const unsubscribe = problemsService.subscribeData(setData); From f78af3828cbacc93b3734adbe56e3dc22aa21c40 Mon Sep 17 00:00:00 2001 From: Bell Date: Mon, 8 Dec 2025 19:56:00 +0800 Subject: [PATCH 2/3] fix: delet panel item output --- website/src/extensions/main/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/extensions/main/index.tsx b/website/src/extensions/main/index.tsx index 9dbea27d..84da7636 100644 --- a/website/src/extensions/main/index.tsx +++ b/website/src/extensions/main/index.tsx @@ -267,6 +267,7 @@ export const mainExt: IExtension = { ) } ]); + molecule.panel.remove('panel.item.output'); molecule.panel.add({ id: 'problem', From f06d188ca7de3f2fd80874ea5b1ea14208633bab Mon Sep 17 00:00:00 2001 From: Bell Date: Mon, 8 Dec 2025 20:43:00 +0800 Subject: [PATCH 3/3] fix: prevent shortcut loss on editor blur --- website/src/extensions/main/index.tsx | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/website/src/extensions/main/index.tsx b/website/src/extensions/main/index.tsx index 84da7636..83682bf3 100644 --- a/website/src/extensions/main/index.tsx +++ b/website/src/extensions/main/index.tsx @@ -3,10 +3,8 @@ import { IEditorTab, IExtension, IMoleculeContext, - TabGroup, - UniqueId + TabGroup } from '@dtinsight/molecule'; -import lips from '@jcubic/lips'; import * as monaco from 'monaco-editor'; import { vsPlusTheme } from 'monaco-sql-languages/esm/main'; @@ -37,6 +35,8 @@ import TreeVisualizerPanel from '@/components/treeVisualizerPanel'; const problemsService = new ProblemsService(); +// eslint-disable-next-line @typescript-eslint/ban-types +const disposed: { dispose: Function; [key: string]: any }[] = []; export const mainExt: IExtension = { id: 'mainExt', name: 'mainExt', @@ -380,7 +380,7 @@ export const mainExt: IExtension = { ); }); - molecule.editor.onContextMenuClick((item, tabId, groupId) => { + molecule.editor.onContextMenuClick((item) => { switch (item.id) { case 'parse': { updateParseTree(molecule, languageService); @@ -392,8 +392,7 @@ export const mainExt: IExtension = { } }); - molecule.editor.onFocus((item) => { - const groupId = (molecule.editor.getCurrentGroup() || -1) as UniqueId; + molecule.editor.onModelMount((_, groupId) => { const tab = molecule.editor.getCurrentTab(); if (tab?.id && tab.language) { molecule.editor.setCurrent(tab?.id, groupId); @@ -407,6 +406,9 @@ export const mainExt: IExtension = { analyzeProblems({ fileData, molecule, tab, languageService }); debounceUpdateParseTree(molecule, languageService); }); + }, + dispose() { + disposed.forEach((d) => d.dispose()); } }; @@ -414,8 +416,7 @@ const analyzeProblems = debounce((info: any) => { const { fileData, molecule, tab, languageService } = info || {}; const { value: sql, language } = fileData || {}; - // todo: 一定要 active Tab 才能获取到 language - if (!language) return; + if (!language || !sql) return; languageService.valid(language.toLocaleLowerCase(), sql).then((res: ParseError[]) => { const problems = convertMsgToProblemItem(tab, sql, res); @@ -490,7 +491,13 @@ const updateParseTree = (molecule: IMoleculeContext, languageService: LanguageSe const language = activeTab?.language?.toLocaleLowerCase(); if (!parseTreePanel || !language || !activeTab) return; - const sql = activeTab.model?.getValue() || ''; + // 为了解决 activeTab?.model 可能是 undefined 进行getValue 会出现报错问题 + let sql = ''; + try { + sql = activeTab?.model?.getValue() || ''; + } catch (e) { + sql = ''; + } languageService.getSerializedParseTree(language, sql).then((tree) => { molecule.panel.update({