diff --git a/lib/rules/valid-v-bind-sync.js b/lib/rules/valid-v-bind-sync.js
index 9d24442ac..6b9225308 100644
--- a/lib/rules/valid-v-bind-sync.js
+++ b/lib/rules/valid-v-bind-sync.js
@@ -37,10 +37,7 @@ function isValidElement(node) {
* @returns {boolean} `true` if the node can be LHS.
*/
function isLhs(node) {
- return (
- Boolean(node) &&
- (node.type === 'Identifier' || node.type === 'MemberExpression')
- )
+ return node.type === 'Identifier' || node.type === 'MemberExpression'
}
// ------------------------------------------------------------------------------
@@ -85,30 +82,32 @@ module.exports = {
})
}
- if (node.value) {
- if (!isLhs(node.value.expression)) {
+ if (!node.value || !node.value.expression) {
+ return
+ }
+
+ if (!isLhs(node.value.expression)) {
+ context.report({
+ node,
+ loc: node.loc,
+ messageId: 'unexpectedNonLhsExpression'
+ })
+ }
+
+ for (const reference of node.value.references) {
+ const id = reference.id
+ if (id.parent.type !== 'VExpressionContainer') {
+ continue
+ }
+ const variable = reference.variable
+ if (variable) {
context.report({
node,
loc: node.loc,
- messageId: 'unexpectedNonLhsExpression'
+ messageId: 'unexpectedUpdateIterationVariable',
+ data: { varName: id.name }
})
}
-
- for (const reference of node.value.references) {
- const id = reference.id
- if (id.parent.type !== 'VExpressionContainer') {
- continue
- }
- const variable = reference.variable
- if (variable) {
- context.report({
- node,
- loc: node.loc,
- messageId: 'unexpectedUpdateIterationVariable',
- data: { varName: id.name }
- })
- }
- }
}
}
})
diff --git a/lib/rules/valid-v-bind.js b/lib/rules/valid-v-bind.js
index dfb1f97e2..7d88bad38 100644
--- a/lib/rules/valid-v-bind.js
+++ b/lib/rules/valid-v-bind.js
@@ -48,7 +48,7 @@ module.exports = {
}
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-else-if.js b/lib/rules/valid-v-else-if.js
index b68caa746..59252855b 100644
--- a/lib/rules/valid-v-else-if.js
+++ b/lib/rules/valid-v-else-if.js
@@ -70,7 +70,7 @@ module.exports = {
message: "'v-else-if' directives require no modifier."
})
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-else.js b/lib/rules/valid-v-else.js
index 3379fa326..2479f467e 100644
--- a/lib/rules/valid-v-else.js
+++ b/lib/rules/valid-v-else.js
@@ -70,7 +70,7 @@ module.exports = {
message: "'v-else' directives require no modifier."
})
}
- if (utils.hasAttributeValue(node)) {
+ if (node.value) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-for.js b/lib/rules/valid-v-for.js
index 681a5dcf1..443afc2d0 100644
--- a/lib/rules/valid-v-for.js
+++ b/lib/rules/valid-v-for.js
@@ -137,7 +137,7 @@ module.exports = {
message: "'v-for' directives require no modifier."
})
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-html.js b/lib/rules/valid-v-html.js
index 1bc1fcb2b..575939a2a 100644
--- a/lib/rules/valid-v-html.js
+++ b/lib/rules/valid-v-html.js
@@ -44,7 +44,7 @@ module.exports = {
message: "'v-html' directives require no modifier."
})
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-if.js b/lib/rules/valid-v-if.js
index 6c24cabc9..c07ae2c81 100644
--- a/lib/rules/valid-v-if.js
+++ b/lib/rules/valid-v-if.js
@@ -62,7 +62,7 @@ module.exports = {
message: "'v-if' directives require no modifier."
})
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-model.js b/lib/rules/valid-v-model.js
index 7dc22a4d7..0c7431c05 100644
--- a/lib/rules/valid-v-model.js
+++ b/lib/rules/valid-v-model.js
@@ -42,10 +42,7 @@ function isValidElement(node) {
* @returns {boolean} `true` if the node can be LHS.
*/
function isLhs(node) {
- return (
- node != null &&
- (node.type === 'Identifier' || node.type === 'MemberExpression')
- )
+ return node.type === 'Identifier' || node.type === 'MemberExpression'
}
/**
@@ -133,40 +130,43 @@ module.exports = {
}
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
message: "'v-model' directives require that attribute value."
})
+ return
+ }
+ if (!node.value.expression) {
+ // Parsing error
+ return
}
- if (node.value) {
- if (!isLhs(node.value.expression)) {
+ if (!isLhs(node.value.expression)) {
+ context.report({
+ node,
+ loc: node.loc,
+ message:
+ "'v-model' directives require the attribute value which is valid as LHS."
+ })
+ }
+
+ for (const reference of node.value.references) {
+ const id = reference.id
+ if (id.parent.type !== 'VExpressionContainer') {
+ continue
+ }
+
+ const variable = getVariable(id.name, element)
+ if (variable != null) {
context.report({
node,
loc: node.loc,
message:
- "'v-model' directives require the attribute value which is valid as LHS."
+ "'v-model' directives cannot update the iteration variable '{{varName}}' itself.",
+ data: { varName: id.name }
})
}
-
- for (const reference of node.value.references) {
- const id = reference.id
- if (id.parent.type !== 'VExpressionContainer') {
- continue
- }
-
- const variable = getVariable(id.name, element)
- if (variable != null) {
- context.report({
- node,
- loc: node.loc,
- message:
- "'v-model' directives cannot update the iteration variable '{{varName}}' itself.",
- data: { varName: id.name }
- })
- }
- }
}
}
})
diff --git a/lib/rules/valid-v-on.js b/lib/rules/valid-v-on.js
index 4e014e00c..bcdb76db0 100644
--- a/lib/rules/valid-v-on.js
+++ b/lib/rules/valid-v-on.js
@@ -108,20 +108,30 @@ module.exports = {
}
if (
- !utils.hasAttributeValue(node) &&
+ (!node.value || !node.value.expression) &&
!node.key.modifiers.some((modifier) =>
VERB_MODIFIERS.has(modifier.name)
)
) {
- if (node.value && sourceCode.getText(node.value.expression)) {
- const value = sourceCode.getText(node.value)
- context.report({
- node,
- loc: node.loc,
- message:
- 'Avoid using JavaScript keyword as "v-on" value: {{value}}.',
- data: { value }
- })
+ if (node.value && !utils.isEmptyValueDirective(node, context)) {
+ const valueText = sourceCode.getText(node.value)
+ let innerText = valueText
+ if (
+ (valueText[0] === '"' || valueText[0] === "'") &&
+ valueText[0] === valueText[valueText.length - 1]
+ ) {
+ // quoted
+ innerText = valueText.slice(1, -1)
+ }
+ if (/^\w+$/.test(innerText)) {
+ context.report({
+ node,
+ loc: node.loc,
+ message:
+ 'Avoid using JavaScript keyword as "v-on" value: {{value}}.',
+ data: { value: valueText }
+ })
+ }
} else {
context.report({
node,
diff --git a/lib/rules/valid-v-show.js b/lib/rules/valid-v-show.js
index 51e4014fd..71553722c 100644
--- a/lib/rules/valid-v-show.js
+++ b/lib/rules/valid-v-show.js
@@ -44,7 +44,7 @@ module.exports = {
message: "'v-show' directives require no modifier."
})
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/rules/valid-v-slot.js b/lib/rules/valid-v-slot.js
index 79b052269..118dc8463 100644
--- a/lib/rules/valid-v-slot.js
+++ b/lib/rules/valid-v-slot.js
@@ -264,7 +264,9 @@ module.exports = {
if (
ownerElement === element &&
isDefaultSlot &&
- !utils.hasAttributeValue(node)
+ (!node.value ||
+ utils.isEmptyValueDirective(node, context) ||
+ utils.isEmptyExpressionValueDirective(node, context))
) {
context.report({
node,
diff --git a/lib/rules/valid-v-text.js b/lib/rules/valid-v-text.js
index 2e1881ce3..f0a3f09fa 100644
--- a/lib/rules/valid-v-text.js
+++ b/lib/rules/valid-v-text.js
@@ -44,7 +44,7 @@ module.exports = {
message: "'v-text' directives require no modifier."
})
}
- if (!utils.hasAttributeValue(node)) {
+ if (!node.value || utils.isEmptyValueDirective(node, context)) {
context.report({
node,
loc: node.loc,
diff --git a/lib/utils/index.js b/lib/utils/index.js
index 43c919f88..b61b52926 100644
--- a/lib/utils/index.js
+++ b/lib/utils/index.js
@@ -290,16 +290,73 @@ module.exports = {
},
/**
- * Check whether the given attribute has their attribute value.
- * @param {ASTNode} node The attribute node to check.
- * @returns {boolean} `true` if the attribute has their value.
+ * Check whether the given directive attribute has their empty value (`=""`).
+ * @param {ASTNode} node The directive attribute node to check.
+ * @param {RuleContext} context The rule context to use parser services.
+ * @returns {boolean} `true` if the directive attribute has their empty value (`=""`).
*/
- hasAttributeValue (node) {
+ isEmptyValueDirective (node, context) {
assert(node && node.type === 'VAttribute')
- return (
- node.value != null &&
- (node.value.expression != null || node.value.syntaxError != null)
- )
+ if (node.value == null) {
+ return false
+ }
+ if (node.value.expression != null) {
+ return false
+ }
+
+ let valueText = context.getSourceCode().getText(node.value)
+ if ((valueText[0] === '"' || valueText[0] === "'") && valueText[0] === valueText[valueText.length - 1]) {
+ // quoted
+ valueText = valueText.slice(1, -1)
+ }
+ if (!valueText) {
+ // empty
+ return true
+ }
+ return false
+ },
+
+ /**
+ * Check whether the given directive attribute has their empty expression value (e.g. `=" "`, `="/* */"`).
+ * @param {ASTNode} node The directive attribute node to check.
+ * @param {RuleContext} context The rule context to use parser services.
+ * @returns {boolean} `true` if the directive attribute has their empty expression value.
+ */
+ isEmptyExpressionValueDirective (node, context) {
+ assert(node && node.type === 'VAttribute')
+ if (node.value == null) {
+ return false
+ }
+ if (node.value.expression != null) {
+ return false
+ }
+
+ const valueNode = node.value
+ const tokenStore = context.parserServices.getTemplateBodyTokenStore()
+ let quote1 = null
+ let quote2 = null
+ // `node.value` may be only comments, so cannot get the correct tokens with `tokenStore.getTokens(node.value)`.
+ for (const token of tokenStore.getTokens(node)) {
+ if (token.range[1] <= valueNode.range[0]) {
+ continue
+ }
+ if (valueNode.range[1] <= token.range[0]) {
+ // empty
+ return true
+ }
+ if (!quote1 && token.type === 'Punctuator' && (token.value === '"' || token.value === "'")) {
+ quote1 = token
+ continue
+ }
+ if (!quote2 && quote1 && token.type === 'Punctuator' && (token.value === quote1.value)) {
+ quote2 = token
+ continue
+ }
+ // not empty
+ return false
+ }
+ // empty
+ return true
},
/**
diff --git a/tests/lib/rules/valid-v-bind-sync.js b/tests/lib/rules/valid-v-bind-sync.js
index 385f5d991..ea8bdf333 100644
--- a/tests/lib/rules/valid-v-bind-sync.js
+++ b/tests/lib/rules/valid-v-bind-sync.js
@@ -130,6 +130,21 @@ tester.run('valid-v-bind-sync', rule, {
{
filename: 'test.vue',
code: ''
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
+ },
+ // empty value (valid-v-bind)
+ {
+ filename: 'empty-value.vue',
+ code: ''
}
],
invalid: [
diff --git a/tests/lib/rules/valid-v-bind.js b/tests/lib/rules/valid-v-bind.js
index d98ff34d7..b5e71af7c 100644
--- a/tests/lib/rules/valid-v-bind.js
+++ b/tests/lib/rules/valid-v-bind.js
@@ -74,6 +74,16 @@ tester.run('valid-v-bind', rule, {
{
filename: 'test.vue',
code: ""
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
}
],
invalid: [
@@ -91,6 +101,12 @@ tester.run('valid-v-bind', rule, {
filename: 'test.vue',
code: "",
errors: ["'v-bind' directives don't support the modifier 'unknown'."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-bind' directives require an attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-cloak.js b/tests/lib/rules/valid-v-cloak.js
index 8a8a0acad..abecacba4 100644
--- a/tests/lib/rules/valid-v-cloak.js
+++ b/tests/lib/rules/valid-v-cloak.js
@@ -47,6 +47,24 @@ tester.run('valid-v-cloak', rule, {
filename: 'test.vue',
code: '',
errors: ["'v-cloak' directives require no attribute value."]
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: '',
+ errors: ["'v-cloak' directives require no attribute value."]
+ },
+ // comment value
+ {
+ filename: 'comment-value.vue',
+ code: '',
+ errors: ["'v-cloak' directives require no attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-cloak' directives require no attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-else-if.js b/tests/lib/rules/valid-v-else-if.js
index 778d07339..e9f05d1e2 100644
--- a/tests/lib/rules/valid-v-else-if.js
+++ b/tests/lib/rules/valid-v-else-if.js
@@ -40,6 +40,18 @@ tester.run('valid-v-else-if', rule, {
{
filename: 'test.vue',
code: `\n \n \n \n`
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code:
+ ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code:
+ ''
}
],
invalid: [
@@ -122,6 +134,13 @@ tester.run('valid-v-else-if', rule, {
code:
'',
errors: ["'v-else-if' directives require that attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code:
+ '',
+ errors: ["'v-else-if' directives require that attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-else.js b/tests/lib/rules/valid-v-else.js
index 1e235f9b5..31b067861 100644
--- a/tests/lib/rules/valid-v-else.js
+++ b/tests/lib/rules/valid-v-else.js
@@ -120,6 +120,25 @@ tester.run('valid-v-else', rule, {
code:
'',
errors: ["'v-else' directives require no attribute value."]
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: '',
+ errors: ["'v-else' directives require no attribute value."]
+ },
+ // comment value
+ {
+ filename: 'comment-value.vue',
+ code:
+ '',
+ errors: ["'v-else' directives require no attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-else' directives require no attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-for.js b/tests/lib/rules/valid-v-for.js
index 74a1ea614..94fa43467 100644
--- a/tests/lib/rules/valid-v-for.js
+++ b/tests/lib/rules/valid-v-for.js
@@ -127,6 +127,21 @@ tester.run('valid-v-for', rule, {
`
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ {
+ filename: 'test.vue',
+ code:
+ ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
}
],
invalid: [
@@ -245,12 +260,6 @@ tester.run('valid-v-for', rule, {
'
',
errors: ["Custom elements in iteration require 'v-bind:key' directives."]
},
- {
- filename: 'test.vue',
- code:
- '',
- errors: ["'v-for' directives require that attribute value."]
- },
{
filename: 'test.vue',
code:
@@ -309,6 +318,12 @@ tester.run('valid-v-for', rule, {
`
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-for' directives require that attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-html.js b/tests/lib/rules/valid-v-html.js
index 9a30bcf48..afb312f74 100644
--- a/tests/lib/rules/valid-v-html.js
+++ b/tests/lib/rules/valid-v-html.js
@@ -30,6 +30,16 @@ tester.run('valid-v-html', rule, {
{
filename: 'test.vue',
code: ''
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
}
],
invalid: [
@@ -47,6 +57,12 @@ tester.run('valid-v-html', rule, {
filename: 'test.vue',
code: '',
errors: ["'v-html' directives require that attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-html' directives require that attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-if.js b/tests/lib/rules/valid-v-if.js
index effe04836..d3afe5780 100644
--- a/tests/lib/rules/valid-v-if.js
+++ b/tests/lib/rules/valid-v-if.js
@@ -30,6 +30,16 @@ tester.run('valid-v-if', rule, {
{
filename: 'test.vue',
code: ''
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
}
],
invalid: [
@@ -62,6 +72,12 @@ tester.run('valid-v-if', rule, {
filename: 'test.vue',
code: '',
errors: ["'v-if' directives require that attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-if' directives require that attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-model.js b/tests/lib/rules/valid-v-model.js
index c9c28585a..9e78ef47a 100644
--- a/tests/lib/rules/valid-v-model.js
+++ b/tests/lib/rules/valid-v-model.js
@@ -150,6 +150,16 @@ tester.run('valid-v-model', rule, {
filename: 'test.vue',
code:
''
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
}
],
invalid: [
@@ -216,6 +226,12 @@ tester.run('valid-v-model', rule, {
errors: [
"'v-model' directives cannot update the iteration variable 'e' itself."
]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-model' directives require that attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-on.js b/tests/lib/rules/valid-v-on.js
index 911039ea5..6f162e1df 100644
--- a/tests/lib/rules/valid-v-on.js
+++ b/tests/lib/rules/valid-v-on.js
@@ -96,6 +96,33 @@ tester.run('valid-v-on', rule, {
filename: 'test.vue',
code: '',
options: [{ modifiers: ['bar', 'aaa'] }]
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (valid)
+ {
+ filename: 'comment-value.vue',
+ code: ''
+ },
+ {
+ filename: 'comment-value.vue',
+ code: ''
+ },
+ {
+ filename: 'comment-value.vue',
+ code: ''
+ },
+ {
+ filename: 'comment-value.vue',
+ code: ''
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: ''
}
],
invalid: [
@@ -139,6 +166,14 @@ tester.run('valid-v-on', rule, {
filename: 'test.vue',
code: '',
errors: ['Avoid using JavaScript keyword as "v-on" value: "delete".']
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: [
+ "'v-on' directives require a value or verb modifier (like 'stop' or 'prevent')."
+ ]
}
]
})
diff --git a/tests/lib/rules/valid-v-once.js b/tests/lib/rules/valid-v-once.js
index 0c6a71a20..c9f3750c3 100644
--- a/tests/lib/rules/valid-v-once.js
+++ b/tests/lib/rules/valid-v-once.js
@@ -47,6 +47,24 @@ tester.run('valid-v-once', rule, {
filename: 'test.vue',
code: '',
errors: ["'v-once' directives require no attribute value."]
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: '',
+ errors: ["'v-once' directives require no attribute value."]
+ },
+ // comment value
+ {
+ filename: 'comment-value.vue',
+ code: '',
+ errors: ["'v-once' directives require no attribute value."]
+ },
+ // empty value
+ {
+ filename: 'comment-value.vue',
+ code: '',
+ errors: ["'v-once' directives require no attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-pre.js b/tests/lib/rules/valid-v-pre.js
index ae9d38e6f..3d9c9d883 100644
--- a/tests/lib/rules/valid-v-pre.js
+++ b/tests/lib/rules/valid-v-pre.js
@@ -47,6 +47,24 @@ tester.run('valid-v-pre', rule, {
filename: 'test.vue',
code: '',
errors: ["'v-pre' directives require no attribute value."]
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: '',
+ errors: ["'v-pre' directives require no attribute value."]
+ },
+ // comment value
+ {
+ filename: 'comment-value.vue',
+ code: '',
+ errors: ["'v-pre' directives require no attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-pre' directives require no attribute value."]
}
]
})
diff --git a/tests/lib/rules/valid-v-show.js b/tests/lib/rules/valid-v-show.js
index 0471ccd9f..4220e8749 100644
--- a/tests/lib/rules/valid-v-show.js
+++ b/tests/lib/rules/valid-v-show.js
@@ -30,6 +30,16 @@ tester.run('valid-v-show', rule, {
{
filename: 'test.vue',
code: ''
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'comment-value.vue',
+ code: ''
}
],
invalid: [
@@ -48,8 +58,9 @@ tester.run('valid-v-show', rule, {
code: '',
errors: ["'v-show' directives require that attribute value."]
},
+ // empty value
{
- filename: 'test.vue',
+ filename: 'empty-value.vue',
code: '',
errors: ["'v-show' directives require that attribute value."]
}
diff --git a/tests/lib/rules/valid-v-slot.js b/tests/lib/rules/valid-v-slot.js
index ab8307fed..0043756f1 100644
--- a/tests/lib/rules/valid-v-slot.js
+++ b/tests/lib/rules/valid-v-slot.js
@@ -83,7 +83,13 @@ tester.run('valid-v-slot', rule, {
{{value}}
- `
+ `,
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code:
+ ''
+ }
],
invalid: [
// Verify location.
@@ -294,6 +300,26 @@ tester.run('valid-v-slot', rule, {
`,
errors: [{ messageId: 'requireAttributeValue' }]
+ },
+ // comment value
+ {
+ filename: 'comment-value1.vue',
+ code:
+ '',
+ errors: [{ messageId: 'requireAttributeValue' }]
+ },
+ {
+ filename: 'comment-value2.vue',
+ code:
+ '',
+ errors: [{ messageId: 'requireAttributeValue' }]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code:
+ '',
+ errors: [{ messageId: 'requireAttributeValue' }]
}
]
})
diff --git a/tests/lib/rules/valid-v-text.js b/tests/lib/rules/valid-v-text.js
index 3956462ce..611b1a31a 100644
--- a/tests/lib/rules/valid-v-text.js
+++ b/tests/lib/rules/valid-v-text.js
@@ -34,6 +34,16 @@ tester.run('valid-v-text', rule, {
{
filename: 'test.vue',
code: ''
+ },
+ // parsing error
+ {
+ filename: 'parsing-error.vue',
+ code: ''
+ },
+ // comment value (parsing error)
+ {
+ filename: 'parsing-error.vue',
+ code: ''
}
],
invalid: [
@@ -51,6 +61,12 @@ tester.run('valid-v-text', rule, {
filename: 'test.vue',
code: '',
errors: ["'v-text' directives require that attribute value."]
+ },
+ // empty value
+ {
+ filename: 'empty-value.vue',
+ code: '',
+ errors: ["'v-text' directives require that attribute value."]
}
]
})