From 6b5f5d6ca3cf1423d40c86af466b37ee80ed229f Mon Sep 17 00:00:00 2001 From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com> Date: Thu, 25 Mar 2021 22:40:02 +0300 Subject: [PATCH 01/17] added no-invalid-model-keys rule --- lib/rules/no-invalid-model-keys.js | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 lib/rules/no-invalid-model-keys.js diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js new file mode 100644 index 000000000..85681039b --- /dev/null +++ b/lib/rules/no-invalid-model-keys.js @@ -0,0 +1,56 @@ +/** + * @fileoverview Requires valid keys in model property. + * @author Alex Sokolov + */ +'use strict' + +const utils = require('../utils') + +/** + * @typedef {import('../utils').GroupName} GroupName + */ + +// ------------------------------------------------------------------------------ +// Rule Definition +// ------------------------------------------------------------------------------ +/** @type {GroupName[]} */ +const GROUP_NAMES = ['model'] + +const VALID_MODEL_KEYS = ['prop', 'event'] + +module.exports = { + meta: { + type: 'problem', + docs: { + description: 'require valid keys in model prop', + categories: ['vue3-recommended', 'recommended'], + url: 'https://eslint.vuejs.org/rules/no-invalid-model-keys.html' + }, + fixable: null, + schema: [] + }, + /** @param {RuleContext} context */ + create(context) { + const groups = new Set(GROUP_NAMES) + + // ---------------------------------------------------------------------- + // Public + // ---------------------------------------------------------------------- + + return utils.executeOnVue(context, (obj) => { + const properties = utils.iterateProperties(obj, groups) + + for (const o of properties) { + if (VALID_MODEL_KEYS.indexOf(o.name) === -1) { + context.report({ + node: o.node, + message: "Invalid key '{{name}}' in model prop.", + data: { + name: o.name + } + }) + } + } + }) + } +} From 22a2db6b75ba941f0acc2e020e48a6cf153764b1 Mon Sep 17 00:00:00 2001 From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com> Date: Thu, 25 Mar 2021 22:40:17 +0300 Subject: [PATCH 02/17] added no-invalid-model-keys to rules list --- lib/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/index.js b/lib/index.js index cc18e3055..a5f632314 100644 --- a/lib/index.js +++ b/lib/index.js @@ -81,6 +81,7 @@ module.exports = { 'no-empty-component-block': require('./rules/no-empty-component-block'), 'no-empty-pattern': require('./rules/no-empty-pattern'), 'no-extra-parens': require('./rules/no-extra-parens'), + 'no-invalid-model-keys': require('./rules/no-invalid-model-keys'), 'no-irregular-whitespace': require('./rules/no-irregular-whitespace'), 'no-lifecycle-after-await': require('./rules/no-lifecycle-after-await'), 'no-lone-template': require('./rules/no-lone-template'), From 23b2b4e0c4137830f4683f195dccd66663f1717a Mon Sep 17 00:00:00 2001 From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com> Date: Thu, 25 Mar 2021 22:40:22 +0300 Subject: [PATCH 03/17] added no-invalid-model-keys tests --- tests/lib/rules/no-invalid-model-keys.js | 156 +++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 tests/lib/rules/no-invalid-model-keys.js diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js new file mode 100644 index 000000000..237329df8 --- /dev/null +++ b/tests/lib/rules/no-invalid-model-keys.js @@ -0,0 +1,156 @@ +/** + * @fileoverview Prevents invalid keys in model property. + * @author Alex Sokolov + */ +'use strict' + +// ------------------------------------------------------------------------------ +// Requirements +// ------------------------------------------------------------------------------ + +const rule = require('../../../lib/rules/no-invalid-model-keys') +const RuleTester = require('eslint').RuleTester + +// ------------------------------------------------------------------------------ +// Tests +// ------------------------------------------------------------------------------ + +const ruleTester = new RuleTester({ + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module' + } +}) +ruleTester.run('no-invalid-model-keys', rule, { + valid: [ + { + filename: 'test.vue', + code: ` + export default { + model: { + prop: 'list' + } + } + ` + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + event: 'update' + } + } + ` + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + prop: 'list', + event: 'update' + } + } + ` + } + ], + + invalid: [ + { + filename: 'test.vue', + code: ` + export default { + model: { + props: 'list' + } + } + `, + errors: ["Invalid key 'props' in model prop."] + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + events: 'update' + } + } + `, + errors: ["Invalid key 'events' in model prop."] + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + props: 'list', + event: 'update' + } + } + `, + errors: ["Invalid key 'props' in model prop."] + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + prop: 'list', + events: 'update' + } + } + `, + errors: ["Invalid key 'events' in model prop."] + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + props: 'list', + events: 'update' + } + } + `, + errors: [ + "Invalid key 'props' in model prop.", + "Invalid key 'events' in model prop." + ] + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + prop: 'checked', + props: 'list', + event: 'update' + }, + data () { + return { + dat: null + } + } + } + `, + errors: ["Invalid key 'props' in model prop."] + }, + { + filename: 'test.vue', + code: ` + export default { + model: { + name: 'checked', + props: 'list', + event: 'update' + } + } + `, + errors: [ + "Invalid key 'name' in model prop.", + "Invalid key 'props' in model prop." + ] + } + ] +}) From 20b117d28a2295a52c4b8d08888cdb99ff2d9d19 Mon Sep 17 00:00:00 2001 From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com> Date: Thu, 25 Mar 2021 22:50:58 +0300 Subject: [PATCH 04/17] removed unused --- tests/lib/rules/no-invalid-model-keys.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js index 237329df8..25ba4d94c 100644 --- a/tests/lib/rules/no-invalid-model-keys.js +++ b/tests/lib/rules/no-invalid-model-keys.js @@ -126,11 +126,6 @@ ruleTester.run('no-invalid-model-keys', rule, { prop: 'checked', props: 'list', event: 'update' - }, - data () { - return { - dat: null - } } } `, From a1bb186f245be2af4ed3d26afba74181573c9506 Mon Sep 17 00:00:00 2001 From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com> Date: Thu, 25 Mar 2021 22:51:09 +0300 Subject: [PATCH 05/17] added docs for no-invalid-model-keys --- docs/rules/no-invalid-model-keys.md | 108 ++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 docs/rules/no-invalid-model-keys.md diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md new file mode 100644 index 000000000..ff39896da --- /dev/null +++ b/docs/rules/no-invalid-model-keys.md @@ -0,0 +1,108 @@ +--- +pageClass: rule-details +sidebarDepth: 0 +title: vue/no-invalid-model-keys +description: require valid keys in model prop +since: v3.9.0 +--- +# vue/no-invalid-model-keys + +> require valid keys in model prop + +- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `"plugin:vue/essential"`, `"plugin:vue/vue3-strongly-recommended"`, `"plugin:vue/strongly-recommended"`, `"plugin:vue/vue3-recommended"` and `"plugin:vue/recommended"`. + +## :book: Rule Details + +This rule is aimed at preventing invalid keys in model property. + + +```vue + +``` + + + +```vue + +``` + + + +```vue + +``` + + + +```vue + +``` + + + +```vue + +``` + + + +```vue + +``` + + +## :rocket: Version + +This rule was introduced in eslint-plugin-vue v7.9.0 + +## :mag: Implementation + +- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-invalid-model-keys.js) +- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-invalid-model-keys.js) From 694308416fa6e09b8c1f51f01229bdd43d06617b Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:41:40 +0300 Subject: [PATCH 06/17] Update docs/rules/no-invalid-model-keys.md Co-authored-by: Yosuke Ota --- docs/rules/no-invalid-model-keys.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md index ff39896da..be03625df 100644 --- a/docs/rules/no-invalid-model-keys.md +++ b/docs/rules/no-invalid-model-keys.md @@ -3,7 +3,6 @@ pageClass: rule-details sidebarDepth: 0 title: vue/no-invalid-model-keys description: require valid keys in model prop -since: v3.9.0 --- # vue/no-invalid-model-keys From 0d9b002dbecb3f5cad7fb2626f9937c1d640f62a Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:41:52 +0300 Subject: [PATCH 07/17] Update docs/rules/no-invalid-model-keys.md Co-authored-by: Yosuke Ota --- docs/rules/no-invalid-model-keys.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md index be03625df..023d2c06a 100644 --- a/docs/rules/no-invalid-model-keys.md +++ b/docs/rules/no-invalid-model-keys.md @@ -8,7 +8,6 @@ description: require valid keys in model prop > require valid keys in model prop -- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `"plugin:vue/essential"`, `"plugin:vue/vue3-strongly-recommended"`, `"plugin:vue/strongly-recommended"`, `"plugin:vue/vue3-recommended"` and `"plugin:vue/recommended"`. ## :book: Rule Details From ad8ed87e57401e85972629a08a325b1cce981aa8 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:41:57 +0300 Subject: [PATCH 08/17] Update docs/rules/no-invalid-model-keys.md Co-authored-by: Yosuke Ota --- docs/rules/no-invalid-model-keys.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md index 023d2c06a..c2cc55bbf 100644 --- a/docs/rules/no-invalid-model-keys.md +++ b/docs/rules/no-invalid-model-keys.md @@ -6,7 +6,7 @@ description: require valid keys in model prop --- # vue/no-invalid-model-keys -> require valid keys in model prop +> require valid keys in model option ## :book: Rule Details From 6af82fdc6d6a28738692ccfd4139699049738b6a Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:42:04 +0300 Subject: [PATCH 09/17] Update docs/rules/no-invalid-model-keys.md Co-authored-by: Yosuke Ota --- docs/rules/no-invalid-model-keys.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md index c2cc55bbf..269d3af33 100644 --- a/docs/rules/no-invalid-model-keys.md +++ b/docs/rules/no-invalid-model-keys.md @@ -11,7 +11,7 @@ description: require valid keys in model prop ## :book: Rule Details -This rule is aimed at preventing invalid keys in model property. +This rule is aimed at preventing invalid keys in model option. ```vue From 518b26a21a1b8c51d8e9afd9b5f475f25bbf6536 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:42:09 +0300 Subject: [PATCH 10/17] Update lib/rules/no-invalid-model-keys.js Co-authored-by: Yosuke Ota --- lib/rules/no-invalid-model-keys.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js index 85681039b..9bd60cce0 100644 --- a/lib/rules/no-invalid-model-keys.js +++ b/lib/rules/no-invalid-model-keys.js @@ -22,7 +22,7 @@ module.exports = { meta: { type: 'problem', docs: { - description: 'require valid keys in model prop', + description: 'require valid keys in model option', categories: ['vue3-recommended', 'recommended'], url: 'https://eslint.vuejs.org/rules/no-invalid-model-keys.html' }, From b52f4ac2f55aaf4ac45d3bb41e52e1c60db78dcd Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:42:15 +0300 Subject: [PATCH 11/17] Update lib/rules/no-invalid-model-keys.js Co-authored-by: Yosuke Ota --- lib/rules/no-invalid-model-keys.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js index 9bd60cce0..51e0d72f1 100644 --- a/lib/rules/no-invalid-model-keys.js +++ b/lib/rules/no-invalid-model-keys.js @@ -23,7 +23,7 @@ module.exports = { type: 'problem', docs: { description: 'require valid keys in model option', - categories: ['vue3-recommended', 'recommended'], + categories: undefined, url: 'https://eslint.vuejs.org/rules/no-invalid-model-keys.html' }, fixable: null, From 358f9d24c8546226aab110dd895c0052d2ef275d Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:42:22 +0300 Subject: [PATCH 12/17] Update docs/rules/no-invalid-model-keys.md Co-authored-by: Yosuke Ota --- docs/rules/no-invalid-model-keys.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md index 269d3af33..559b3f4bb 100644 --- a/docs/rules/no-invalid-model-keys.md +++ b/docs/rules/no-invalid-model-keys.md @@ -96,9 +96,6 @@ export default { ``` -## :rocket: Version - -This rule was introduced in eslint-plugin-vue v7.9.0 ## :mag: Implementation From d3e55c606dade216de20a82065651f1d422c32d9 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:50:28 +0300 Subject: [PATCH 13/17] Update no-invalid-model-keys.md --- docs/rules/no-invalid-model-keys.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md index 559b3f4bb..b69cbf952 100644 --- a/docs/rules/no-invalid-model-keys.md +++ b/docs/rules/no-invalid-model-keys.md @@ -2,7 +2,7 @@ pageClass: rule-details sidebarDepth: 0 title: vue/no-invalid-model-keys -description: require valid keys in model prop +description: require valid keys in model option --- # vue/no-invalid-model-keys From 15f84f9bcd4535a7a46fbadd4e2b282b423c0001 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:51:35 +0300 Subject: [PATCH 14/17] Update no-invalid-model-keys.js --- lib/rules/no-invalid-model-keys.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js index 51e0d72f1..376da9094 100644 --- a/lib/rules/no-invalid-model-keys.js +++ b/lib/rules/no-invalid-model-keys.js @@ -1,5 +1,5 @@ /** - * @fileoverview Requires valid keys in model property. + * @fileoverview Requires valid keys in model option. * @author Alex Sokolov */ 'use strict' From cf209ed2fa61eaf4dfdfdcbcb2dc74b2d5ea14f1 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:52:02 +0300 Subject: [PATCH 15/17] Update no-invalid-model-keys.js --- lib/rules/no-invalid-model-keys.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js index 376da9094..3a4b7ccf6 100644 --- a/lib/rules/no-invalid-model-keys.js +++ b/lib/rules/no-invalid-model-keys.js @@ -44,7 +44,7 @@ module.exports = { if (VALID_MODEL_KEYS.indexOf(o.name) === -1) { context.report({ node: o.node, - message: "Invalid key '{{name}}' in model prop.", + message: "Invalid key '{{name}}' in model option.", data: { name: o.name } From 2105efdd20734a2c363420719da9a5a35b76d605 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:52:42 +0300 Subject: [PATCH 16/17] Update no-invalid-model-keys.js --- tests/lib/rules/no-invalid-model-keys.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js index 25ba4d94c..78d017002 100644 --- a/tests/lib/rules/no-invalid-model-keys.js +++ b/tests/lib/rules/no-invalid-model-keys.js @@ -1,5 +1,5 @@ /** - * @fileoverview Prevents invalid keys in model property. + * @fileoverview Prevents invalid keys in model option. * @author Alex Sokolov */ 'use strict' From 6b4cdfe6ba74b36f22f9bc7bf458ab19c1f3e93d Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Wed, 31 Mar 2021 10:53:21 +0300 Subject: [PATCH 17/17] Update no-invalid-model-keys.js --- tests/lib/rules/no-invalid-model-keys.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js index 78d017002..ebe4de973 100644 --- a/tests/lib/rules/no-invalid-model-keys.js +++ b/tests/lib/rules/no-invalid-model-keys.js @@ -66,7 +66,7 @@ ruleTester.run('no-invalid-model-keys', rule, { } } `, - errors: ["Invalid key 'props' in model prop."] + errors: ["Invalid key 'props' in model option."] }, { filename: 'test.vue', @@ -77,7 +77,7 @@ ruleTester.run('no-invalid-model-keys', rule, { } } `, - errors: ["Invalid key 'events' in model prop."] + errors: ["Invalid key 'events' in model option."] }, { filename: 'test.vue', @@ -89,7 +89,7 @@ ruleTester.run('no-invalid-model-keys', rule, { } } `, - errors: ["Invalid key 'props' in model prop."] + errors: ["Invalid key 'props' in model option."] }, { filename: 'test.vue', @@ -101,7 +101,7 @@ ruleTester.run('no-invalid-model-keys', rule, { } } `, - errors: ["Invalid key 'events' in model prop."] + errors: ["Invalid key 'events' in model option."] }, { filename: 'test.vue', @@ -114,8 +114,8 @@ ruleTester.run('no-invalid-model-keys', rule, { } `, errors: [ - "Invalid key 'props' in model prop.", - "Invalid key 'events' in model prop." + "Invalid key 'props' in model option.", + "Invalid key 'events' in model option." ] }, { @@ -129,7 +129,7 @@ ruleTester.run('no-invalid-model-keys', rule, { } } `, - errors: ["Invalid key 'props' in model prop."] + errors: ["Invalid key 'props' in model option."] }, { filename: 'test.vue', @@ -143,8 +143,8 @@ ruleTester.run('no-invalid-model-keys', rule, { } `, errors: [ - "Invalid key 'name' in model prop.", - "Invalid key 'props' in model prop." + "Invalid key 'name' in model option.", + "Invalid key 'props' in model option." ] } ]