Skip to content

Commit 54a909e

Browse files
committed
fix(formatter): is_long_curried_call cannot handle cases where the parent node is not a CallExpression
1 parent 6d5f35a commit 54a909e

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

crates/oxc_formatter/src/utils/member_chain/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ impl<'a> Format<'a> for MemberChain<'a, '_> {
201201
});
202202

203203
if self.tail.len() <= 1 && !has_comments {
204-
return if is_long_curried_call(self.root.parent) {
204+
return if is_long_curried_call(self.root) {
205205
write!(f, [format_one_line])
206206
} else if is_test_call_expression(self.root) && self.head.members().len() >= 2 {
207207
write!(f, [self.head, soft_line_indent_or_space(&self.tail)])

crates/oxc_formatter/src/utils/mod.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use oxc_ast::{AstKind, ast::CallExpression};
88
use crate::{
99
Format, FormatResult, FormatTrailingCommas, format_args,
1010
formatter::{Formatter, prelude::soft_line_break_or_space},
11-
generated::ast_nodes::AstNodes,
11+
generated::ast_nodes::{AstNode, AstNodes},
1212
};
1313

1414
/// This function is in charge to format the call arguments.
@@ -40,12 +40,10 @@ where
4040
/// ```javascript
4141
/// `connect(a, b, c)(d)`
4242
/// ```
43-
pub fn is_long_curried_call(parent: &AstNodes<'_>) -> bool {
44-
if let AstNodes::CallExpression(call) = parent {
45-
if let AstNodes::CallExpression(parent_call) = call.parent {
46-
return call.arguments().len() > parent_call.arguments().len()
47-
&& !parent_call.arguments().is_empty();
48-
}
43+
pub fn is_long_curried_call(call: &AstNode<'_, CallExpression<'_>>) -> bool {
44+
if let AstNodes::CallExpression(parent_call) = call.parent {
45+
return call.arguments().len() > parent_call.arguments().len()
46+
&& !parent_call.arguments().is_empty();
4947
}
5048

5149
false

crates/oxc_formatter/src/write/call_arguments.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ impl<'a> Format<'a> for AstNode<'a, ArenaVec<'a, Argument<'a>>> {
5656
);
5757
}
5858

59-
let (is_commonjs_or_amd_call, is_test_call) =
60-
if let AstNodes::CallExpression(call) = self.parent {
61-
(is_commonjs_or_amd_call(self, call), is_test_call_expression(call))
62-
} else {
63-
(false, false)
64-
};
59+
let call_expression =
60+
if let AstNodes::CallExpression(call) = self.parent { Some(call) } else { None };
61+
62+
let (is_commonjs_or_amd_call, is_test_call) = if let Some(call) = call_expression {
63+
(is_commonjs_or_amd_call(self, call), is_test_call_expression(call))
64+
} else {
65+
(false, false)
66+
};
6567

6668
let is_first_arg_string_literal_or_template = self.len() != 2
6769
|| matches!(
@@ -105,7 +107,7 @@ impl<'a> Format<'a> for AstNode<'a, ArenaVec<'a, Argument<'a>>> {
105107

106108
if let Some(group_layout) = arguments_grouped_layout(self, f) {
107109
write_grouped_arguments(self, group_layout, f)
108-
} else if is_long_curried_call(self.parent) {
110+
} else if call_expression.is_some_and(|call| is_long_curried_call(call)) {
109111
write!(
110112
f,
111113
[

0 commit comments

Comments
 (0)