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,
});
}
}