diff --git a/docs/rules/no-unused-vars.md b/docs/rules/no-unused-vars.md new file mode 100644 index 000000000..a48f63c33 --- /dev/null +++ b/docs/rules/no-unused-vars.md @@ -0,0 +1,29 @@ +# Disallow unused variable definitions of v-for directives or scope attributes. (no-unused-vars) + +This rule report variable definitions of v-for directives or scope attributes if those are not used. + +## :book: Rule Details + +:-1: Examples of **incorrect** code for this rule: + +```html + +``` + +:+1: Examples of **correct** code for this rule: + +```html + +``` + +## :wrench: Options + +Nothing. diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js new file mode 100644 index 000000000..c329aecf8 --- /dev/null +++ b/lib/rules/no-unused-vars.js @@ -0,0 +1,47 @@ +/** + * @fileoverview warn variable definitions of v-for directives or scope attributes if those are not used. + * @author 薛定谔的猫 + */ +'use strict' + +const utils = require('../utils') + +/** + * Creates AST event handlers for require-v-for-key. + * + * @param {RuleContext} context - The rule context. + * @returns {Object} AST event handlers. + */ +function create (context) { + return utils.defineTemplateBodyVisitor(context, { + VElement (node) { + for (const variable of node.variables) { + if (variable.references.length === 0) { + context.report({ + node: variable.id, + loc: variable.id.loc, + message: `'{{name}}' is defined but never used.`, + data: variable.id + }) + } + } + } + }) +} + +// ------------------------------------------------------------------------------ +// Rule Definition +// ------------------------------------------------------------------------------ + +module.exports = { + create, + meta: { + docs: { + description: 'warn variable definitions of v-for directives or scope attributes if those are not used', + category: 'Possible Errors', + recommended: false + }, + fixable: null, + schema: [] + } +} diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js new file mode 100644 index 000000000..92812ebcb --- /dev/null +++ b/tests/lib/rules/no-unused-vars.js @@ -0,0 +1,67 @@ +/** + * @author 薛定谔的猫 + * @copyright 2017 薛定谔的猫. All rights reserved. + * See LICENSE file in root directory for full license. + */ +'use strict' + +// ------------------------------------------------------------------------------ +// Requirements +// ------------------------------------------------------------------------------ + +const RuleTester = require('eslint').RuleTester +const rule = require('../../../lib/rules/no-unused-vars') + +// ------------------------------------------------------------------------------ +// Tests +// ------------------------------------------------------------------------------ + +const tester = new RuleTester({ + parser: 'vue-eslint-parser', + parserOptions: { ecmaVersion: 2015 } +}) + +tester.run('no-unused-vars', rule, { + valid: [ + { + code: '' + }, + { + code: '' + }, + { + code: '' + }, + { + code: '' + }, + { + code: '' + }, + { + code: '' + } + ], + invalid: [ + { + code: '', + errors: ['\'i\' is defined but never used.'] + }, + { + code: '', + errors: ['\'props\' is defined but never used.'] + }, + { + code: '', + errors: ['\'j\' is defined but never used.'] + }, + { + code: '', + errors: ['\'f\' is defined but never used.'] + }, + { + code: '', + errors: ['\'v\' is defined but never used.', '\'i\' is defined but never used.', '\'c\' is defined but never used.'] + } + ] +})