diff --git a/rules/prefer-dom-node-dataset.js b/rules/prefer-dom-node-dataset.js index a5a8228f9b..3040a32f0a 100644 --- a/rules/prefer-dom-node-dataset.js +++ b/rules/prefer-dom-node-dataset.js @@ -1,5 +1,5 @@ 'use strict'; -const isValidVariableName = require('./utils/is-valid-variable-name.js'); +const {isIdentifierName} = require('@babel/helper-validator-identifier'); const quoteString = require('./utils/quote-string.js'); const {methodCallSelector, matches} = require('./selectors/index.js'); @@ -44,7 +44,7 @@ const create = context => ({ case 'setAttribute': case 'getAttribute': case 'removeAttribute': { - text = isValidVariableName(name) ? `.${name}` : `[${quoteString(name, nameNode.raw.charAt(0))}]`; + text = isIdentifierName(name) ? `.${name}` : `[${quoteString(name, nameNode.raw.charAt(0))}]`; text = `${datasetText}${text}`; if (method === 'setAttribute') { text += ` = ${sourceCode.getText(node.arguments[1])}`; diff --git a/rules/utils/is-valid-variable-name.js b/rules/utils/is-valid-variable-name.js deleted file mode 100644 index 772fd9b52c..0000000000 --- a/rules/utils/is-valid-variable-name.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = name => /^[$_a-z][\w$]*$/i.test(name); diff --git a/test/prefer-dom-node-dataset.mjs b/test/prefer-dom-node-dataset.mjs index 5cf390dc45..53f3d62ccb 100644 --- a/test/prefer-dom-node-dataset.mjs +++ b/test/prefer-dom-node-dataset.mjs @@ -39,6 +39,7 @@ test.snapshot({ `, 'element.setAttribute(\'data-unicorn\', \'🦄\');', 'element.setAttribute(\'data-🦄\', \'🦄\');', + 'element.setAttribute(\'data-ゆ\', \'ゆ\');', 'element.setAttribute(\'data-foo2\', \'🦄\');', 'element.setAttribute(\'data-foo:bar\', \'zaz\');', 'element.setAttribute("data-foo:bar", "zaz");', @@ -91,6 +92,7 @@ test.snapshot({ 'element.removeAttribute("data-unicorn");', 'element.removeAttribute("data-unicorn",);', 'element.removeAttribute("data-🦄");', + 'element.removeAttribute("data-ゆ");', 'element.removeAttribute("data-foo2");', 'element.removeAttribute("data-foo:bar");', 'element.removeAttribute("data-foo:bar");', @@ -142,6 +144,7 @@ test.snapshot({ 'element.hasAttribute("data-unicorn");', 'element.hasAttribute("data-unicorn",);', 'element.hasAttribute("data-🦄");', + 'element.hasAttribute("data-ゆ");', 'element.hasAttribute("data-foo2");', 'element.hasAttribute("data-foo:bar");', 'element.hasAttribute("data-foo:bar");', @@ -188,6 +191,7 @@ test.snapshot({ 'element.getAttribute("data-unicorn");', 'element.getAttribute("data-unicorn",);', 'element.getAttribute("data-🦄");', + 'element.getAttribute("data-ゆ");', 'element.getAttribute("data-foo2");', 'element.getAttribute("data-foo:bar");', 'element.getAttribute("data-foo:bar");', diff --git a/test/snapshots/prefer-dom-node-dataset.mjs.md b/test/snapshots/prefer-dom-node-dataset.mjs.md index f60e04ebf7..2df5d46b0e 100644 --- a/test/snapshots/prefer-dom-node-dataset.mjs.md +++ b/test/snapshots/prefer-dom-node-dataset.mjs.md @@ -62,6 +62,22 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #4 + 1 | element.setAttribute('data-ゆ', 'ゆ'); + +> Output + + `␊ + 1 | element.dataset.ゆ = 'ゆ';␊ + ` + +> Error 1/1 + + `␊ + > 1 | element.setAttribute('data-ゆ', 'ゆ');␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ + ` + +## Invalid #5 1 | element.setAttribute('data-foo2', '🦄'); > Output @@ -77,7 +93,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #5 +## Invalid #6 1 | element.setAttribute('data-foo:bar', 'zaz'); > Output @@ -93,7 +109,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #6 +## Invalid #7 1 | element.setAttribute("data-foo:bar", "zaz"); > Output @@ -109,7 +125,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #7 +## Invalid #8 1 | element.setAttribute('data-foo.bar', 'zaz'); > Output @@ -125,7 +141,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #8 +## Invalid #9 1 | element.setAttribute('data-foo-bar', 'zaz'); > Output @@ -141,7 +157,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #9 +## Invalid #10 1 | element.setAttribute('data-foo', /* comment */ 'bar'); > Output @@ -157,7 +173,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #10 +## Invalid #11 1 | element.querySelector('#selector').setAttribute('data-AllowAccess', true); > Output @@ -173,7 +189,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #11 +## Invalid #12 1 | element.setAttribute("data-", "🦄"); > Output @@ -189,7 +205,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #12 +## Invalid #13 1 | element.setAttribute("data--foo", "🦄"); > Output @@ -205,7 +221,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #13 +## Invalid #14 1 | element.setAttribute("DATA--FOO", "🦄"); > Output @@ -221,7 +237,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #14 +## Invalid #15 1 | element.setAttribute("DATA- ", "🦄"); > Output @@ -237,7 +253,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊ ` -## Invalid #15 +## Invalid #16 1 | element.setAttribute("DATA-Foo-bar", "🦄"); > Output @@ -340,6 +356,22 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #6 + 1 | element.removeAttribute("data-ゆ"); + +> Output + + `␊ + 1 | delete element.dataset.ゆ;␊ + ` + +> Error 1/1 + + `␊ + > 1 | element.removeAttribute("data-ゆ");␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ + ` + +## Invalid #7 1 | element.removeAttribute("data-foo2"); > Output @@ -355,7 +387,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #7 +## Invalid #8 1 | element.removeAttribute("data-foo:bar"); > Output @@ -371,7 +403,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #8 +## Invalid #9 1 | element.removeAttribute("data-foo:bar"); > Output @@ -387,7 +419,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #9 +## Invalid #10 1 | element.removeAttribute("data-foo.bar"); > Output @@ -403,7 +435,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #10 +## Invalid #11 1 | element.removeAttribute("data-foo-bar"); > Output @@ -419,7 +451,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #11 +## Invalid #12 1 | element.removeAttribute("data-foo"); > Output @@ -435,7 +467,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #12 +## Invalid #13 1 | element.querySelector("#selector").removeAttribute("data-AllowAccess"); > Output @@ -451,7 +483,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊ ` -## Invalid #13 +## Invalid #14 1 | element.removeAttribute("data-"); > Output @@ -554,6 +586,22 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #6 + 1 | element.hasAttribute("data-ゆ"); + +> Output + + `␊ + 1 | Object.hasOwn(element.dataset, "ゆ");␊ + ` + +> Error 1/1 + + `␊ + > 1 | element.hasAttribute("data-ゆ");␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ + ` + +## Invalid #7 1 | element.hasAttribute("data-foo2"); > Output @@ -569,7 +617,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ ` -## Invalid #7 +## Invalid #8 1 | element.hasAttribute("data-foo:bar"); > Output @@ -585,7 +633,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ ` -## Invalid #8 +## Invalid #9 1 | element.hasAttribute("data-foo:bar"); > Output @@ -601,7 +649,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ ` -## Invalid #9 +## Invalid #10 1 | element.hasAttribute("data-foo.bar"); > Output @@ -617,7 +665,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ ` -## Invalid #10 +## Invalid #11 1 | element.hasAttribute("data-foo-bar"); > Output @@ -633,7 +681,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ ` -## Invalid #11 +## Invalid #12 1 | element.hasAttribute("data-foo"); > Output @@ -649,7 +697,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`hasAttribute(…)\`.␊ ` -## Invalid #12 +## Invalid #13 1 | element.querySelector("#selector").hasAttribute("data-AllowAccess"); > Output @@ -752,6 +800,22 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #6 + 1 | element.getAttribute("data-ゆ"); + +> Output + + `␊ + 1 | element.dataset.ゆ;␊ + ` + +> Error 1/1 + + `␊ + > 1 | element.getAttribute("data-ゆ");␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ + ` + +## Invalid #7 1 | element.getAttribute("data-foo2"); > Output @@ -767,7 +831,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ ` -## Invalid #7 +## Invalid #8 1 | element.getAttribute("data-foo:bar"); > Output @@ -783,7 +847,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ ` -## Invalid #8 +## Invalid #9 1 | element.getAttribute("data-foo:bar"); > Output @@ -799,7 +863,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ ` -## Invalid #9 +## Invalid #10 1 | element.getAttribute("data-foo.bar"); > Output @@ -815,7 +879,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ ` -## Invalid #10 +## Invalid #11 1 | element.getAttribute("data-foo-bar"); > Output @@ -831,7 +895,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ ` -## Invalid #11 +## Invalid #12 1 | element.getAttribute("data-foo"); > Output @@ -847,7 +911,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`getAttribute(…)\`.␊ ` -## Invalid #12 +## Invalid #13 1 | element.querySelector("#selector").getAttribute("data-AllowAccess"); > Output diff --git a/test/snapshots/prefer-dom-node-dataset.mjs.snap b/test/snapshots/prefer-dom-node-dataset.mjs.snap index e7ad80f47d..06a2fc61c0 100644 Binary files a/test/snapshots/prefer-dom-node-dataset.mjs.snap and b/test/snapshots/prefer-dom-node-dataset.mjs.snap differ