diff --git a/crates/oxc_linter/src/rules/react/jsx_key.rs b/crates/oxc_linter/src/rules/react/jsx_key.rs index 27d94bc2a..86b3b1cad 100644 --- a/crates/oxc_linter/src/rules/react/jsx_key.rs +++ b/crates/oxc_linter/src/rules/react/jsx_key.rs @@ -81,7 +81,6 @@ fn is_in_array_or_iter<'a, 'b>( loop { let parent = ctx.nodes().parent_node(node.id())?; - match parent.kind() { AstKind::ArrowFunctionExpression(arrow_expr) => { let is_arrow_expr_statement = matches!( @@ -133,9 +132,10 @@ fn is_in_array_or_iter<'a, 'b>( return None; } - AstKind::JSXElement(_) | AstKind::JSXOpeningElement(_) | AstKind::ObjectProperty(_) => { - return None - } + AstKind::JSXElement(_) + | AstKind::JSXOpeningElement(_) + | AstKind::ObjectProperty(_) + | AstKind::JSXFragment(_) => return None, AstKind::ReturnStatement(_) => { is_explicit_return = true; } @@ -313,6 +313,12 @@ fn test() { const directiveRanges = comments?.map(tryParseTSDirective) ", + r#" + const foo: (JSX.Element | string)[] = [ + "text", + hello worldsuperscript, + ]; + "#, r#" import { observable } from "mobx"; diff --git a/crates/oxc_linter/src/snapshots/jsx_key.snap b/crates/oxc_linter/src/snapshots/jsx_key.snap index 460b63fe7..47ebfaa4c 100644 --- a/crates/oxc_linter/src/snapshots/jsx_key.snap +++ b/crates/oxc_linter/src/snapshots/jsx_key.snap @@ -1,5 +1,6 @@ --- source: crates/oxc_linter/src/tester.rs +assertion_line: 161 expression: jsx_key --- ⚠ eslint-plugin-react(jsx-key): Missing "key" prop for element in array. @@ -128,15 +129,6 @@ expression: jsx_key ╰──── help: Add a "key" prop to the element in the iterator (https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key). - ⚠ eslint-plugin-react(jsx-key): Missing "key" prop for element in iterator. - ╭─[jsx_key.tsx:1:12] - 1 │ [1, 2, 3]?.map(x => <>) - · ─┬─ ────────┬─────── - · │ ╰── Element generated here - · ╰── Iterator starts here - ╰──── - help: Add a "key" prop to the element in the iterator (https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key). - ⚠ eslint-plugin-react(jsx-key): Missing "key" prop for element in iterator. ╭─[jsx_key.tsx:1:11] 1 │ [1, 2, 3].map(x => <>{x});