From c340bab4e7653991911e4cf988875507e5a8f4dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Oddsson?= Date: Fri, 8 Oct 2021 14:49:53 +0100 Subject: [PATCH 1/2] Give up if tag name has no value --- lib/rules/valid-tag-name.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/rules/valid-tag-name.js b/lib/rules/valid-tag-name.js index 77370db..f824b4d 100644 --- a/lib/rules/valid-tag-name.js +++ b/lib/rules/valid-tag-name.js @@ -25,6 +25,8 @@ module.exports = { [s.customElements.define](node) { const nameArg = node.arguments[0] let name = nameArg.value + // Give up if there's no value to report on + if (!name) return if (nameArg.type === 'TemplateLiteral') { // Give up on TemplateLiteral expressions if (nameArg.expressions.length) return From e8a3bab8ab5a1331d83a453fe4909966be1899d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Oddsson?= Date: Fri, 8 Oct 2021 15:02:28 +0100 Subject: [PATCH 2/2] Error on non-literal arguments for tag names --- lib/rules/valid-tag-name.js | 6 ++++-- test/valid-tag-name.js | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/rules/valid-tag-name.js b/lib/rules/valid-tag-name.js index f824b4d..b19a48f 100644 --- a/lib/rules/valid-tag-name.js +++ b/lib/rules/valid-tag-name.js @@ -25,8 +25,10 @@ module.exports = { [s.customElements.define](node) { const nameArg = node.arguments[0] let name = nameArg.value - // Give up if there's no value to report on - if (!name) return + if (!['Literal', 'TemplateLiteral'].includes(nameArg.type)) { + context.report(nameArg, 'Expected custom element name to be a string literal') + return + } if (nameArg.type === 'TemplateLiteral') { // Give up on TemplateLiteral expressions if (nameArg.expressions.length) return diff --git a/test/valid-tag-name.js b/test/valid-tag-name.js index c4fdb9b..fc7f751 100644 --- a/test/valid-tag-name.js +++ b/test/valid-tag-name.js @@ -18,6 +18,15 @@ ruleTester.run('valid-tag-name', rule, { {code: 'customElements.define("ng-bar")', options: [{disallowNamespaces: true, prefix: 'ng'}]} ], invalid: [ + { + code: 'const tagName = "foo-bar"; customElements.define(tagName)', + errors: [ + { + message: 'Expected custom element name to be a string literal', + type: 'Identifier' + } + ] + }, { code: 'customElements.define("foo")', errors: [