diff --git a/crates/oxc_parser/src/js/expression.rs b/crates/oxc_parser/src/js/expression.rs index bb9be04956b05..1b7af6cbba716 100644 --- a/crates/oxc_parser/src/js/expression.rs +++ b/crates/oxc_parser/src/js/expression.rs @@ -199,6 +199,7 @@ impl<'a> ParserImpl<'a> { fn parse_parenthesized_expression(&mut self, span: Span) -> Result> { self.expect(Kind::LParen)?; + let expr_span = self.start_span(); let mut expressions = self.context(Context::In, Context::Decorator, |p| { p.parse_delimited_list( Kind::RParen, @@ -207,26 +208,24 @@ impl<'a> ParserImpl<'a> { Self::parse_assignment_expression_or_higher, ) })?; - self.expect(Kind::RParen)?; - - let paren_span = self.end_span(span); if expressions.is_empty() { - return Err(diagnostics::empty_parenthesized_expression(paren_span)); + self.expect(Kind::RParen)?; + return Err(diagnostics::empty_parenthesized_expression(self.end_span(span))); } + let expr_span = self.end_span(expr_span); + self.expect(Kind::RParen)?; + // ParenthesizedExpression is from acorn --preserveParens let expression = if expressions.len() == 1 { expressions.remove(0) } else { - self.ast.expression_sequence( - Span::new(paren_span.start + 1, paren_span.end - 1), - expressions, - ) + self.ast.expression_sequence(expr_span, expressions) }; Ok(if self.options.preserve_parens { - self.ast.expression_parenthesized(paren_span, expression) + self.ast.expression_parenthesized(self.end_span(span), expression) } else { expression }) diff --git a/tasks/coverage/snapshots/estree_test262.snap b/tasks/coverage/snapshots/estree_test262.snap index 3cf45e92e7f30..609e80e1ceaad 100644 --- a/tasks/coverage/snapshots/estree_test262.snap +++ b/tasks/coverage/snapshots/estree_test262.snap @@ -2,7 +2,7 @@ commit: bc5c1417 estree_test262 Summary: AST Parsed : 44293/44293 (100.00%) -Positive Passed: 44156/44293 (99.69%) +Positive Passed: 44162/44293 (99.70%) tasks/coverage/test262/test/annexB/built-ins/RegExp/prototype/compile/pattern-string-u.js serde_json error: unexpected end of hex escape at line 316 column 33 @@ -186,12 +186,7 @@ serde_json error: unexpected end of hex escape at line 184 column 33 Mismatch: tasks/coverage/test262/test/language/expressions/assignment/fn-name-lhs-cover.js Mismatch: tasks/coverage/test262/test/language/expressions/assignment/target-cover-id.js -Mismatch: tasks/coverage/test262/test/language/expressions/class/scope-name-lex-open-heritage.js Mismatch: tasks/coverage/test262/test/language/expressions/dynamic-import/import-attributes/2nd-param-await-ident.js -Mismatch: tasks/coverage/test262/test/language/expressions/function/scope-name-var-open-non-strict.js -Mismatch: tasks/coverage/test262/test/language/expressions/function/scope-name-var-open-strict.js -Mismatch: tasks/coverage/test262/test/language/expressions/generators/scope-name-var-open-non-strict.js -Mismatch: tasks/coverage/test262/test/language/expressions/generators/scope-name-var-open-strict.js Mismatch: tasks/coverage/test262/test/language/expressions/in/private-field-rhs-non-object.js Mismatch: tasks/coverage/test262/test/language/expressions/postfix-decrement/target-cover-id.js Mismatch: tasks/coverage/test262/test/language/expressions/postfix-increment/target-cover-id.js @@ -210,7 +205,6 @@ serde_json error: unexpected end of hex escape at line 125 column 33 tasks/coverage/test262/test/language/literals/regexp/u-surrogate-pairs-atom-escape-decimal.js serde_json error: unexpected end of hex escape at line 67 column 37 -Mismatch: tasks/coverage/test262/test/language/statements/class/scope-name-lex-open-heritage.js Mismatch: tasks/coverage/test262/test/language/statements/for-in/head-lhs-cover.js Mismatch: tasks/coverage/test262/test/language/statements/for-of/head-lhs-async-parens.js Mismatch: tasks/coverage/test262/test/language/statements/for-of/head-lhs-cover.js