diff --git a/README.md b/README.md index 9b71e6c..3992d0b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## Rules -- [component-not-registered](src/component-not-registered.js) - Warn if a component is used in a [SFC file](https://vuejs.org/v2/guide/single-file-components.html) without being registered (a.k.a. a globally registered component). **Does not support dynamically assigned components.** +- [component-not-registered](src/component-not-registered.js) - Warn if a component is used in a [SFC file](https://vuejs.org/v2/guide/single-file-components.html) without being registered (a.k.a. a globally registered component). **Supports simple dynamically assigned components (only literal values).** ## License diff --git a/package.json b/package.json index 8cdb788..d760b48 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "eslint-plugin-vue": "^5.2.3" }, "devDependencies": { + "dedent": "^0.7.0", "eslint": "^6.2.2", "eslint-config-xo-space": "^0.21.0", "eslint-plugin-vue": "^5.2.3", diff --git a/src/component-not-registered.js b/src/component-not-registered.js index e87a6b4..bb27cb6 100644 --- a/src/component-not-registered.js +++ b/src/component-not-registered.js @@ -1,7 +1,9 @@ /** * @fileoverview Warn if a component is used in a template without being registered within that file. * @author sharkykh - * Based on https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/component-name-in-template-casing.js + * Based on: + * 1. https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/component-name-in-template-casing.js + * 2. https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-unused-components.js */ 'use strict'; @@ -111,6 +113,12 @@ module.exports = { report(open, name); } }, + "VAttribute[directive=false][key.name='is']"(node) { + const name = node.value.value; + if (!isComponentRegistered(name)) { + report(node.value, name); + } + }, Program(node) { hasInvalidEOF = utils.hasInvalidEOF(node); } diff --git a/tests/component-not-registered.js b/tests/component-not-registered.js index 6cf5c40..d812916 100644 --- a/tests/component-not-registered.js +++ b/tests/component-not-registered.js @@ -8,6 +8,7 @@ // Requirements // ------------------------------------------------------------------------------ +const dedent = require('dedent'); const { RuleTester } = require('eslint'); const rule = require('../src/component-not-registered.js'); @@ -25,24 +26,32 @@ const tester = new RuleTester({ tester.run('component-not-registered', rule, { valid: [ - { // 1 + { filename: 'test.vue', - code: `