diff --git a/lib/rules/no-unused-components.js b/lib/rules/no-unused-components.js index 4382cbbca..a12b7d43d 100644 --- a/lib/rules/no-unused-components.js +++ b/lib/rules/no-unused-components.js @@ -56,7 +56,11 @@ module.exports = { usedComponents.add(node.rawName) }, "VAttribute[directive=true][key.name='bind'][key.argument='is']" (node) { - if (node.value.type !== 'VExpressionContainer') return + if ( + !node.value || // `` + node.value.type !== 'VExpressionContainer' || + !node.value.expression // `` + ) return if (node.value.expression.type === 'Literal') { usedComponents.add(node.value.expression.value) diff --git a/tests/lib/rules/no-unused-components.js b/tests/lib/rules/no-unused-components.js index f62b83fb1..b8dfcaaf2 100644 --- a/tests/lib/rules/no-unused-components.js +++ b/tests/lib/rules/no-unused-components.js @@ -411,6 +411,22 @@ tester.run('no-unused-components', rule, { } } ` + }, + + // empty `:is` + { + filename: 'test.vue', + code: ` + ` + }, + { + filename: 'test.vue', + code: ` + ` } ], invalid: [ @@ -512,6 +528,44 @@ tester.run('no-unused-components', rule, { message: 'The "Bar" component has been registered but not used.', line: 14 }] + }, + + // empty `:is` + { + filename: 'test.vue', + code: ` + + `, + errors: [{ + message: 'The "Foo" component has been registered but not used.', + line: 8 + }] + }, + { + filename: 'test.vue', + code: ` + + `, + errors: [{ + message: 'The "Foo" component has been registered but not used.', + line: 8 + }] } ] })