Skip to content

Commit 88018ca

Browse files
authored
prefer-query-selector: Fix crash on unexpected selector (#1034)
1 parent 700f8bf commit 88018ca

File tree

5 files changed

+46
-34
lines changed

5 files changed

+46
-34
lines changed

rules/prefer-query-selector.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function * getTemplateLiteralFix(fixer, node, identifierName) {
6767

6868
const canBeFixed = node => {
6969
if (node.type === 'Literal') {
70-
return node.value === null || Boolean(node.value.trim());
70+
return node.raw === 'null' || (typeof node.value === 'string' && Boolean(node.value.trim()));
7171
}
7272

7373
if (node.type === 'TemplateLiteral') {

test/integration/projects.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ module.exports = [
158158
]
159159
},
160160
// #903
161-
'https://github.com/mattermost/mattermost-webapp'
161+
'https://github.com/mattermost/mattermost-webapp',
162+
// #1030
163+
'https://github.com/astrofox-io/astrofox'
162164
].map(project => {
163165
if (typeof project === 'string') {
164166
project = {repository: project};

test/prefer-query-selector.js

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {outdent} from 'outdent';
22
import {test} from './utils/test.js';
33
import notDomNodeTypes from './utils/not-dom-node-types.js';
44

5-
test({
5+
test.snapshot({
66
valid: [
77
// Not `CallExpression`
88
'new document.getElementById(foo);',
@@ -29,35 +29,35 @@ test({
2929
'document.querySelectorAll("li a");',
3030
'document.querySelector("li").querySelectorAll("a");'
3131
],
32-
invalid: []
32+
invalid: [
33+
'document.getElementById("foo");',
34+
'document.getElementsByClassName("foo");',
35+
'document.getElementsByClassName("foo bar");',
36+
'document.getElementsByTagName("foo");',
37+
'document.getElementById("");',
38+
'document.getElementById(\'foo\');',
39+
'document.getElementsByClassName(\'foo\');',
40+
'document.getElementsByClassName(\'foo bar\');',
41+
'document.getElementsByTagName(\'foo\');',
42+
'document.getElementsByClassName(\'\');',
43+
'document.getElementById(`foo`);',
44+
'document.getElementsByClassName(`foo`);',
45+
'document.getElementsByClassName(`foo bar`);',
46+
'document.getElementsByTagName(`foo`);',
47+
'document.getElementsByTagName(``);',
48+
'document.getElementsByClassName(`${fn()}`);', // eslint-disable-line no-template-curly-in-string
49+
'document.getElementsByClassName(`foo ${undefined}`);', // eslint-disable-line no-template-curly-in-string
50+
'document.getElementsByClassName(null);',
51+
'document.getElementsByTagName(null);',
52+
'document.getElementsByClassName(fn());',
53+
'document.getElementsByClassName("foo" + fn());',
54+
'document.getElementsByClassName(foo + "bar");',
55+
outdent`
56+
for (const div of document.body.getElementById("id").getElementsByClassName("class")) {
57+
console.log(div.getElementsByTagName("div"));
58+
}
59+
`,
60+
// #1030
61+
'e.getElementById(3)'
62+
]
3363
});
34-
35-
test.snapshot([
36-
'document.getElementById("foo");',
37-
'document.getElementsByClassName("foo");',
38-
'document.getElementsByClassName("foo bar");',
39-
'document.getElementsByTagName("foo");',
40-
'document.getElementById("");',
41-
'document.getElementById(\'foo\');',
42-
'document.getElementsByClassName(\'foo\');',
43-
'document.getElementsByClassName(\'foo bar\');',
44-
'document.getElementsByTagName(\'foo\');',
45-
'document.getElementsByClassName(\'\');',
46-
'document.getElementById(`foo`);',
47-
'document.getElementsByClassName(`foo`);',
48-
'document.getElementsByClassName(`foo bar`);',
49-
'document.getElementsByTagName(`foo`);',
50-
'document.getElementsByTagName(``);',
51-
'document.getElementsByClassName(`${fn()}`);', // eslint-disable-line no-template-curly-in-string
52-
'document.getElementsByClassName(`foo ${undefined}`);', // eslint-disable-line no-template-curly-in-string
53-
'document.getElementsByClassName(null);',
54-
'document.getElementsByTagName(null);',
55-
'document.getElementsByClassName(fn());',
56-
'document.getElementsByClassName("foo" + fn());',
57-
'document.getElementsByClassName(foo + "bar");',
58-
outdent`
59-
for (const div of document.body.getElementById("id").getElementsByClassName("class")) {
60-
console.log(div.getElementsByTagName("div"));
61-
}
62-
`
63-
]);

test/snapshots/prefer-query-selector.js.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,3 +347,13 @@ Generated by [AVA](https://avajs.dev).
347347
| ^^^^^^^^^^^^^^^^^^^^ Prefer `.querySelectorAll()` over `.getElementsByTagName()`.␊
348348
3 | }␊
349349
`
350+
351+
## Invalid #24
352+
1 | e.getElementById(3)
353+
354+
> Error 1/1
355+
356+
`␊
357+
> 1 | e.getElementById(3)␊
358+
| ^^^^^^^^^^^^^^ Prefer `.querySelector()` over `.getElementById()`.␊
359+
`
37 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)