diff --git a/docs/rules/no-invalid-v-on.md b/docs/rules/no-invalid-v-on.md index 38da1e6e6..640b111ee 100644 --- a/docs/rules/no-invalid-v-on.md +++ b/docs/rules/no-invalid-v-on.md @@ -8,7 +8,7 @@ This rule reports `v-on` directives if the following cases: - The directive does not have that event name. E.g. `
` - The directive has invalid modifiers. E.g. `
` -- The directive does not have that attribute value. E.g. `
` +- The directive does not have that attribute value and any verb modifiers. E.g. `
` This rule does not check syntax errors in directives because it's checked by [no-parsing-error] rule. @@ -31,7 +31,9 @@ This rule does not check syntax errors in directives because it's checked by [no
-
+
+
+
``` diff --git a/lib/rules/no-invalid-v-on.js b/lib/rules/no-invalid-v-on.js index 54ddc7b2c..ad397677c 100644 --- a/lib/rules/no-invalid-v-on.js +++ b/lib/rules/no-invalid-v-on.js @@ -20,6 +20,9 @@ const VALID_MODIFIERS = new Set([ 'native', 'once', 'left', 'right', 'middle', 'passive', 'esc', 'tab', 'enter', 'space', 'up', 'left', 'right', 'down', 'delete' ]) +const VERB_MODIFIERS = new Set([ + 'stop', 'prevent' +]) /** * Creates AST event handlers for no-invalid-v-on. @@ -47,11 +50,11 @@ function create (context) { }) } } - if (!utils.hasAttributeValue(node)) { + if (!utils.hasAttributeValue(node) && !node.key.modifiers.some(VERB_MODIFIERS.has, VERB_MODIFIERS)) { context.report({ node, loc: node.loc, - message: "'v-on' directives require that attribute value." + message: "'v-on' directives require that attribute value or verb modifiers." }) } } diff --git a/tests/lib/rules/no-invalid-v-on.js b/tests/lib/rules/no-invalid-v-on.js index 24cc67eec..820a9509e 100644 --- a/tests/lib/rules/no-invalid-v-on.js +++ b/tests/lib/rules/no-invalid-v-on.js @@ -42,6 +42,18 @@ tester.run('no-invalid-v-on', rule, { { filename: 'test.vue', code: '' + }, + { + filename: 'test.vue', + code: '' + }, + { + filename: 'test.vue', + code: '' + }, + { + filename: 'test.vue', + code: '' } ], invalid: [ @@ -58,7 +70,12 @@ tester.run('no-invalid-v-on', rule, { { filename: 'test.vue', code: '', - errors: ["'v-on' directives require that attribute value."] + errors: ["'v-on' directives require that attribute value or verb modifiers."] + }, + { + filename: 'test.vue', + code: '', + errors: ["'v-on' directives require that attribute value or verb modifiers."] } ] })