1
1
import getDesignToken from "antd-token-previewer/es/utils/getDesignToken" ;
2
2
import * as vscode from "vscode" ;
3
- import setupEventListener , { DisposableAndClear } from "./listener" ;
3
+ import setupEventListenerAndDecorations , {
4
+ DisposableAndClear ,
5
+ } from "./listener" ;
4
6
import setupAntdTokenCompletion from "./typing" ;
7
+ import { checkAntdProject } from "./utils" ;
5
8
6
9
export 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 ;
10
14
11
- setup ( ) ;
15
+ if ( isActive || isActive === undefined ) {
16
+ setup ( ) ;
17
+ }
12
18
13
19
const disposable = vscode . commands . registerCommand (
14
20
"antd-design-token.toggle" ,
15
21
( ) => {
16
- isActive = ! isActive ;
22
+ const isActive = context . globalState . get ( ACTIVE_KEY ) ;
23
+ context . globalState . update ( ACTIVE_KEY , ! isActive ) ;
17
24
18
25
if ( isActive ) {
19
- setup ( ) ;
26
+ disposeAll ( ) ;
20
27
vscode . window . showInformationMessage (
21
- "antd design token is active now."
28
+ "antd design token is inactive now."
22
29
) ;
23
30
} else {
24
- disposeTyping . dispose ( ) ;
25
- disposableAndClear . disposable . forEach ( ( disposable ) =>
26
- disposable . dispose ( )
27
- ) ;
28
- disposableAndClear . clear ( ) ;
31
+ setup ( ) ;
29
32
vscode . window . showInformationMessage (
30
- "antd design token is inactive now."
33
+ "antd design token is active now."
31
34
) ;
32
35
}
33
36
}
@@ -43,8 +46,55 @@ export function activate(context: vscode.ExtensionContext) {
43
46
return ;
44
47
}
45
48
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
+ ) {
46
61
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
+ ) ;
48
98
}
49
99
}
50
100
0 commit comments