fix(parser): allow parenthesized private-in expressions (#28284)

Parenthesized private-in expressions are valid even when parentheses are
omitted from the AST. Precedence parsing already rejects an
unparenthesized private-in on the right.

AI-assisted implementation.
This commit is contained in:
Boshen authored and GitHub committed 2026-10-29 16:30:14 +08:00
1 parent 658605088a
commit 2ac9a42f4b
9 files changed
+22 -19

No files matched your search

-4
View File
@@ -836,10 +836,6 @@ parser_diagnostics! {
.with_label(span)
};
private_in_private(span: Span) => {
OxcDiagnostic::error("Unexpected right-hand side of private-in expression").with_label(span)
};
unexpected_private_identifier(span: Span) => {
OxcDiagnostic::error("Unexpected private identifier").with_label(span)
};
+2 -3
View File
@@ -209,9 +209,8 @@ impl<'a, C: Config> ParserImpl<'a, C> {
}
self.expect(Kind::In);
let right = self.parse_binary_expression_or_higher(Precedence::Compare);
if let Expression::PrivateInExpression(private_in_expr) = right {
return self.fatal_error(diagnostics::private_in_private(private_in_expr.span));
}
// The precedence check rejects an unparenthesized private-in on the right.
// A parenthesized one is valid, even when its parentheses are omitted from the AST.
Expression::new_private_in_expression(self.end_span(lhs_start), left, right, self)
}
@@ -0,0 +1,8 @@
class PrivateInParentheses {
#outer;
#inner;
check(value) {
return #outer in (#inner in value);
}
}
+2 -2
View File
@@ -1,3 +1,3 @@
codegen_misc Summary:
AST Parsed : 114/114 (100.00%)
Positive Passed: 114/114 (100.00%)
AST Parsed : 115/115 (100.00%)
Positive Passed: 115/115 (100.00%)
+2 -2
View File
@@ -1,3 +1,3 @@
formatter_misc Summary:
AST Parsed : 114/114 (100.00%)
Positive Passed: 114/114 (100.00%)
AST Parsed : 115/115 (100.00%)
Positive Passed: 115/115 (100.00%)
+2 -2
View File
@@ -1,3 +1,3 @@
lexer_misc Summary:
AST Parsed : 369/369 (100.00%)
Positive Passed: 369/369 (100.00%)
AST Parsed : 370/370 (100.00%)
Positive Passed: 370/370 (100.00%)
+2 -2
View File
@@ -1,6 +1,6 @@
parser_misc Summary:
AST Parsed : 114/114 (100.00%)
Positive Passed: 114/114 (100.00%)
AST Parsed : 115/115 (100.00%)
Positive Passed: 115/115 (100.00%)
Negative Passed: 257/257 (100.00%)
× TS(1275): 'accessor' modifier can only appear on a property declaration.
+2 -2
View File
@@ -1,6 +1,6 @@
semantic_misc Summary:
AST Parsed : 114/114 (100.00%)
Positive Passed: 108/114 (94.74%)
AST Parsed : 115/115 (100.00%)
Positive Passed: 109/115 (94.78%)
semantic Error: tasks/coverage/misc/pass/declare-let-private.ts
Bindings mismatch:
after transform: ScopeId(0): ["private"]
@@ -1,3 +1,3 @@
transformer_misc Summary:
AST Parsed : 114/114 (100.00%)
Positive Passed: 114/114 (100.00%)
AST Parsed : 115/115 (100.00%)
Positive Passed: 115/115 (100.00%)