Skip to content

Commit e3a12dc

Browse files
authored
fix(prefer-empty): Improve fixer for prefer-empty (#73)
1 parent 98ff818 commit e3a12dc

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

src/__tests__/lib/rules/prefer-empty.js

+14
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,26 @@ ruleTester.run("prefer-empty", rule, {
2020
valid: [
2121
`expect(element.innerHTML).toBe('foo')`,
2222
`expect(element.innerHTML).toBe(foo)`,
23+
`expect(element.innerHTML).toBe(foo + bar)`,
24+
`expect(element.innerHTML).toBe(foo())`,
25+
`expect(element.innerHTML).toBe(foo().bar)`,
26+
`expect(element.innerHTML).toBe(foo.bar)`,
27+
`expect(element.innerHTML).not.toBe(foo + bar)`,
28+
`expect(element.innerHTML).not.toBe(foo())`,
29+
`expect(element.innerHTML).not.toBe(foo().bar)`,
30+
`expect(element.innerHTML).not.toBe(foo.bar)`,
2331
`expect(element.innerHTML).not.toBe('foo')`,
2432
`expect(element.innerHTML).not.toBe(foo)`,
2533
"expect(statusText.innerHTML).toBe(`${value}%`)",
2634
"expect(statusText.innerHTML).not.toBe(`${value}%`)",
35+
"expect(statusText.innerHTML).toBe(`value`)",
36+
"expect(statusText.innerHTML).not.toBe(`value`)",
37+
"expect(statusText.innerHTML).toBe(` `)",
38+
"expect(statusText.innerHTML).not.toBe(` `)",
2739
`expect(element.firstChild).toBe('foo')`,
2840
`expect(element.firstChild).not.toBe('foo')`,
41+
"expect(element.firstChild).toBe(`foo`)",
42+
'expect(screen.getByText("foo").innerHTML).toBe(`foo ${bar}`)',
2943
`expect(getByText("foo").innerHTML).toBe('foo')`,
3044
`expect(getByText("foo").innerHTML).not.toBe('foo')`,
3145
`expect(getByText("foo").firstChild).toBe('foo')`,

src/rules/prefer-empty.js

+13-10
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,7 @@ export const create = (context) => ({
5656
node
5757
) {
5858
const args = node.parent.parent.parent.arguments[0];
59-
if (
60-
args.value ||
61-
args.name ||
62-
(args.expressions && args.expressions.length)
63-
) {
59+
if (isNonEmptyStringOrTemplateLiteral(args)) {
6460
return;
6561
}
6662

@@ -74,15 +70,12 @@ export const create = (context) => ({
7470
],
7571
});
7672
},
73+
7774
[`MemberExpression[property.name='innerHTML'][parent.parent.property.name='not'][parent.parent.parent.property.name=/toBe$|to(Strict)?Equal$/][parent.parent.object.callee.name='expect']`](
7875
node
7976
) {
8077
const args = node.parent.parent.parent.parent.arguments[0];
81-
if (
82-
args.value ||
83-
args.name ||
84-
(args.expressions && args.expressions.length)
85-
) {
78+
if (isNonEmptyStringOrTemplateLiteral(args)) {
8679
return;
8780
}
8881

@@ -164,3 +157,13 @@ export const create = (context) => ({
164157
});
165158
},
166159
});
160+
161+
function isNonEmptyStringOrTemplateLiteral(node) {
162+
return (
163+
!(node.type === "Literal" || node.type === "TemplateLiteral") ||
164+
node.value ||
165+
node.name ||
166+
(node?.quasis?.length > 0 &&
167+
!(node?.quasis?.length === 1 && node?.quasis[0]?.value?.raw === ""))
168+
);
169+
}

0 commit comments

Comments
 (0)