11import getDesignToken from "antd-token-previewer/es/utils/getDesignToken" ;
22import * as vscode from "vscode" ;
3- import setupEventListener , { DisposableAndClear } from "./listener" ;
3+ import setupEventListenerAndDecorations , {
4+ DisposableAndClear ,
5+ } from "./listener" ;
46import setupAntdTokenCompletion from "./typing" ;
7+ import { checkAntdProject } from "./utils" ;
58
69export function activate ( context : vscode . ExtensionContext ) {
7- let isActive = true ;
8- let disposeTyping : vscode . Disposable ;
9- let disposableAndClear : DisposableAndClear ;
10+ const ACTIVE_KEY = "antd-design-token-active-key" ;
11+ const isActive = context . globalState . get ( ACTIVE_KEY ) ;
12+ let disposeTyping : vscode . Disposable | undefined ;
13+ let disposableAndClear : DisposableAndClear | undefined ;
1014
11- setup ( ) ;
15+ if ( isActive || isActive === undefined ) {
16+ setup ( ) ;
17+ }
1218
1319 const disposable = vscode . commands . registerCommand (
1420 "antd-design-token.toggle" ,
1521 ( ) => {
16- isActive = ! isActive ;
22+ const isActive = context . globalState . get ( ACTIVE_KEY ) ;
23+ context . globalState . update ( ACTIVE_KEY , ! isActive ) ;
1724
1825 if ( isActive ) {
19- setup ( ) ;
26+ disposeAll ( ) ;
2027 vscode . window . showInformationMessage (
21- "antd design token is active now."
28+ "antd design token is inactive now."
2229 ) ;
2330 } else {
24- disposeTyping . dispose ( ) ;
25- disposableAndClear . disposable . forEach ( ( disposable ) =>
26- disposable . dispose ( )
27- ) ;
28- disposableAndClear . clear ( ) ;
31+ setup ( ) ;
2932 vscode . window . showInformationMessage (
30- "antd design token is inactive now."
33+ "antd design token is active now."
3134 ) ;
3235 }
3336 }
@@ -43,8 +46,55 @@ export function activate(context: vscode.ExtensionContext) {
4346 return ;
4447 }
4548
49+ activeEditorListener ( fullToken ) ;
50+
51+ const isAntdProject = checkAntdProject ( ) ;
52+ if ( isAntdProject ) {
53+ setupDecorationsAndCompletion ( context , fullToken ) ;
54+ }
55+ }
56+
57+ function setupDecorationsAndCompletion (
58+ context : vscode . ExtensionContext ,
59+ fullToken : any
60+ ) {
4661 disposeTyping = setupAntdTokenCompletion ( fullToken ) ;
47- disposableAndClear = setupEventListener ( context , fullToken ) ;
62+ disposableAndClear = setupEventListenerAndDecorations ( context , fullToken ) ;
63+ }
64+
65+ function disposeAll ( ) {
66+ if ( disposeTyping ) {
67+ disposeTyping ?. dispose ( ) ;
68+ disposeTyping = undefined ;
69+ }
70+
71+ if ( disposableAndClear ) {
72+ disposableAndClear ?. disposable ?. forEach ( ( disposable ) =>
73+ disposable ?. dispose ( )
74+ ) ;
75+ disposableAndClear ?. clear ( ) ;
76+ disposableAndClear = undefined ;
77+ }
78+ }
79+
80+ function activeEditorListener ( fullToken : any ) {
81+ vscode . window . onDidChangeActiveTextEditor (
82+ ( editor ) => {
83+ if ( editor ) {
84+ const isAntdProject = checkAntdProject ( ) ;
85+
86+ if ( isAntdProject ) {
87+ if ( ! disposeTyping && ! disposableAndClear ) {
88+ setupDecorationsAndCompletion ( context , fullToken ) ;
89+ }
90+ } else {
91+ disposeAll ( ) ;
92+ }
93+ }
94+ } ,
95+ null ,
96+ context . subscriptions
97+ ) ;
4898 }
4999}
50100
0 commit comments