diff --git a/packages/language-server/tests/completions.spec.ts b/packages/language-server/tests/completions.spec.ts index 78a7c61e34..9b685f04f3 100644 --- a/packages/language-server/tests/completions.spec.ts +++ b/packages/language-server/tests/completions.spec.ts @@ -615,6 +615,23 @@ test('Auto import', async () => { `); }); +test('Boolean props', async () => { + await requestCompletionItemToVueServer( + 'fixture.vue', + 'vue', + ` + + + + `, + ':foo', + ); +}); + test('Directives', async () => { await requestCompletionItemToVueServer('fixture.vue', 'vue', ``, 'v-html'); await requestCompletionItemToVueServer('fixture.vue', 'vue', ``, 'v-cloak'); @@ -622,7 +639,7 @@ test('Directives', async () => { await requestCompletionItemToVueServer('fixture.vue', 'vue', ``, 'v-pre'); }); -test('Directive Modifiers', async () => { +test('Directive modifiers', async () => { expect( (await requestCompletionListToVueServer( 'fixture.vue', diff --git a/packages/language-service/lib/plugins/vue-template.ts b/packages/language-service/lib/plugins/vue-template.ts index 7153e38bbd..0c0a81de2e 100644 --- a/packages/language-service/lib/plugins/vue-template.ts +++ b/packages/language-service/lib/plugins/vue-template.ts @@ -765,6 +765,8 @@ export function create( const name = attrNameCasing === AttrNameCasing.Camel ? prop.name : hyphenateAttr(prop.name); return name === labelName; }); + const isBoolean = propMeta2?.type === 'boolean' || propMeta2?.type.startsWith('boolean '); + if (addPlainAttrs) { attributes.push({ name: labelName, @@ -775,12 +777,14 @@ export function create( attributes.push({ name: V_BIND_SHORTHAND + labelName, description: propMeta2 && createDescription(propMeta2), + valueSet: isBoolean ? 'v' : undefined, }); } if (addVBinds) { attributes.push({ name: DIRECTIVE_V_BIND + labelName, description: propMeta2 && createDescription(propMeta2), + valueSet: isBoolean ? 'v' : undefined, }); } }