Skip to content

Commit 7fb6f7b

Browse files
authored
prefer-dom-node-dataset: Fix name conversion (#1674)
1 parent a43a174 commit 7fb6f7b

File tree

4 files changed

+118
-14
lines changed

4 files changed

+118
-14
lines changed

rules/prefer-dom-node-dataset.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,15 @@ const dashToCamelCase = string => string.replace(/-[a-z]/g, s => s[1].toUpperCas
2222
const create = context => ({
2323
[selector](node) {
2424
const [nameNode] = node.arguments;
25-
const attributeName = nameNode.value;
25+
let attributeName = nameNode.value;
2626

27-
if (typeof attributeName !== 'string' || !attributeName.startsWith('data-') || attributeName === 'data-') {
27+
if (typeof attributeName !== 'string') {
28+
return;
29+
}
30+
31+
attributeName = attributeName.toLowerCase();
32+
33+
if (!attributeName.startsWith('data-')) {
2834
return;
2935
}
3036

test/prefer-dom-node-dataset.mjs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ test.snapshot({
2828
'element.setAttribute(0, \'🦄\');',
2929
// First Argument is not startsWith `data-`
3030
'element.setAttribute(\'foo-unicorn\', \'🦄\');',
31-
// First Argument is `data-`
32-
'element.setAttribute(\'data-\', \'🦄\');',
31+
'element.setAttribute(\'data\', \'🦄\');',
3332
],
3433
invalid: [
3534
outdent`
@@ -47,6 +46,11 @@ test.snapshot({
4746
'element.setAttribute(\'data-foo-bar\', \'zaz\');',
4847
'element.setAttribute(\'data-foo\', /* comment */ \'bar\');',
4948
'element.querySelector(\'#selector\').setAttribute(\'data-AllowAccess\', true);',
49+
'element.setAttribute("data-", "🦄");',
50+
'element.setAttribute("data--foo", "🦄");',
51+
'element.setAttribute("DATA--FOO", "🦄");',
52+
'element.setAttribute("DATA- ", "🦄");',
53+
'element.setAttribute("DATA-Foo-bar", "🦄");',
5054
],
5155
});
5256

@@ -75,8 +79,7 @@ test.snapshot({
7579
'element.removeAttribute(0);',
7680
// First Argument is not startsWith `data-`
7781
'element.removeAttribute("foo-unicorn");',
78-
// First Argument is `data-`
79-
'element.removeAttribute("data-");',
82+
'element.removeAttribute("data");',
8083
],
8184
invalid: [
8285
outdent`
@@ -95,6 +98,7 @@ test.snapshot({
9598
'element.removeAttribute("data-foo-bar");',
9699
'element.removeAttribute("data-foo");',
97100
'element.querySelector("#selector").removeAttribute("data-AllowAccess");',
101+
'element.removeAttribute("data-");',
98102
],
99103
});
100104

@@ -126,8 +130,7 @@ test.snapshot({
126130
'element.hasAttribute(0);',
127131
// First Argument is not startsWith `data-`
128132
'element.hasAttribute("foo-unicorn");',
129-
// First Argument is `data-`
130-
'element.hasAttribute("data-");',
133+
'element.hasAttribute("data");',
131134
],
132135
invalid: [
133136
outdent`
@@ -173,8 +176,7 @@ test.snapshot({
173176
'element.getAttribute(0);',
174177
// First Argument is not startsWith `data-`
175178
'element.getAttribute("foo-unicorn");',
176-
// First Argument is `data-`
177-
'element.getAttribute("data-");',
179+
'element.getAttribute("data");',
178180
],
179181
invalid: [
180182
outdent`

test/snapshots/prefer-dom-node-dataset.mjs.md

Lines changed: 100 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ Generated by [AVA](https://avajs.dev).
163163
> Output
164164
165165
`␊
166-
1 | element.querySelector('#selector').dataset.AllowAccess = true;␊
166+
1 | element.querySelector('#selector').dataset.allowaccess = true;␊
167167
`
168168

169169
> Error 1/1
@@ -173,6 +173,86 @@ Generated by [AVA](https://avajs.dev).
173173
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊
174174
`
175175

176+
## Invalid #11
177+
1 | element.setAttribute("data-", "🦄");
178+
179+
> Output
180+
181+
`␊
182+
1 | element.dataset[""] = "🦄";␊
183+
`
184+
185+
> Error 1/1
186+
187+
`␊
188+
> 1 | element.setAttribute("data-", "🦄");␊
189+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊
190+
`
191+
192+
## Invalid #12
193+
1 | element.setAttribute("data--foo", "🦄");
194+
195+
> Output
196+
197+
`␊
198+
1 | element.dataset.Foo = "🦄";␊
199+
`
200+
201+
> Error 1/1
202+
203+
`␊
204+
> 1 | element.setAttribute("data--foo", "🦄");␊
205+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊
206+
`
207+
208+
## Invalid #13
209+
1 | element.setAttribute("DATA--FOO", "🦄");
210+
211+
> Output
212+
213+
`␊
214+
1 | element.dataset.Foo = "🦄";␊
215+
`
216+
217+
> Error 1/1
218+
219+
`␊
220+
> 1 | element.setAttribute("DATA--FOO", "🦄");␊
221+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊
222+
`
223+
224+
## Invalid #14
225+
1 | element.setAttribute("DATA- ", "🦄");
226+
227+
> Output
228+
229+
`␊
230+
1 | element.dataset[" "] = "🦄";␊
231+
`
232+
233+
> Error 1/1
234+
235+
`␊
236+
> 1 | element.setAttribute("DATA- ", "🦄");␊
237+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊
238+
`
239+
240+
## Invalid #15
241+
1 | element.setAttribute("DATA-Foo-bar", "🦄");
242+
243+
> Output
244+
245+
`␊
246+
1 | element.dataset.fooBar = "🦄";␊
247+
`
248+
249+
> Error 1/1
250+
251+
`␊
252+
> 1 | element.setAttribute("DATA-Foo-bar", "🦄");␊
253+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`setAttribute(…)\`.␊
254+
`
255+
176256
## Invalid #1
177257
1 | element.removeAttribute(
178258
2 | "data-foo", // comment
@@ -361,7 +441,7 @@ Generated by [AVA](https://avajs.dev).
361441
> Output
362442
363443
`␊
364-
1 | delete element.querySelector("#selector").dataset.AllowAccess;␊
444+
1 | delete element.querySelector("#selector").dataset.allowaccess;␊
365445
`
366446

367447
> Error 1/1
@@ -371,6 +451,22 @@ Generated by [AVA](https://avajs.dev).
371451
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊
372452
`
373453

454+
## Invalid #13
455+
1 | element.removeAttribute("data-");
456+
457+
> Output
458+
459+
`␊
460+
1 | delete element.dataset[""];␊
461+
`
462+
463+
> Error 1/1
464+
465+
`␊
466+
> 1 | element.removeAttribute("data-");␊
467+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.dataset\` over \`removeAttribute(…)\`.␊
468+
`
469+
374470
## Invalid #1
375471
1 | element.hasAttribute(
376472
2 | "data-foo", // comment
@@ -559,7 +655,7 @@ Generated by [AVA](https://avajs.dev).
559655
> Output
560656
561657
`␊
562-
1 | Object.hasOwn(element.querySelector("#selector").dataset, "AllowAccess");␊
658+
1 | Object.hasOwn(element.querySelector("#selector").dataset, "allowaccess");␊
563659
`
564660

565661
> Error 1/1
@@ -757,7 +853,7 @@ Generated by [AVA](https://avajs.dev).
757853
> Output
758854
759855
`␊
760-
1 | element.querySelector("#selector").dataset.AllowAccess;␊
856+
1 | element.querySelector("#selector").dataset.allowaccess;␊
761857
`
762858

763859
> Error 1/1
268 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)