@@ -3,10 +3,8 @@ import {
33 IEditorTab ,
44 IExtension ,
55 IMoleculeContext ,
6- TabGroup ,
7- UniqueId
6+ TabGroup
87} from '@dtinsight/molecule' ;
9- import lips from '@jcubic/lips' ;
108
119import * as monaco from 'monaco-editor' ;
1210import { vsPlusTheme } from 'monaco-sql-languages/esm/main' ;
@@ -37,6 +35,8 @@ import TreeVisualizerPanel from '@/components/treeVisualizerPanel';
3735
3836const problemsService = new ProblemsService ( ) ;
3937
38+ // eslint-disable-next-line @typescript-eslint/ban-types
39+ const disposed : { dispose : Function ; [ key : string ] : any } [ ] = [ ] ;
4040export const mainExt : IExtension = {
4141 id : 'mainExt' ,
4242 name : 'mainExt' ,
@@ -380,7 +380,7 @@ export const mainExt: IExtension = {
380380 ) ;
381381 } ) ;
382382
383- molecule . editor . onContextMenuClick ( ( item , tabId , groupId ) => {
383+ molecule . editor . onContextMenuClick ( ( item ) => {
384384 switch ( item . id ) {
385385 case 'parse' : {
386386 updateParseTree ( molecule , languageService ) ;
@@ -392,8 +392,7 @@ export const mainExt: IExtension = {
392392 }
393393 } ) ;
394394
395- molecule . editor . onFocus ( ( item ) => {
396- const groupId = ( molecule . editor . getCurrentGroup ( ) || - 1 ) as UniqueId ;
395+ molecule . editor . onModelMount ( ( _ , groupId ) => {
397396 const tab = molecule . editor . getCurrentTab ( ) ;
398397 if ( tab ?. id && tab . language ) {
399398 molecule . editor . setCurrent ( tab ?. id , groupId ) ;
@@ -407,15 +406,17 @@ export const mainExt: IExtension = {
407406 analyzeProblems ( { fileData, molecule, tab, languageService } ) ;
408407 debounceUpdateParseTree ( molecule , languageService ) ;
409408 } ) ;
409+ } ,
410+ dispose ( ) {
411+ disposed . forEach ( ( d ) => d . dispose ( ) ) ;
410412 }
411413} ;
412414
413415const analyzeProblems = debounce ( ( info : any ) => {
414416 const { fileData, molecule, tab, languageService } = info || { } ;
415417 const { value : sql , language } = fileData || { } ;
416418
417- // todo: 一定要 active Tab 才能获取到 language
418- if ( ! language ) return ;
419+ if ( ! language || ! sql ) return ;
419420
420421 languageService . valid ( language . toLocaleLowerCase ( ) , sql ) . then ( ( res : ParseError [ ] ) => {
421422 const problems = convertMsgToProblemItem ( tab , sql , res ) ;
@@ -490,7 +491,13 @@ const updateParseTree = (molecule: IMoleculeContext, languageService: LanguageSe
490491 const language = activeTab ?. language ?. toLocaleLowerCase ( ) ;
491492
492493 if ( ! parseTreePanel || ! language || ! activeTab ) return ;
493- const sql = activeTab . model ?. getValue ( ) || '' ;
494+ // 为了解决 activeTab?.model 可能是 undefined 进行getValue 会出现报错问题
495+ let sql = '' ;
496+ try {
497+ sql = activeTab ?. model ?. getValue ( ) || '' ;
498+ } catch ( e ) {
499+ sql = '' ;
500+ }
494501
495502 languageService . getSerializedParseTree ( language , sql ) . then ( ( tree ) => {
496503 molecule . panel . update ( {
0 commit comments