mirror of
https://github.com/oxc-project/oxc.git
synced 2026-11-04 10:29:58 +00:00
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:
1 parent
658605088a
commit
2ac9a42f4b
9 files changed
+22
-19
No files matched your search
@@ -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)
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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%)
|
||||
@@ -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%)
|
||||
@@ -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%)
|
||||
@@ -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.
|
||||
|
||||
@@ -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%)
|
||||
Reference in new issue
Block a user