@@ -25,7 +25,7 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
2525 readonly cache = new Map < string , Map < string , CompletionItem > > ( ) ;
2626 readonly none = "__!NONE!__" ;
2727 readonly isRemote = / ^ h t t p s ? : \/ \/ / i;
28- readonly canComplete = / c l a s s \s * = \s * ( [ " ' ] ) (?: (? ! \1 ) .) * $ / si;
28+ 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
@@ -36,7 +36,9 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
3636 parseTextToItems ( text : string , items : Map < string , CompletionItem > ) {
3737 walk ( parse ( text ) , node => {
3838 if ( node . type === "ClassSelector" ) {
39- items . set ( node . name , new CompletionItem ( node . name , CompletionItemKind . EnumMember ) ) ;
39+ items . set ( node . name , new CompletionItem ( node . name , CompletionItemKind . Enum ) ) ;
40+ } else if ( node . type === "IdSelector" ) {
41+ items . set ( node . name , new CompletionItem ( node . name , CompletionItemKind . Value ) ) ;
4042 }
4143 } ) ;
4244 }
@@ -157,11 +159,16 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
157159 return items ;
158160 }
159161
160- buildItems ( items : Map < string , CompletionItem > , sets : Set < string > [ ] ) : CompletionItem [ ] {
162+ buildItems ( items : Map < string , CompletionItem > , sets : Set < string > [ ] , type : CompletionItemKind ) : CompletionItem [ ] {
161163 const keys = new Set < string > ( ) ;
162164
163165 sets . forEach ( v => v . forEach ( v => keys . add ( v ) ) ) ;
164- keys . forEach ( k => this . cache . get ( k ) ?. forEach ( ( v , k ) => items . set ( k , v ) ) ) ;
166+
167+ keys . forEach ( k => this . cache . get ( k ) ?. forEach ( ( v , k ) => {
168+ if ( type === v . kind ) {
169+ items . set ( k , v ) ;
170+ }
171+ } ) ) ;
165172
166173 return [ ...items . values ( ) ] ;
167174 }
@@ -178,16 +185,20 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
178185 } else {
179186 const range = new Range ( this . start , position ) ;
180187 const text = document . getText ( range ) ;
181- const canComplete = this . canComplete . test ( text ) ;
188+ const canComplete = this . canComplete . exec ( text ) ;
182189
183190 if ( canComplete ) {
191+ const type = canComplete [ 1 ] === "id"
192+ ? CompletionItemKind . Value
193+ : CompletionItemKind . Enum ;
194+
184195 const items = this . findDocumentStyles ( text ) ;
185196
186197 Promise . all ( [
187198 this . findLocalStyles ( ) ,
188199 this . findDocumentLinks ( text ) ,
189200 this . findRemoteStyles ( document . uri ) ,
190- ] ) . then ( keys => resolve ( this . buildItems ( items , keys ) ) ) ;
201+ ] ) . then ( keys => resolve ( this . buildItems ( items , keys , type ) ) ) ;
191202 } else {
192203 reject ( ) ;
193204 }
0 commit comments