@@ -171,8 +171,11 @@ export function create(
171
171
172
172
const {
173
173
result : completionList ,
174
- components,
175
- propMap,
174
+ target,
175
+ info : {
176
+ components,
177
+ propMap,
178
+ } ,
176
179
} = await runWithVueData (
177
180
sourceScript . id ,
178
181
root ,
@@ -189,9 +192,30 @@ export function create(
189
192
return ;
190
193
}
191
194
192
- addDirectiveModifiers ( completionList , document ) ;
195
+ switch ( target ) {
196
+ case 'tag' : {
197
+ completionList . items . forEach ( transformTag ) ;
198
+ break ;
199
+ }
200
+ case 'attribute' : {
201
+ addDirectiveModifiers ( completionList , document ) ;
202
+ completionList . items . forEach ( transformAttribute ) ;
203
+ break ;
204
+ }
205
+ }
206
+
207
+ updateExtraCustomData ( [ ] ) ;
208
+ return completionList ;
209
+
210
+ function transformTag ( item : html . CompletionItem ) {
211
+ const tagName = capitalize ( camelize ( item . label ) ) ;
212
+ if ( components ?. includes ( tagName ) ) {
213
+ item . kind = 6 satisfies typeof CompletionItemKind . Variable ;
214
+ item . sortText = '\u0000' + ( item . sortText ?? item . label ) ;
215
+ }
216
+ }
193
217
194
- for ( const item of completionList . items ) {
218
+ function transformAttribute ( item : html . CompletionItem ) {
195
219
let prop = propMap . get ( item . label ) ;
196
220
197
221
if ( prop ) {
@@ -201,7 +225,6 @@ export function create(
201
225
value : prop . info . documentation ,
202
226
} ;
203
227
}
204
-
205
228
if ( prop . info ?. deprecated ) {
206
229
item . tags = [ 1 satisfies typeof CompletionItemTag . Deprecated ] ;
207
230
}
@@ -225,14 +248,7 @@ export function create(
225
248
226
249
const tokens : string [ ] = [ ] ;
227
250
228
- if (
229
- item . kind === 10 satisfies typeof CompletionItemKind . Property
230
- && components ?. includes ( hyphenateTag ( item . label ) )
231
- ) {
232
- item . kind = 6 satisfies typeof CompletionItemKind . Variable ;
233
- tokens . push ( '\u0000' ) ;
234
- }
235
- else if ( prop ) {
251
+ if ( prop ) {
236
252
const { isEvent, propName } = getPropName ( prop . name , prop . kind === 'event' ) ;
237
253
238
254
if ( prop . kind === 'prop' ) {
@@ -296,9 +312,6 @@ export function create(
296
312
297
313
item . sortText = tokens . join ( '' ) + ( item . sortText ?? item . label ) ;
298
314
}
299
-
300
- updateExtraCustomData ( [ ] ) ;
301
- return completionList ;
302
315
} ,
303
316
304
317
provideHover ( document , position , token ) {
@@ -324,10 +337,7 @@ export function create(
324
337
while ( lastSync . version !== ( lastSync = await sync ( ) ) . version ) {
325
338
result = await fn ( ) ;
326
339
}
327
- return {
328
- result,
329
- ...lastSync ,
330
- } ;
340
+ return { result, ...lastSync } ;
331
341
}
332
342
333
343
async function provideHtmlData ( sourceDocumentUri : URI , root : VueVirtualCode ) {
@@ -348,6 +358,7 @@ export function create(
348
358
}
349
359
350
360
let version = 0 ;
361
+ let target : 'tag' | 'attribute' | 'value' ;
351
362
let components : string [ ] | undefined ;
352
363
let values : string [ ] | undefined ;
353
364
@@ -371,12 +382,13 @@ export function create(
371
382
getId : ( ) => htmlDataProvider . getId ( ) ,
372
383
isApplicable : ( ) => true ,
373
384
provideTags ( ) {
374
- let tags = htmlDataProvider . provideTags ( ) ;
375
- tags = tags . filter ( tag => ! specialTags . has ( tag . name ) ) ;
376
- return tags ;
385
+ target = 'tag' ;
386
+ return htmlDataProvider . provideTags ( )
387
+ . filter ( tag => ! specialTags . has ( tag . name ) ) ;
377
388
} ,
378
389
provideAttributes ( tag ) {
379
- let attrs = htmlDataProvider . provideAttributes ( tag ) ;
390
+ target = 'attribute' ;
391
+ const attrs = htmlDataProvider . provideAttributes ( tag ) ;
380
392
if ( tag === 'slot' ) {
381
393
const nameAttr = attrs . find ( attr => attr . name === 'name' ) ;
382
394
if ( nameAttr ) {
@@ -386,6 +398,7 @@ export function create(
386
398
return attrs ;
387
399
} ,
388
400
provideValues ( tag , attr ) {
401
+ target = 'value' ;
389
402
return htmlDataProvider . provideValues ( tag , attr ) ;
390
403
} ,
391
404
} ,
@@ -619,7 +632,14 @@ export function create(
619
632
return {
620
633
async sync ( ) {
621
634
await Promise . all ( tasks ) ;
622
- return { version, components, propMap } ;
635
+ return {
636
+ version,
637
+ target,
638
+ info : {
639
+ components,
640
+ propMap,
641
+ } ,
642
+ } ;
623
643
} ,
624
644
} ;
625
645
}
0 commit comments