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
+
+
+ - item
+
+
+```
+
+:+1: Examples of **correct** code for this rule:
+
+```html
+
+
+ - {{i}}
+
+
+```
+
+## :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: '- {{i}}
'
+ },
+ {
+ code: '
'
+ },
+ {
+ code: '{{i}}{{j}}'
+ },
+ {
+ code: '- {{ f.bar.baz }}
'
+ },
+ {
+ code: '{{props}}'
+ },
+ {
+ code: ''
+ }
+ ],
+ invalid: [
+ {
+ code: '
',
+ errors: ['\'i\' is defined but never used.']
+ },
+ {
+ code: '',
+ errors: ['\'props\' is defined but never used.']
+ },
+ {
+ code: '{{i}}{{i}}',
+ 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.']
+ }
+ ]
+})