From 8c83ee6ea707488265622805242ff369428ca28c Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Thu, 8 Aug 2024 19:26:16 +0800 Subject: [PATCH 1/2] fix: completion documentations for binding attributes --- packages/language-service/lib/plugins/data.ts | 5 ++++- packages/language-service/lib/plugins/vue-template.ts | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/language-service/lib/plugins/data.ts b/packages/language-service/lib/plugins/data.ts index 06a63e33dd..d4f0ffce19 100644 --- a/packages/language-service/lib/plugins/data.ts +++ b/packages/language-service/lib/plugins/data.ts @@ -39,7 +39,10 @@ export function loadTemplateData(lang: string) { for (const attr of [...data.globalAttributes ?? []]) { if (!attr.name.startsWith('v-')) { - data.globalAttributes?.push({ ...attr, name: `:${attr.name}` }); + data.globalAttributes?.push( + { ...attr, name: `:${attr.name}` }, + { ...attr, name: `v-bind:${attr.name}` } + ); } } diff --git a/packages/language-service/lib/plugins/vue-template.ts b/packages/language-service/lib/plugins/vue-template.ts index 7d67146123..9e248c5458 100644 --- a/packages/language-service/lib/plugins/vue-template.ts +++ b/packages/language-service/lib/plugins/vue-template.ts @@ -729,6 +729,8 @@ export function create( } } + const originals = new Map(); + for (const item of completionList.items) { if (specialTags.has(item.label)) { @@ -755,7 +757,11 @@ export function create( const itemId = itemIdKey ? readInternalItemId(itemIdKey) : undefined; if (itemId) { - item.documentation = undefined; + const originalItem = originals.get(itemId.args[1]); + item.documentation = originalItem?.documentation; + } + else if (!originals.has(item.label)) { + originals.set(item.label, item); } if (item.kind === 10 satisfies typeof vscode.CompletionItemKind.Property && lastCompletionComponentNames.has(hyphenateTag(item.label))) { From c309d9ab6b58626471be2b04ed048d32fd8ea7c0 Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Fri, 9 Aug 2024 00:16:36 +0800 Subject: [PATCH 2/2] fix: handle event correctly --- packages/language-service/lib/plugins/vue-template.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/language-service/lib/plugins/vue-template.ts b/packages/language-service/lib/plugins/vue-template.ts index 9e248c5458..57a2c24125 100644 --- a/packages/language-service/lib/plugins/vue-template.ts +++ b/packages/language-service/lib/plugins/vue-template.ts @@ -757,8 +757,15 @@ export function create( const itemId = itemIdKey ? readInternalItemId(itemIdKey) : undefined; if (itemId) { - const originalItem = originals.get(itemId.args[1]); - item.documentation = originalItem?.documentation; + let label = hyphenate(itemId.args[1]); + if (label.startsWith('on-')) { + label = 'on' + label.slice('on-'.length); + } + else if (itemId.type === 'componentEvent') { + label = 'on' + label; + } + const original = originals.get(label); + item.documentation = original?.documentation; } else if (!originals.has(item.label)) { originals.set(item.label, item);