@@ -23,31 +23,34 @@ export class ClassCompletionItemProvider implements CompletionItemProvider, Disp
2323 readonly start = new Position ( 0 , 0 ) ;
2424 readonly cache = new Map < string , Map < string , CompletionItem > > ( ) ;
2525 readonly extends = new Map < string , Set < string > > ( ) ;
26- readonly disposables : Disposable [ ] = [ ] ;
26+ readonly watchers = new Map < string , Disposable > ( ) ;
2727 readonly isRemote = / ^ h t t p s ? : \/ \/ / i;
2828 readonly canComplete = / ( i d | c l a s s | c l a s s N a m e ) \s * = \s * ( [ " ' ] ) (?: (? ! \2) .) * $ / si;
2929 readonly findLinkRel = / r e l \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) + ) \1/ si;
3030 readonly findLinkHref = / h r e f \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) + ) \1/ si;
3131 readonly findExtended = / (?: { { \s * < | { % \s * e x t e n d s ) \s * " ? ( [ \/ \. \\ 0 - 9 _ a - z - A- Z ] + ) " ? \s * (?: % } | } } ) / i;
3232
3333 dispose ( ) {
34- let e ;
35-
36- while ( e = this . disposables . pop ( ) ) {
37- e . dispose ( ) ;
34+ for ( const wathcer of this . watchers . values ( ) ) {
35+ wathcer . dispose ( ) ;
3836 }
3937
4038 this . cache . clear ( ) ;
4139 this . extends . clear ( ) ;
40+ this . watchers . clear ( ) ;
4241 }
4342
4443 watchFile ( uri : Uri , listener : ( e : Uri ) => any ) {
45- const watcher = workspace . createFileSystemWatcher ( uri . fsPath , true ) ;
44+ const key = uri . toString ( ) ;
45+
46+ if ( ! this . watchers . has ( key ) ) {
47+ const watcher = workspace . createFileSystemWatcher ( uri . fsPath , true ) ;
4648
47- this . disposables . push (
48- watcher . onDidChange ( listener ) ,
49- watcher . onDidDelete ( listener ) ,
50- watcher ) ;
49+ watcher . onDidChange ( listener ) ;
50+ watcher . onDidDelete ( listener ) ;
51+
52+ this . watchers . set ( key , watcher ) ;
53+ }
5154 }
5255
5356 getStyleSheets ( uri : Uri ) : string [ ] {
@@ -253,7 +256,7 @@ export class ClassCompletionItemProvider implements CompletionItemProvider, Disp
253256 const canComplete = this . canComplete . exec ( text ) ;
254257
255258 if ( canComplete ) {
256- const type = canComplete [ 1 ] === "id"
259+ const kind = canComplete [ 1 ] === "id"
257260 ? CompletionItemKind . Value
258261 : CompletionItemKind . Enum ;
259262
@@ -264,7 +267,7 @@ export class ClassCompletionItemProvider implements CompletionItemProvider, Disp
264267 this . findDocumentLinks ( uri , text ) ,
265268 this . findDocumentStyles ( uri , text ) ,
266269 this . findExtendedStyles ( uri , text )
267- ] ) . then ( keys => resolve ( this . buildItems ( keys , type ) ) ) ;
270+ ] ) . then ( keys => resolve ( this . buildItems ( keys , kind ) ) ) ;
268271 } else {
269272 reject ( ) ;
270273 }
0 commit comments