From bf39c90f966006ab60302c84f6fcf72f98daaa44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Fa=C5=82owski?= Date: Sun, 2 Feb 2020 18:35:29 +0100 Subject: [PATCH] feat(RFC0015): add no-deprecated-filter rule --- docs/rules/README.md | 1 + docs/rules/no-deprecated-filter.md | 50 +++++++++++++++++ lib/index.js | 1 + lib/rules/no-deprecated-filter.js | 43 +++++++++++++++ tests/lib/rules/no-deprecated-filter.js | 72 +++++++++++++++++++++++++ 5 files changed, 167 insertions(+) create mode 100644 docs/rules/no-deprecated-filter.md create mode 100644 lib/rules/no-deprecated-filter.js create mode 100644 tests/lib/rules/no-deprecated-filter.js diff --git a/docs/rules/README.md b/docs/rules/README.md index 30c0f93d1..27ad9319d 100644 --- a/docs/rules/README.md +++ b/docs/rules/README.md @@ -155,6 +155,7 @@ For example: | [vue/match-component-file-name](./match-component-file-name.md) | require component name property to match its file name | | | [vue/max-len](./max-len.md) | enforce a maximum line length | | | [vue/no-boolean-default](./no-boolean-default.md) | disallow boolean defaults | :wrench: | +| [vue/no-deprecated-filter](./no-deprecated-filter.md) | disallow using deprecated filters syntax | | | [vue/no-deprecated-scope-attribute](./no-deprecated-scope-attribute.md) | disallow deprecated `scope` attribute (in Vue.js 2.5.0+) | :wrench: | | [vue/no-deprecated-slot-attribute](./no-deprecated-slot-attribute.md) | disallow deprecated `slot` attribute (in Vue.js 2.6.0+) | :wrench: | | [vue/no-deprecated-slot-scope-attribute](./no-deprecated-slot-scope-attribute.md) | disallow deprecated `slot-scope` attribute (in Vue.js 2.6.0+) | :wrench: | diff --git a/docs/rules/no-deprecated-filter.md b/docs/rules/no-deprecated-filter.md new file mode 100644 index 000000000..f72a8ee8b --- /dev/null +++ b/docs/rules/no-deprecated-filter.md @@ -0,0 +1,50 @@ +--- +pageClass: rule-details +sidebarDepth: 0 +title: vue/no-deprecated-filter +description: disallow using deprecated filters syntax +--- +# vue/no-deprecated-filter +> disallow using deprecated filters syntax + + +## :book: Rule Details + +This rule reports deprecated `filters` syntax (removed in Vue.js v3.0.0+) + + + +```vue + +``` + + + +### :wrench: Options + +Nothing. + +## :books: Further Reading + +- [Vue RFCs - Remove support for filters.](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0015-remove-filters.md) + +## :mag: Implementation + +- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-deprecated-filter.js) +- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-deprecated-filter.js) diff --git a/lib/index.js b/lib/index.js index d1b9bd9ef..2c176c0a0 100644 --- a/lib/index.js +++ b/lib/index.js @@ -39,6 +39,7 @@ module.exports = { 'no-async-in-computed-properties': require('./rules/no-async-in-computed-properties'), 'no-boolean-default': require('./rules/no-boolean-default'), 'no-confusing-v-for-v-if': require('./rules/no-confusing-v-for-v-if'), + 'no-deprecated-filter': require('./rules/no-deprecated-filter'), 'no-deprecated-scope-attribute': require('./rules/no-deprecated-scope-attribute'), 'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'), 'no-deprecated-slot-scope-attribute': require('./rules/no-deprecated-slot-scope-attribute'), diff --git a/lib/rules/no-deprecated-filter.js b/lib/rules/no-deprecated-filter.js new file mode 100644 index 000000000..2ec4256e1 --- /dev/null +++ b/lib/rules/no-deprecated-filter.js @@ -0,0 +1,43 @@ +/** + * @author Przemyslaw Falowski (@przemkow) + * @fileoverview disallow using deprecated filters syntax + */ +'use strict' + +// ------------------------------------------------------------------------------ +// Requirements +// ------------------------------------------------------------------------------ + +const utils = require('../utils') + +// ------------------------------------------------------------------------------ +// Rule Definition +// ------------------------------------------------------------------------------ + +module.exports = { + meta: { + type: 'problem', + docs: { + description: 'disallow using deprecated filters syntax', + category: undefined, + url: 'https://eslint.vuejs.org/rules/no-deprecated-filter.html' + }, + fixable: null, + schema: [], + messages: { + noDeprecatedFilter: 'Filters are deprecated.' + } + }, + + create: function (context) { + return utils.defineTemplateBodyVisitor(context, { + 'VFilterSequenceExpression' (node) { + context.report({ + node, + loc: node.loc, + messageId: 'noDeprecatedFilter' + }) + } + }) + } +} diff --git a/tests/lib/rules/no-deprecated-filter.js b/tests/lib/rules/no-deprecated-filter.js new file mode 100644 index 000000000..20957e465 --- /dev/null +++ b/tests/lib/rules/no-deprecated-filter.js @@ -0,0 +1,72 @@ +/** + * @author Przemyslaw Falowski (@przemkow) + * @fileoverview disallow using deprecated filters syntax + */ +'use strict' + +// ------------------------------------------------------------------------------ +// Requirements +// ------------------------------------------------------------------------------ + +const rule = require('../../../lib/rules/no-deprecated-filter') +const RuleTester = require('eslint').RuleTester + +// ------------------------------------------------------------------------------ +// Tests +// ------------------------------------------------------------------------------ + +const ruleTester = new RuleTester({ + parser: require.resolve('vue-eslint-parser'), + parserOptions: { ecmaVersion: 2015 } +}) + +ruleTester.run('no-deprecated-filter', rule, { + valid: [ + { + filename: 'test.vue', + code: '' + }, + { + filename: 'test.vue', + code: '' + } + ], + + invalid: [ + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + }, + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + }, + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + }, + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + }, + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + }, + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + }, + { + filename: 'test.vue', + code: '', + errors: ['Filters are deprecated.'] + } + ] +})