@@ -17,6 +17,11 @@ import {
1717 workspace
1818} from "vscode" ;
1919
20+ export type Completion = {
21+ ids : Map < string , CompletionItem > ,
22+ classes : Map < string , CompletionItem >
23+ } ;
24+
2025export class SelectorCompletionItemProvider implements CompletionItemProvider , Disposable {
2126
2227 readonly start = new Position ( 0 , 0 ) ;
@@ -186,7 +191,7 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
186191 }
187192 }
188193
189- async findAll ( document : TextDocument , tag : string ) : Promise < CompletionItem [ ] > {
194+ async findAll ( document : TextDocument ) : Promise < Completion > {
190195 const keys = new Set < string > ( ) ;
191196 const uri = document . uri ;
192197 const text = document . getText ( ) ;
@@ -197,16 +202,13 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
197202 await this . findDocumentLinks ( uri , keys , text ) ;
198203 await this . findExtendedStyles ( uri , keys , text ) ;
199204
200- const items = new Map < string , CompletionItem > ( ) ;
201- const kind = tag === "id" ? CompletionItemKind . Value : CompletionItemKind . Enum ;
205+ const ids = new Map < string , CompletionItem > ( ) ;
206+ const classes = new Map < string , CompletionItem > ( ) ;
202207
203- keys . forEach ( key => this . cache . get ( key ) ?. forEach ( v => {
204- if ( v . kind === kind ) {
205- items . set ( v . label , v ) ;
206- }
207- } ) ) ;
208+ keys . forEach ( key => this . cache . get ( key ) ?. forEach ( item =>
209+ ( item . kind === CompletionItemKind . Value ? ids : classes ) . set ( item . label , item ) ) ) ;
208210
209- return [ ... items . values ( ) ] ;
211+ return { ids , classes } ;
210212 }
211213
212214 provideCompletionItems (
@@ -221,7 +223,10 @@ export class SelectorCompletionItemProvider implements CompletionItemProvider, D
221223 const canComplete = this . canComplete . exec ( text ) ;
222224
223225 if ( canComplete ) {
224- this . findAll ( document , canComplete [ 1 ] ) . then ( resolve ) ;
226+ this . findAll ( document ) . then ( completion => resolve ( [
227+ ...( canComplete [ 1 ] === "id"
228+ ? completion . ids
229+ : completion . classes ) . values ( ) ] ) ) ;
225230 } else {
226231 reject ( ) ;
227232 }
0 commit comments