@@ -35,6 +35,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
3535 readonly start = new Position ( 0 , 0 ) ;
3636 readonly cache = new Map < string , Map < string , CompletionItem > > ( ) ;
3737 readonly watchers = new Map < string , Disposable > ( ) ;
38+ readonly selectors = new Map < string , Selectors > ( ) ;
3839 readonly collection = languages . createDiagnosticCollection ( ) ;
3940 readonly isRemote = / ^ h t t p s ? : \/ \/ / i;
4041 readonly canComplete = / ( i d | c l a s s | c l a s s N a m e ) \s * = \s * ( " | ' ) (?: (? ! \2) .) * $ / si;
@@ -46,6 +47,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
4647 this . watchers . forEach ( v => v . dispose ( ) ) ;
4748 this . cache . clear ( ) ;
4849 this . watchers . clear ( ) ;
50+ this . selectors . clear ( ) ;
4951 this . collection . dispose ( ) ;
5052 }
5153
@@ -210,7 +212,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
210212 }
211213 }
212214
213- async validate ( document : TextDocument ) : Promise < Selectors > {
215+ async validate ( document : TextDocument ) : Promise < void > {
214216 const keys = new Set < string > ( ) ;
215217 const uri = document . uri ;
216218 const text = document . getText ( ) ;
@@ -263,10 +265,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
263265 }
264266
265267 this . collection . set ( uri , diagnostics ) ;
266-
267- return {
268- ids, classes
269- } ;
268+ this . selectors . set ( uri . toString ( ) , { ids, classes } ) ;
270269 }
271270
272271 provideCompletionItems (
@@ -282,13 +281,12 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
282281 const range = new Range ( this . start , position ) ;
283282 const text = document . getText ( range ) ;
284283 const canComplete = this . canComplete . exec ( text ) ;
284+ const selector = this . selectors . get ( document . uri . toString ( ) ) ;
285285
286- if ( canComplete ) {
287- this . validate ( document ) . then ( selectors => resolve ( [
288- ...( canComplete [ 1 ] === "id"
289- ? selectors . ids
290- : selectors . classes ) . values ( )
291- ] ) ) ;
286+ if ( canComplete && selector ) {
287+ resolve ( [ ...( canComplete [ 1 ] === "id"
288+ ? selector . ids
289+ : selector . classes ) . values ( ) ] ) ;
292290 } else {
293291 reject ( ) ;
294292 }
0 commit comments