From dfcdc72caf8028994105b44e24069cfd62136ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Oddsson?= Date: Mon, 26 Apr 2021 09:39:03 +0100 Subject: [PATCH 1/9] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index b742de7..66d3404 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ This is an ESLint Plugin to help provide best practices for writing Custom Elements aka Web Components. It provides a set of custom rules which can be enforced for files that declare classes that extend from HTMLElement. +## Requirements + +Node 14.x + ## Installation ```sh From 21b0a3443aa795f37a0de3836fb124aa3253d601 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 16 Jul 2021 08:46:34 +0800 Subject: [PATCH 2/9] document --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 66d3404..ba82e4c 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,12 @@ $ npm install --save-dev eslint eslint-plugin-custom-elements ## Setup -Add `custom-elements` to your list of plugins in your ESLint config, and `plugin:custom-elements/recommended` to the `extends` array. +Add `custom-elements` to your list of plugins in your ESLint config, and enable the rules you want or just add `plugin:custom-elements/recommended` to the `extends` array. JSON ESLint config example: ```json { - "plugins": ["custom-elements"], "extends": ["plugin:custom-elements/recommended"] } ``` From b09f9bac6faabf4cb902e4bdc59a0400ea04d4bb Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 16 Jul 2021 08:49:03 +0800 Subject: [PATCH 3/9] Add plugins for minimal config --- lib/configs/minimal.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/configs/minimal.js b/lib/configs/minimal.js index 758d1a6..05be309 100644 --- a/lib/configs/minimal.js +++ b/lib/configs/minimal.js @@ -6,6 +6,7 @@ module.exports = { env: { es2021: true }, + plugins: ['custom-elements'], rules: Object.fromEntries( Object.keys(rules) .filter(r => rules[r].meta.type === 'problem') From fd433ac0bbb7354f7b1ad2e5bc00ae8d915b0393 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Fri, 16 Jul 2021 08:49:38 +0800 Subject: [PATCH 4/9] Add plugins for recommended config --- lib/configs/recommended.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/configs/recommended.js b/lib/configs/recommended.js index 316b146..29bfa90 100644 --- a/lib/configs/recommended.js +++ b/lib/configs/recommended.js @@ -6,5 +6,6 @@ module.exports = { env: { es2021: true }, + plugins: ['custom-elements'], rules: Object.fromEntries(Object.keys(rules).map(r => [`custom-elements/${r}`, 'error'])) } 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 5/9] 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 6/9] 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: [ From fa39e23c17dafdb306e0dd78c7ae1c37cccf1c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Oddsson?= Date: Wed, 20 Oct 2021 13:48:16 +0100 Subject: [PATCH 7/9] Commit package-lock.json after running npm install --- package-lock.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package-lock.json b/package-lock.json index b966006..647eda8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "eslint-plugin-custom-elements", "version": "0.0.2", "license": "MIT", "dependencies": { From 43ec60beb2b0215bd25b27551d99cba1229c44f7 Mon Sep 17 00:00:00 2001 From: Actions Auto Build Date: Wed, 20 Oct 2021 12:48:55 +0000 Subject: [PATCH 8/9] style: format markdown files --- package-lock.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 647eda8..b966006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "eslint-plugin-custom-elements", "version": "0.0.2", "license": "MIT", "dependencies": { From 0922630ed4cad414b44ed679b4e1fc477d82dcf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Oddsson?= Date: Wed, 20 Oct 2021 13:52:31 +0100 Subject: [PATCH 9/9] 0.0.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b966006..e347e62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "eslint-plugin-custom-elements", - "version": "0.0.2", + "version": "0.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.0.2", + "version": "0.0.3", "license": "MIT", "dependencies": { "eslint-rule-documentation": ">=1.0.0" diff --git a/package.json b/package.json index e8b39aa..a29d1af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-custom-elements", - "version": "0.0.2", + "version": "0.0.3", "description": "A collection of eslint rules for custom-elements", "homepage": "https://github.com/github/eslint-plugin-custom-elements#readme", "bugs": {