diff --git a/crates/oxc_parser/src/js/expression.rs b/crates/oxc_parser/src/js/expression.rs index e3a1fc2cf8bc6..7b4a435ae3464 100644 --- a/crates/oxc_parser/src/js/expression.rs +++ b/crates/oxc_parser/src/js/expression.rs @@ -192,8 +192,6 @@ impl<'a> ParserImpl<'a> { } // Literal, RegularExpressionLiteral kind if kind.is_literal() => self.parse_literal_expression(), - // JSXElement, JSXFragment - Kind::LAngle if self.source_type.is_jsx() => self.parse_jsx_expression(), _ => self.parse_identifier_expression(), } } @@ -1017,7 +1015,7 @@ impl<'a> ParserImpl<'a> { && kind == Kind::LAngle && self.lookahead(|p| { p.bump_any(); - p.cur_kind().is_identifier_or_keyword() + p.at(Kind::RAngle) || p.cur_kind().is_identifier_or_keyword() }) { return self.parse_jsx_expression(); diff --git a/crates/oxc_parser/src/jsx/mod.rs b/crates/oxc_parser/src/jsx/mod.rs index 7121e122934b2..6ad1f1dca0379 100644 --- a/crates/oxc_parser/src/jsx/mod.rs +++ b/crates/oxc_parser/src/jsx/mod.rs @@ -406,16 +406,11 @@ impl<'a> ParserImpl<'a> { let expr = self.parse_jsx_expression_container(/* in_jsx_child */ false); JSXAttributeValue::ExpressionContainer(expr) } - Kind::LAngle => { - if self.lookahead(|s| { - s.bump_any(); - s.at(Kind::RAngle) - }) { - JSXAttributeValue::Fragment(self.parse_jsx_fragment(false)) - } else { - JSXAttributeValue::Element(self.parse_jsx_element(false)) - } - } + Kind::LAngle => match self.parse_jsx_expression() { + Expression::JSXFragment(fragment) => JSXAttributeValue::Fragment(fragment), + Expression::JSXElement(element) => JSXAttributeValue::Element(element), + _ => unreachable!(), + }, _ => self.unexpected(), } } diff --git a/tasks/coverage/snapshots/parser_typescript.snap b/tasks/coverage/snapshots/parser_typescript.snap index 19f1f7f09bba1..df99b290139f6 100644 --- a/tasks/coverage/snapshots/parser_typescript.snap +++ b/tasks/coverage/snapshots/parser_typescript.snap @@ -25412,10 +25412,10 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/private ╰──── × Unexpected token - ╭─[typescript/tests/cases/conformance/jsx/jsxInvalidEsprimaTestSuite.tsx:3:2] + ╭─[typescript/tests/cases/conformance/jsx/jsxInvalidEsprimaTestSuite.tsx:3:1] 2 │ 3 │ >; - · ─ + · ─ ╰──── × TS(18007): JSX expressions may not use the comma operator @@ -25466,25 +25466,25 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/private ╰──── × Unexpected token - ╭─[typescript/tests/cases/conformance/jsx/tsxErrorRecovery1.tsx:4:20] + ╭─[typescript/tests/cases/conformance/jsx/tsxErrorRecovery1.tsx:4:19] 3 │ function foo() { 4 │ var x =