Skip to content

Commit ad8401a

Browse files
authored
fix(eslint-plugin): [strict-boolean-expressions] replace dangerous fixer with suggestions (#7394)
* fix(eslint-plugin): remove explicit rule check for logical negation expressions * feat: add null check error without fix options * refactor: add explicit null check rule suggestion * feat: change suggestion fix message id * test: add fix compare nullish suggestion * refactor: move !nullableObject to suggestions
1 parent bad37a2 commit ad8401a

File tree

2 files changed

+117
-25
lines changed

2 files changed

+117
-25
lines changed

Diff for: packages/eslint-plugin/src/rules/strict-boolean-expressions.ts

+21-11
Original file line numberDiff line numberDiff line change
@@ -703,23 +703,33 @@ export default util.createRule<Options, MessageId>({
703703
context.report({
704704
node,
705705
messageId: 'conditionErrorNullableObject',
706-
fix: util.getWrappingFixer({
707-
sourceCode,
708-
node: node.parent,
709-
innerNode: node,
710-
wrap: code => `${code} == null`,
711-
}),
706+
suggest: [
707+
{
708+
messageId: 'conditionFixCompareNullish',
709+
fix: util.getWrappingFixer({
710+
sourceCode,
711+
node: node.parent,
712+
innerNode: node,
713+
wrap: code => `${code} == null`,
714+
}),
715+
},
716+
],
712717
});
713718
} else {
714719
// if (nullableObject)
715720
context.report({
716721
node,
717722
messageId: 'conditionErrorNullableObject',
718-
fix: util.getWrappingFixer({
719-
sourceCode,
720-
node,
721-
wrap: code => `${code} != null`,
722-
}),
723+
suggest: [
724+
{
725+
messageId: 'conditionFixCompareNullish',
726+
fix: util.getWrappingFixer({
727+
sourceCode,
728+
node,
729+
wrap: code => `${code} != null`,
730+
}),
731+
},
732+
],
723733
});
724734
}
725735
}

Diff for: packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts

+96-14
Original file line numberDiff line numberDiff line change
@@ -1008,15 +1008,40 @@ if (y) {
10081008
<T extends {} | null | undefined>(x: T) => x ? 1 : 0;
10091009
`,
10101010
errors: [
1011-
{ messageId: 'conditionErrorNullableObject', line: 2, column: 37 },
1012-
{ messageId: 'conditionErrorNullableObject', line: 3, column: 33 },
1013-
{ messageId: 'conditionErrorNullableObject', line: 4, column: 52 },
1011+
{
1012+
messageId: 'conditionErrorNullableObject',
1013+
line: 2,
1014+
column: 37,
1015+
suggestions: [
1016+
{
1017+
messageId: 'conditionFixCompareNullish',
1018+
output: 'declare const x: object | null; if (x != null) {}',
1019+
},
1020+
],
1021+
},
1022+
{
1023+
messageId: 'conditionErrorNullableObject',
1024+
line: 3,
1025+
column: 33,
1026+
suggestions: [
1027+
{
1028+
messageId: 'conditionFixCompareNullish',
1029+
output: ` (x?: { a: number }) => x == null;`,
1030+
},
1031+
],
1032+
},
1033+
{
1034+
messageId: 'conditionErrorNullableObject',
1035+
line: 4,
1036+
column: 52,
1037+
suggestions: [
1038+
{
1039+
messageId: 'conditionFixCompareNullish',
1040+
output: ` <T extends {} | null | undefined>(x: T) => (x != null) ? 1 : 0;`,
1041+
},
1042+
],
1043+
},
10141044
],
1015-
output: `
1016-
declare const x: object | null; if (x != null) {}
1017-
(x?: { a: number }) => x == null;
1018-
<T extends {} | null | undefined>(x: T) => (x != null) ? 1 : 0;
1019-
`,
10201045
}),
10211046

10221047
// nullable string in boolean context
@@ -1620,18 +1645,75 @@ if (x) {
16201645
obj && 1 || 0
16211646
`,
16221647
errors: [
1623-
{ messageId: 'conditionErrorNullableObject', line: 3, column: 10 },
1624-
{ messageId: 'conditionErrorNullableObject', line: 4, column: 10 },
1625-
{ messageId: 'conditionErrorNullableObject', line: 5, column: 9 },
1626-
{ messageId: 'conditionErrorNullableObject', line: 6, column: 9 },
1627-
],
1628-
output: `
1648+
{
1649+
messageId: 'conditionErrorNullableObject',
1650+
line: 3,
1651+
column: 10,
1652+
suggestions: [
1653+
{
1654+
messageId: 'conditionFixCompareNullish',
1655+
output: `
16291656
declare const obj: { x: number } | null;
16301657
(obj == null) ? 1 : 0
1658+
!obj
1659+
obj || 0
1660+
obj && 1 || 0
1661+
`,
1662+
},
1663+
],
1664+
},
1665+
{
1666+
messageId: 'conditionErrorNullableObject',
1667+
line: 4,
1668+
column: 10,
1669+
suggestions: [
1670+
{
1671+
messageId: 'conditionFixCompareNullish',
1672+
output: `
1673+
declare const obj: { x: number } | null;
1674+
!obj ? 1 : 0
16311675
obj == null
1676+
obj || 0
1677+
obj && 1 || 0
1678+
`,
1679+
},
1680+
],
1681+
},
1682+
{
1683+
messageId: 'conditionErrorNullableObject',
1684+
line: 5,
1685+
column: 9,
1686+
suggestions: [
1687+
{
1688+
messageId: 'conditionFixCompareNullish',
1689+
output: `
1690+
declare const obj: { x: number } | null;
1691+
!obj ? 1 : 0
1692+
!obj
16321693
;(obj != null) || 0
1694+
obj && 1 || 0
1695+
`,
1696+
},
1697+
],
1698+
},
1699+
{
1700+
messageId: 'conditionErrorNullableObject',
1701+
line: 6,
1702+
column: 9,
1703+
suggestions: [
1704+
{
1705+
messageId: 'conditionFixCompareNullish',
1706+
output: `
1707+
declare const obj: { x: number } | null;
1708+
!obj ? 1 : 0
1709+
!obj
1710+
obj || 0
16331711
;(obj != null) && 1 || 0
16341712
`,
1713+
},
1714+
],
1715+
},
1716+
],
16351717
},
16361718
],
16371719
});

0 commit comments

Comments
 (0)