From 60d15dac03b3e4629f37e1e05d9fe1ccbedf46f6 Mon Sep 17 00:00:00 2001 From: "Hur Hyeon Bin (Max)" <160996936+hyeonbinHur@users.noreply.github.com> Date: Mon, 26 May 2025 20:36:23 +0900 Subject: [PATCH] [Fix]: detect missing keys in return statement with ternary operator Fix #3925 --- lib/rules/jsx-key.js | 15 +++++++++- tests/lib/rules/jsx-key.js | 57 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/lib/rules/jsx-key.js b/lib/rules/jsx-key.js index 825d21f4bb..a14c90cb38 100644 --- a/lib/rules/jsx-key.js +++ b/lib/rules/jsx-key.js @@ -146,7 +146,20 @@ module.exports = { getReturnStatements(node.body) .filter((returnStatement) => returnStatement && returnStatement.argument) .forEach((returnStatement) => { - checkIteratorElement(returnStatement.argument); + const argument = returnStatement.argument; + + if (argument.type === 'ConditionalExpression') { + const shouldCheckNode = (n) => n && (n.type === 'JSXElement' || n.type === 'JSXFragment'); + + if (shouldCheckNode(argument.consequent)) { + checkIteratorElement(argument.consequent); + } + if (shouldCheckNode(argument.alternate)) { + checkIteratorElement(argument.alternate); + } + } else { + checkIteratorElement(argument); + } }); } } diff --git a/tests/lib/rules/jsx-key.js b/tests/lib/rules/jsx-key.js index 2c5ba7a5c1..1166a9e600 100644 --- a/tests/lib/rules/jsx-key.js +++ b/tests/lib/rules/jsx-key.js @@ -36,6 +36,12 @@ const settings = { const ruleTester = new RuleTester({ parserOptions }); ruleTester.run('jsx-key', rule, { valid: parsers.all([ + { + code: ` + [1, 2, 3].map((item) => { + return item === 'bar' ?