diff --git a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts index 6ea73c6e299..2eed8cdc1e8 100644 --- a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts +++ b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts @@ -703,23 +703,33 @@ export default util.createRule({ context.report({ node, messageId: 'conditionErrorNullableObject', - fix: util.getWrappingFixer({ - sourceCode, - node: node.parent, - innerNode: node, - wrap: code => `${code} == null`, - }), + suggest: [ + { + messageId: 'conditionFixCompareNullish', + fix: util.getWrappingFixer({ + sourceCode, + node: node.parent, + innerNode: node, + wrap: code => `${code} == null`, + }), + }, + ], }); } else { // if (nullableObject) context.report({ node, messageId: 'conditionErrorNullableObject', - fix: util.getWrappingFixer({ - sourceCode, - node, - wrap: code => `${code} != null`, - }), + suggest: [ + { + messageId: 'conditionFixCompareNullish', + fix: util.getWrappingFixer({ + sourceCode, + node, + wrap: code => `${code} != null`, + }), + }, + ], }); } } diff --git a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts index 65878e2d17f..9a285b70d18 100644 --- a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts @@ -1008,15 +1008,40 @@ if (y) { (x: T) => x ? 1 : 0; `, errors: [ - { messageId: 'conditionErrorNullableObject', line: 2, column: 37 }, - { messageId: 'conditionErrorNullableObject', line: 3, column: 33 }, - { messageId: 'conditionErrorNullableObject', line: 4, column: 52 }, + { + messageId: 'conditionErrorNullableObject', + line: 2, + column: 37, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: 'declare const x: object | null; if (x != null) {}', + }, + ], + }, + { + messageId: 'conditionErrorNullableObject', + line: 3, + column: 33, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: ` (x?: { a: number }) => x == null;`, + }, + ], + }, + { + messageId: 'conditionErrorNullableObject', + line: 4, + column: 52, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: ` (x: T) => (x != null) ? 1 : 0;`, + }, + ], + }, ], - output: ` - declare const x: object | null; if (x != null) {} - (x?: { a: number }) => x == null; - (x: T) => (x != null) ? 1 : 0; - `, }), // nullable string in boolean context @@ -1620,18 +1645,75 @@ if (x) { obj && 1 || 0 `, errors: [ - { messageId: 'conditionErrorNullableObject', line: 3, column: 10 }, - { messageId: 'conditionErrorNullableObject', line: 4, column: 10 }, - { messageId: 'conditionErrorNullableObject', line: 5, column: 9 }, - { messageId: 'conditionErrorNullableObject', line: 6, column: 9 }, - ], - output: ` + { + messageId: 'conditionErrorNullableObject', + line: 3, + column: 10, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: ` declare const obj: { x: number } | null; (obj == null) ? 1 : 0 + !obj + obj || 0 + obj && 1 || 0 + `, + }, + ], + }, + { + messageId: 'conditionErrorNullableObject', + line: 4, + column: 10, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: ` + declare const obj: { x: number } | null; + !obj ? 1 : 0 obj == null + obj || 0 + obj && 1 || 0 + `, + }, + ], + }, + { + messageId: 'conditionErrorNullableObject', + line: 5, + column: 9, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: ` + declare const obj: { x: number } | null; + !obj ? 1 : 0 + !obj ;(obj != null) || 0 + obj && 1 || 0 + `, + }, + ], + }, + { + messageId: 'conditionErrorNullableObject', + line: 6, + column: 9, + suggestions: [ + { + messageId: 'conditionFixCompareNullish', + output: ` + declare const obj: { x: number } | null; + !obj ? 1 : 0 + !obj + obj || 0 ;(obj != null) && 1 || 0 `, + }, + ], + }, + ], }, ], });