diff --git a/docs/rules/README.md b/docs/rules/README.md index 4d87f7cc9..3a81ca6ec 100644 --- a/docs/rules/README.md +++ b/docs/rules/README.md @@ -324,6 +324,7 @@ For example: | [vue/no-use-computed-property-like-method](./no-use-computed-property-like-method.md) | disallow use computed property like method | | | [vue/no-useless-mustaches](./no-useless-mustaches.md) | disallow unnecessary mustache interpolations | :wrench: | | [vue/no-useless-v-bind](./no-useless-v-bind.md) | disallow unnecessary `v-bind` directives | :wrench: | +| [vue/no-v-text](./no-v-text.md) | disallow use of v-text | :wrench: | | [vue/padding-line-between-blocks](./padding-line-between-blocks.md) | require or disallow padding lines between blocks | :wrench: | | [vue/require-direct-export](./require-direct-export.md) | require the component to be directly exported | | | [vue/require-emit-validator](./require-emit-validator.md) | require type definitions in emits | | diff --git a/docs/rules/no-v-text.md b/docs/rules/no-v-text.md new file mode 100644 index 000000000..cc8152b2b --- /dev/null +++ b/docs/rules/no-v-text.md @@ -0,0 +1,41 @@ +--- +pageClass: rule-details +sidebarDepth: 0 +title: vue/no-v-text +description: disallow use of v-text +--- +# vue/no-v-text + +> disallow use of v-text + + +## :book: Rule Details + +This rule reports all uses of `v-text` directive. + + + +```vue + +``` + + + +## :wrench: Options + +Nothing. + +## :rocket: Version + +This rule was introduced in eslint-plugin-vue v7.17.0 + +## :mag: Implementation + +- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-v-text.js) +- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-v-text.js) diff --git a/lib/index.js b/lib/index.js index d9352faa1..af29765ca 100644 --- a/lib/index.js +++ b/lib/index.js @@ -132,6 +132,7 @@ module.exports = { 'no-v-for-template-key': require('./rules/no-v-for-template-key'), 'no-v-html': require('./rules/no-v-html'), 'no-v-model-argument': require('./rules/no-v-model-argument'), + 'no-v-text': require('./rules/no-v-text'), 'no-watch-after-await': require('./rules/no-watch-after-await'), 'object-curly-newline': require('./rules/object-curly-newline'), 'object-curly-spacing': require('./rules/object-curly-spacing'), diff --git a/lib/rules/no-v-text.js b/lib/rules/no-v-text.js new file mode 100644 index 000000000..272ebe333 --- /dev/null +++ b/lib/rules/no-v-text.js @@ -0,0 +1,36 @@ +/** + * @author tyankatsu + * See LICENSE file in root directory for full license. + */ +'use strict' +const utils = require('../utils') + +// ------------------------------------------------------------------------------ +// Rule Definition +// ------------------------------------------------------------------------------ + +module.exports = { + meta: { + type: 'suggestion', + docs: { + description: 'disallow use of v-text', + categories: undefined, + url: 'https://eslint.vuejs.org/rules/no-v-text.html' + }, + fixable: null, + schema: [] + }, + /** @param {RuleContext} context */ + create(context) { + return utils.defineTemplateBodyVisitor(context, { + /** @param {VDirective} node */ + "VAttribute[directive=true][key.name.name='text']"(node) { + context.report({ + node, + loc: node.loc, + message: "Don't use 'v-text'." + }) + } + }) + } +} diff --git a/tests/lib/rules/no-v-text.js b/tests/lib/rules/no-v-text.js new file mode 100644 index 000000000..c9820ce1a --- /dev/null +++ b/tests/lib/rules/no-v-text.js @@ -0,0 +1,45 @@ +/** + * @author tyankatsu + * See LICENSE file in root directory for full license. + */ + +'use strict' + +// ------------------------------------------------------------------------------ +// Requirements +// ------------------------------------------------------------------------------ + +const RuleTester = require('eslint').RuleTester +const rule = require('../../../lib/rules/no-v-text') + +// ------------------------------------------------------------------------------ +// Tests +// ------------------------------------------------------------------------------ +const ruleTester = new RuleTester({ + parser: require.resolve('vue-eslint-parser'), + parserOptions: { ecmaVersion: 2015 } +}) + +ruleTester.run('no-v-text', rule, { + valid: [ + { + filename: 'test.vue', + code: '' + }, + { + filename: 'test.vue', + code: '' + }, + { + filename: 'test.vue', + code: '' + } + ], + invalid: [ + { + filename: 'test.vue', + code: '', + errors: ["Don't use 'v-text'."] + } + ] +})