11import fetch from "node-fetch" ;
2+ import { nextTick } from "process" ;
23import { parse , walk } from "css-tree" ;
34import { basename , dirname , extname , isAbsolute , join } from "path" ;
45import {
@@ -25,20 +26,20 @@ export type Validation = {
2526 class : boolean
2627} ;
2728
28- export type Selectors = {
29+ export type Selector = {
2930 ids : Map < string , CompletionItem > ,
30- idRanges : Range [ ] ,
3131 classes : Map < string , CompletionItem > ,
32- classRanges : Range [ ]
32+ rangesId : Range [ ] ,
33+ rangesClass : Range [ ]
3334} ;
3435
3536export class SelectorCompletionItemProvider implements CompletionItemProvider , Disposable {
3637
3738 readonly start = new Position ( 0 , 0 ) ;
3839 readonly cache = new Map < string , Map < string , CompletionItem > > ( ) ;
3940 readonly watchers = new Map < string , Disposable > ( ) ;
40- readonly selectors = new Map < string , Selectors > ( ) ;
41- readonly collection = languages . createDiagnosticCollection ( ) ;
41+ readonly selectors = new Map < string , Selector > ( ) ;
42+ readonly warnings = languages . createDiagnosticCollection ( ) ;
4243 readonly isRemote = / ^ h t t p s ? : \/ \/ / i;
4344 readonly findLinkRel = / r e l \s * = \s * ( " | ' ) ( (?: (? ! \1) .) + ) \1/ si;
4445 readonly findLinkHref = / h r e f \s * = \s * ( " | ' ) ( (?: (? ! \1) .) + ) \1/ si;
@@ -49,7 +50,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
4950 this . cache . clear ( ) ;
5051 this . watchers . clear ( ) ;
5152 this . selectors . clear ( ) ;
52- this . collection . dispose ( ) ;
53+ this . warnings . dispose ( ) ;
5354 }
5455
5556 watchFile ( uri : Uri , listener : ( e : Uri ) => any ) {
@@ -225,8 +226,8 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
225226
226227 const ids = new Map < string , CompletionItem > ( ) ;
227228 const classes = new Map < string , CompletionItem > ( ) ;
228- const idRanges : Range [ ] = [ ] ;
229- const classRanges : Range [ ] = [ ] ;
229+ const rangesId : Range [ ] = [ ] ;
230+ const rangesClass : Range [ ] = [ ] ;
230231
231232 keys . forEach ( key => this . cache . get ( key ) ?. forEach ( ( v , k ) =>
232233 ( v . kind === CompletionItemKind . Value ? ids : classes ) . set ( k , v ) ) ) ;
@@ -242,7 +243,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
242243 - attribute [ 3 ] . length
243244 + attribute [ 3 ] . indexOf ( attribute [ 2 ] ) ;
244245
245- ( attribute [ 1 ] === "id" ? idRanges : classRanges ) . push ( new Range (
246+ ( attribute [ 1 ] === "id" ? rangesId : rangesClass ) . push ( new Range (
246247 document . positionAt ( offset ) ,
247248 document . positionAt ( findAttribute . lastIndex - 1 ) ) ) ;
248249
@@ -271,8 +272,8 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
271272 }
272273 }
273274
274- this . collection . set ( uri , diagnostics ) ;
275- this . selectors . set ( uri . toString ( ) , { ids, idRanges , classes , classRanges } ) ;
275+ this . warnings . set ( uri , diagnostics ) ;
276+ this . selectors . set ( uri . toString ( ) , { ids, classes , rangesId , rangesClass } ) ;
276277 }
277278
278279 provideCompletionItems (
@@ -282,7 +283,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
282283 context : CompletionContext )
283284 : ProviderResult < CompletionItem [ ] | CompletionList < CompletionItem > > {
284285
285- return new Promise ( ( resolve , reject ) => {
286+ return new Promise ( ( resolve , reject ) => nextTick ( ( ) => {
286287 if ( token . isCancellationRequested ) {
287288 reject ( ) ;
288289 return ;
@@ -291,14 +292,14 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
291292 const selector = this . selectors . get ( document . uri . toString ( ) ) ;
292293
293294 if ( selector ) {
294- for ( const range of selector . classRanges ) {
295+ for ( const range of selector . rangesClass ) {
295296 if ( range . contains ( position ) ) {
296297 resolve ( [ ...selector . classes . values ( ) ] ) ;
297298 return ;
298299 }
299300 }
300301
301- for ( const range of selector . idRanges ) {
302+ for ( const range of selector . rangesId ) {
302303 if ( range . contains ( position ) ) {
303304 resolve ( [ ...selector . ids . values ( ) ] ) ;
304305 return ;
@@ -307,6 +308,6 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
307308 }
308309
309310 reject ( ) ;
310- } ) ;
311+ } ) ) ;
311312 }
312313}
0 commit comments