mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
feat(prettier): handle binary in in for statement init (#1512)
This commit is contained in:
parent
7930f90112
commit
ef59f544b4
2 changed files with 35 additions and 2 deletions
|
|
@ -44,6 +44,14 @@ impl<'a> Prettier<'a> {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.check_kind(kind, parent_kind) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
fn check_kind(&self, kind: AstKind<'a>, parent_kind: AstKind<'a>) -> bool {
|
||||||
match kind {
|
match kind {
|
||||||
AstKind::NumberLiteral(literal) => {
|
AstKind::NumberLiteral(literal) => {
|
||||||
matches!(parent_kind, AstKind::MemberExpression(e) if e.object().span() == literal.span)
|
matches!(parent_kind, AstKind::MemberExpression(e) if e.object().span() == literal.span)
|
||||||
|
|
@ -70,6 +78,12 @@ impl<'a> Prettier<'a> {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
AstKind::AssignmentExpression(_) => false,
|
AstKind::AssignmentExpression(_) => false,
|
||||||
|
AstKind::ForStatement(stmt)
|
||||||
|
if stmt.init.as_ref().is_some_and(|e| e.span() == assign_expr.span)
|
||||||
|
|| stmt.update.as_ref().is_some_and(|e| e.span() == assign_expr.span) =>
|
||||||
|
{
|
||||||
|
false
|
||||||
|
}
|
||||||
AstKind::ExpressionStatement(_) => matches!(
|
AstKind::ExpressionStatement(_) => matches!(
|
||||||
assign_expr.left,
|
assign_expr.left,
|
||||||
AssignmentTarget::AssignmentTargetPattern(
|
AssignmentTarget::AssignmentTargetPattern(
|
||||||
|
|
@ -107,6 +121,11 @@ impl<'a> Prettier<'a> {
|
||||||
AstKind::LogicalExpression(e) => self.check_binarish(e.span),
|
AstKind::LogicalExpression(e) => self.check_binarish(e.span),
|
||||||
AstKind::BinaryExpression(e) => match parent_kind {
|
AstKind::BinaryExpression(e) => match parent_kind {
|
||||||
AstKind::UpdateExpression(_) => true,
|
AstKind::UpdateExpression(_) => true,
|
||||||
|
_ if e.operator == BinaryOperator::In
|
||||||
|
&& self.is_path_in_for_statement_initializer(e.span) =>
|
||||||
|
{
|
||||||
|
true
|
||||||
|
}
|
||||||
_ => self.check_binarish(e.span),
|
_ => self.check_binarish(e.span),
|
||||||
},
|
},
|
||||||
AstKind::MemberExpression(e) => self.check_member_call(e.span()),
|
AstKind::MemberExpression(e) => self.check_member_call(e.span()),
|
||||||
|
|
@ -327,6 +346,21 @@ impl<'a> Prettier<'a> {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_path_in_for_statement_initializer(&self, span: Span) -> bool {
|
||||||
|
let mut node = Some(span);
|
||||||
|
let mut parents = self.nodes.iter().rev();
|
||||||
|
while let Some(n) = node {
|
||||||
|
let parent = parents.next();
|
||||||
|
if let Some(AstKind::ForStatement(stmt)) = parent {
|
||||||
|
if stmt.init.as_ref().is_some_and(|init| init.span() == n) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node = parent.map(GetSpan::span);
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
fn starts_with_no_lookahead_token(e: &Expression<'a>, span: Span) -> bool {
|
fn starts_with_no_lookahead_token(e: &Expression<'a>, span: Span) -> bool {
|
||||||
match e {
|
match e {
|
||||||
Expression::BinaryExpression(e) => Self::starts_with_no_lookahead_token(&e.left, span),
|
Expression::BinaryExpression(e) => Self::starts_with_no_lookahead_token(&e.left, span),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
Compatibility: 144/597 (24.12%)
|
Compatibility: 145/597 (24.29%)
|
||||||
|
|
||||||
# Failed
|
# Failed
|
||||||
|
|
||||||
|
|
@ -330,7 +330,6 @@ Compatibility: 144/597 (24.12%)
|
||||||
* for/continue-and-break-comment-1.js
|
* for/continue-and-break-comment-1.js
|
||||||
* for/continue-and-break-comment-2.js
|
* for/continue-and-break-comment-2.js
|
||||||
* for/continue-and-break-comment-without-blocks.js
|
* for/continue-and-break-comment-without-blocks.js
|
||||||
* for/in.js
|
|
||||||
|
|
||||||
### function
|
### function
|
||||||
* function/function_expression.js
|
* function/function_expression.js
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue