Skip to content

Commit 3f17d0d

Browse files
author
Declan Vong
authored
fix: prevent double format issue for parens wrapped arguments (#313)
1 parent 8a0ff32 commit 3f17d0d

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

src/parsing/parser.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5426,7 +5426,7 @@ fn parse_union_or_intersection_type<'a>(node: UnionOrIntersectionType<'a>, conte
54265426
for (i, type_node) in node.types.iter().enumerate() {
54275427
let (allow_inline_multi_line, allow_inline_single_line) = {
54285428
let is_last_value = i + 1 == types_count; // allow the last type to be single line
5429-
(allows_inline_multi_line(&type_node.into(), types_count > 1), is_last_value)
5429+
(allows_inline_multi_line(&type_node.into(), context, types_count > 1), is_last_value)
54305430
};
54315431
let separator_token = context.token_finder.get_previous_token_if_operator(&type_node.span(), separator);
54325432
let start_info = Info::new("startInfo");
@@ -6637,7 +6637,7 @@ fn parse_separated_values_with_result<'a>(opts: ParseSeparatedValuesParams<'a>,
66376637
};
66386638
let (allow_inline_multi_line, allow_inline_single_line) = if let NodeOrSeparator::Node(value) = &value {
66396639
let is_last_value = node_index + 1 == nodes_count; // allow the last node to be single line
6640-
(allows_inline_multi_line(value, nodes_count > 1), is_last_value)
6640+
(allows_inline_multi_line(value, context, nodes_count > 1), is_last_value)
66416641
} else {
66426642
(false, false)
66436643
};
@@ -8416,14 +8416,14 @@ fn is_arrow_function_with_expr_body(node: &Node) -> bool {
84168416
}
84178417
}
84188418

8419-
fn allows_inline_multi_line(node: &Node, has_siblings: bool) -> bool {
8419+
fn allows_inline_multi_line(node: &Node, context: &Context, has_siblings: bool) -> bool {
84208420
return match node {
8421-
Node::Param(param) => allows_inline_multi_line(&param.pat.into(), has_siblings),
8421+
Node::Param(param) => allows_inline_multi_line(&param.pat.into(), context, has_siblings),
84228422
Node::TsAsExpr(as_expr) => {
8423-
allows_inline_multi_line(&as_expr.expr.into(), has_siblings)
8423+
allows_inline_multi_line(&as_expr.expr.into(), context, has_siblings)
84248424
&& match as_expr.type_ann {
84258425
TsType::TsTypeRef(_) | TsType::TsKeywordType(_) => true,
8426-
_ => allows_inline_multi_line(&as_expr.type_ann.into(), has_siblings),
8426+
_ => allows_inline_multi_line(&as_expr.type_ann.into(), context, has_siblings),
84278427
}
84288428
}
84298429
Node::FnExpr(_)
@@ -8435,16 +8435,19 @@ fn allows_inline_multi_line(node: &Node, has_siblings: bool) -> bool {
84358435
| Node::TsTypeLit(_)
84368436
| Node::TsTupleType(_)
84378437
| Node::TsArrayType(_) => true,
8438-
Node::ExprOrSpread(node) => allows_inline_multi_line(&node.expr.into(), has_siblings),
8438+
Node::ExprOrSpread(node) => allows_inline_multi_line(&node.expr.into(), context, has_siblings),
8439+
Node::ParenExpr(node) => should_skip_paren_expr(node, context) && allows_inline_multi_line(&node.expr.into(), context, has_siblings),
84398440
Node::TaggedTpl(_) | Node::Tpl(_) => !has_siblings,
84408441
Node::CallExpr(node) => !has_siblings && allow_inline_for_call_expr(node),
84418442
Node::BindingIdent(node) => match &node.type_ann {
8442-
Some(type_ann) => allows_inline_multi_line(&type_ann.type_ann.into(), has_siblings),
8443+
Some(type_ann) => allows_inline_multi_line(&type_ann.type_ann.into(), context, has_siblings),
84438444
None => false,
84448445
},
8445-
Node::AssignPat(node) => allows_inline_multi_line(&node.left.into(), has_siblings) || allows_inline_multi_line(&node.right.into(), has_siblings),
8446-
Node::TsTypeAnn(type_ann) => allows_inline_multi_line(&type_ann.type_ann.into(), has_siblings),
8447-
Node::TsTupleElement(tuple_element) => allows_inline_multi_line(&tuple_element.ty.into(), has_siblings),
8446+
Node::AssignPat(node) => {
8447+
allows_inline_multi_line(&node.left.into(), context, has_siblings) || allows_inline_multi_line(&node.right.into(), context, has_siblings)
8448+
}
8449+
Node::TsTypeAnn(type_ann) => allows_inline_multi_line(&type_ann.type_ann.into(), context, has_siblings),
8450+
Node::TsTupleElement(tuple_element) => allows_inline_multi_line(&tuple_element.ty.into(), context, has_siblings),
84488451
_ => false,
84498452
};
84508453

tests/specs/issues/issue0312.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
~~ arguments.preferSingleLine: true ~~
2+
== should collapse to a single line without needing a double format ==
3+
Array.from(
4+
{},
5+
(_ => {
6+
}),
7+
);
8+
9+
[expect]
10+
Array.from({}, _ => {
11+
});

0 commit comments

Comments
 (0)