Skip to content

Commit 786c790

Browse files
author
Jack Zezula
authored
feat: preferHanging - add onlySingleItem option for some config (#472)
1 parent ba8b7e1 commit 786c790

File tree

43 files changed

+259
-85
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+259
-85
lines changed

deployment/schema.json

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,21 @@
240240
"description": ""
241241
}]
242242
},
243+
"preferHangingGranular": {
244+
"description": "Set to prefer hanging indentation when exceeding the line width instead of making code split up on multiple lines.",
245+
"type": "string",
246+
"default": "never",
247+
"oneOf": [{
248+
"const": "always",
249+
"description": "Always prefers hanging regardless of the number of elements."
250+
}, {
251+
"const": "onlySingleItem",
252+
"description": "Only prefers hanging if there is a single item."
253+
}, {
254+
"const": "never",
255+
"description": "Never prefers hanging."
256+
}]
257+
},
243258
"preferSingleLine": {
244259
"description": "If code should revert back from being on multiple lines to being on a single line when able.",
245260
"type": "boolean",
@@ -1137,10 +1152,10 @@
11371152
"$ref": "#/definitions/operatorPosition"
11381153
},
11391154
"arguments.preferHanging": {
1140-
"$ref": "#/definitions/preferHanging"
1155+
"$ref": "#/definitions/preferHangingGranular"
11411156
},
11421157
"arrayExpression.preferHanging": {
1143-
"$ref": "#/definitions/preferHanging"
1158+
"$ref": "#/definitions/preferHangingGranular"
11441159
},
11451160
"arrayPattern.preferHanging": {
11461161
"$ref": "#/definitions/preferHanging"
@@ -1182,7 +1197,7 @@
11821197
"$ref": "#/definitions/preferHanging"
11831198
},
11841199
"parameters.preferHanging": {
1185-
"$ref": "#/definitions/preferHanging"
1200+
"$ref": "#/definitions/preferHangingGranular"
11861201
},
11871202
"sequenceExpression.preferHanging": {
11881203
"$ref": "#/definitions/preferHanging"
@@ -1191,13 +1206,13 @@
11911206
"$ref": "#/definitions/preferHanging"
11921207
},
11931208
"tupleType.preferHanging": {
1194-
"$ref": "#/definitions/preferHanging"
1209+
"$ref": "#/definitions/preferHangingGranular"
11951210
},
11961211
"typeLiteral.preferHanging": {
11971212
"$ref": "#/definitions/preferHanging"
11981213
},
11991214
"typeParameters.preferHanging": {
1200-
"$ref": "#/definitions/preferHanging"
1215+
"$ref": "#/definitions/preferHangingGranular"
12011216
},
12021217
"unionAndIntersectionType.preferHanging": {
12031218
"$ref": "#/definitions/preferHanging"

src/configuration/builder.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -651,12 +651,12 @@ impl ConfigurationBuilder {
651651

652652
/* prefer hanging */
653653

654-
pub fn arguments_prefer_hanging(&mut self, value: bool) -> &mut Self {
655-
self.insert("arguments.preferHanging", value.into())
654+
pub fn arguments_prefer_hanging(&mut self, value: PreferHanging) -> &mut Self {
655+
self.insert("arguments.preferHanging", value.to_string().into())
656656
}
657657

658-
pub fn array_expression_prefer_hanging(&mut self, value: bool) -> &mut Self {
659-
self.insert("arrayExpression.preferHanging", value.into())
658+
pub fn array_expression_prefer_hanging(&mut self, value: PreferHanging) -> &mut Self {
659+
self.insert("arrayExpression.preferHanging", value.to_string().into())
660660
}
661661

662662
pub fn array_pattern_prefer_hanging(&mut self, value: bool) -> &mut Self {
@@ -711,8 +711,8 @@ impl ConfigurationBuilder {
711711
self.insert("objectPattern.preferHanging", value.into())
712712
}
713713

714-
pub fn parameters_prefer_hanging(&mut self, value: bool) -> &mut Self {
715-
self.insert("parameters.preferHanging", value.into())
714+
pub fn parameters_prefer_hanging(&mut self, value: PreferHanging) -> &mut Self {
715+
self.insert("parameters.preferHanging", value.to_string().into())
716716
}
717717

718718
pub fn sequence_expression_prefer_hanging(&mut self, value: bool) -> &mut Self {
@@ -723,16 +723,16 @@ impl ConfigurationBuilder {
723723
self.insert("switchStatement.preferHanging", value.into())
724724
}
725725

726-
pub fn tuple_type_prefer_hanging(&mut self, value: bool) -> &mut Self {
727-
self.insert("tupleType.preferHanging", value.into())
726+
pub fn tuple_type_prefer_hanging(&mut self, value: PreferHanging) -> &mut Self {
727+
self.insert("tupleType.preferHanging", value.to_string().into())
728728
}
729729

730730
pub fn type_literal_prefer_hanging(&mut self, value: bool) -> &mut Self {
731731
self.insert("typeLiteral.preferHanging", value.into())
732732
}
733733

734-
pub fn type_parameters_prefer_hanging(&mut self, value: bool) -> &mut Self {
735-
self.insert("typeParameters.preferHanging", value.into())
734+
pub fn type_parameters_prefer_hanging(&mut self, value: PreferHanging) -> &mut Self {
735+
self.insert("typeParameters.preferHanging", value.to_string().into())
736736
}
737737

738738
pub fn union_and_intersection_type_prefer_hanging(&mut self, value: bool) -> &mut Self {
@@ -1124,8 +1124,8 @@ mod tests {
11241124
.try_statement_brace_position(BracePosition::NextLine)
11251125
.while_statement_brace_position(BracePosition::NextLine)
11261126
/* prefer hanging */
1127-
.arguments_prefer_hanging(true)
1128-
.array_expression_prefer_hanging(true)
1127+
.arguments_prefer_hanging(PreferHanging::OnlySingleItem)
1128+
.array_expression_prefer_hanging(PreferHanging::OnlySingleItem)
11291129
.array_pattern_prefer_hanging(true)
11301130
.do_while_statement_prefer_hanging(true)
11311131
.export_declaration_prefer_hanging(true)
@@ -1139,12 +1139,12 @@ mod tests {
11391139
.jsx_attributes_prefer_hanging(true)
11401140
.object_expression_prefer_hanging(true)
11411141
.object_pattern_prefer_hanging(true)
1142-
.parameters_prefer_hanging(true)
1142+
.parameters_prefer_hanging(PreferHanging::OnlySingleItem)
11431143
.sequence_expression_prefer_hanging(true)
11441144
.switch_statement_prefer_hanging(true)
1145-
.tuple_type_prefer_hanging(true)
1145+
.tuple_type_prefer_hanging(PreferHanging::OnlySingleItem)
11461146
.type_literal_prefer_hanging(true)
1147-
.type_parameters_prefer_hanging(true)
1147+
.type_parameters_prefer_hanging(PreferHanging::OnlySingleItem)
11481148
.union_and_intersection_type_prefer_hanging(true)
11491149
.variable_statement_prefer_hanging(true)
11501150
.while_statement_prefer_hanging(true)

src/configuration/resolve_config.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ pub fn resolve_config(config: ConfigKeyMap, global_config: &GlobalConfiguration)
5454
let trailing_commas = get_value(&mut config, "trailingCommas", TrailingCommas::OnlyMultiLine, &mut diagnostics);
5555
let use_braces = get_value(&mut config, "useBraces", UseBraces::WhenNotSingleLine, &mut diagnostics);
5656
let prefer_hanging = get_value(&mut config, "preferHanging", false, &mut diagnostics);
57+
let prefer_hanging_granular = if prefer_hanging { PreferHanging::Always } else { PreferHanging::Never };
5758
let prefer_single_line_nullable = get_nullable_value(&mut config, "preferSingleLine", &mut diagnostics);
5859
let prefer_single_line = prefer_single_line_nullable.unwrap_or(false);
5960
let space_surrounding_properties = get_value(&mut config, "spaceSurroundingProperties", true, &mut diagnostics);
@@ -145,8 +146,8 @@ pub fn resolve_config(config: ConfigKeyMap, global_config: &GlobalConfiguration)
145146
try_statement_brace_position: get_value(&mut config, "tryStatement.bracePosition", brace_position, &mut diagnostics),
146147
while_statement_brace_position: get_value(&mut config, "whileStatement.bracePosition", brace_position, &mut diagnostics),
147148
/* prefer hanging */
148-
arguments_prefer_hanging: get_value(&mut config, "arguments.preferHanging", prefer_hanging, &mut diagnostics),
149-
array_expression_prefer_hanging: get_value(&mut config, "arrayExpression.preferHanging", prefer_hanging, &mut diagnostics),
149+
arguments_prefer_hanging: get_value(&mut config, "arguments.preferHanging", prefer_hanging_granular, &mut diagnostics),
150+
array_expression_prefer_hanging: get_value(&mut config, "arrayExpression.preferHanging", prefer_hanging_granular, &mut diagnostics),
150151
array_pattern_prefer_hanging: get_value(&mut config, "arrayPattern.preferHanging", prefer_hanging, &mut diagnostics),
151152
do_while_statement_prefer_hanging: get_value(&mut config, "doWhileStatement.preferHanging", prefer_hanging, &mut diagnostics),
152153
export_declaration_prefer_hanging: get_value(&mut config, "exportDeclaration.preferHanging", prefer_hanging, &mut diagnostics),
@@ -160,12 +161,12 @@ pub fn resolve_config(config: ConfigKeyMap, global_config: &GlobalConfiguration)
160161
jsx_attributes_prefer_hanging: get_value(&mut config, "jsxAttributes.preferHanging", prefer_hanging, &mut diagnostics),
161162
object_expression_prefer_hanging: get_value(&mut config, "objectExpression.preferHanging", prefer_hanging, &mut diagnostics),
162163
object_pattern_prefer_hanging: get_value(&mut config, "objectPattern.preferHanging", prefer_hanging, &mut diagnostics),
163-
parameters_prefer_hanging: get_value(&mut config, "parameters.preferHanging", prefer_hanging, &mut diagnostics),
164+
parameters_prefer_hanging: get_value(&mut config, "parameters.preferHanging", prefer_hanging_granular, &mut diagnostics),
164165
sequence_expression_prefer_hanging: get_value(&mut config, "sequenceExpression.preferHanging", prefer_hanging, &mut diagnostics),
165166
switch_statement_prefer_hanging: get_value(&mut config, "switchStatement.preferHanging", prefer_hanging, &mut diagnostics),
166-
tuple_type_prefer_hanging: get_value(&mut config, "tupleType.preferHanging", prefer_hanging, &mut diagnostics),
167+
tuple_type_prefer_hanging: get_value(&mut config, "tupleType.preferHanging", prefer_hanging_granular, &mut diagnostics),
167168
type_literal_prefer_hanging: get_value(&mut config, "typeLiteral.preferHanging", prefer_hanging, &mut diagnostics),
168-
type_parameters_prefer_hanging: get_value(&mut config, "typeParameters.preferHanging", prefer_hanging, &mut diagnostics),
169+
type_parameters_prefer_hanging: get_value(&mut config, "typeParameters.preferHanging", prefer_hanging_granular, &mut diagnostics),
169170
union_and_intersection_type_prefer_hanging: get_value(&mut config, "unionAndIntersectionType.preferHanging", prefer_hanging, &mut diagnostics),
170171
variable_statement_prefer_hanging: get_value(&mut config, "variableStatement.preferHanging", prefer_hanging, &mut diagnostics),
171172
while_statement_prefer_hanging: get_value(&mut config, "whileStatement.preferHanging", prefer_hanging, &mut diagnostics),

src/configuration/types.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@ use dprint_core::generate_str_to_from;
33
use serde::Deserialize;
44
use serde::Serialize;
55

6+
#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
7+
#[serde(rename_all = "camelCase")]
8+
pub enum PreferHanging {
9+
/// Always prefer multi-line indentation
10+
Never,
11+
/// Prefer hanging indentation for sequences with only a single item, but if there are multiple
12+
/// items then use multi-line indentation
13+
OnlySingleItem,
14+
/// Always prefer hanging indentation
15+
Always,
16+
}
17+
18+
generate_str_to_from![PreferHanging, [Never, "never"], [OnlySingleItem, "onlySingleItem"], [Always, "always"]];
19+
620
/// Semi colon possibilities.
721
#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
822
#[serde(rename_all = "camelCase")]
@@ -358,9 +372,9 @@ pub struct Configuration {
358372
pub while_statement_brace_position: BracePosition,
359373
/* prefer hanging */
360374
#[serde(rename = "arguments.preferHanging")]
361-
pub arguments_prefer_hanging: bool,
375+
pub arguments_prefer_hanging: PreferHanging,
362376
#[serde(rename = "arrayExpression.preferHanging")]
363-
pub array_expression_prefer_hanging: bool,
377+
pub array_expression_prefer_hanging: PreferHanging,
364378
#[serde(rename = "arrayPattern.preferHanging")]
365379
pub array_pattern_prefer_hanging: bool,
366380
#[serde(rename = "doWhileStatement.preferHanging")]
@@ -388,17 +402,17 @@ pub struct Configuration {
388402
#[serde(rename = "objectPattern.preferHanging")]
389403
pub object_pattern_prefer_hanging: bool,
390404
#[serde(rename = "parameters.preferHanging")]
391-
pub parameters_prefer_hanging: bool,
405+
pub parameters_prefer_hanging: PreferHanging,
392406
#[serde(rename = "sequenceExpression.preferHanging")]
393407
pub sequence_expression_prefer_hanging: bool,
394408
#[serde(rename = "switchStatement.preferHanging")]
395409
pub switch_statement_prefer_hanging: bool,
396410
#[serde(rename = "tupleType.preferHanging")]
397-
pub tuple_type_prefer_hanging: bool,
411+
pub tuple_type_prefer_hanging: PreferHanging,
398412
#[serde(rename = "typeLiteral.preferHanging")]
399413
pub type_literal_prefer_hanging: bool,
400414
#[serde(rename = "typeParameters.preferHanging")]
401-
pub type_parameters_prefer_hanging: bool,
415+
pub type_parameters_prefer_hanging: PreferHanging,
402416
#[serde(rename = "unionAndIntersectionType.preferHanging")]
403417
pub union_and_intersection_type_prefer_hanging: bool,
404418
#[serde(rename = "variableStatement.preferHanging")]

src/generation/generate.rs

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,11 +1464,16 @@ fn gen_named_import_or_export_specifiers<'a>(opts: GenNamedImportOrExportSpecifi
14641464
/* expressions */
14651465

14661466
fn gen_array_expr<'a>(node: &'a ArrayLit, context: &mut Context<'a>) -> PrintItems {
1467+
let prefer_hanging = match context.config.array_expression_prefer_hanging {
1468+
PreferHanging::Never => false,
1469+
PreferHanging::OnlySingleItem => node.elems.len() == 1,
1470+
PreferHanging::Always => true,
1471+
};
14671472
gen_array_like_nodes(
14681473
GenArrayLikeNodesOptions {
14691474
node: node.into(),
14701475
nodes: node.elems.iter().map(|&x| x.map(|elem| elem.into())).collect(),
1471-
prefer_hanging: context.config.array_expression_prefer_hanging,
1476+
prefer_hanging,
14721477
prefer_single_line: context.config.array_expression_prefer_single_line,
14731478
trailing_commas: context.config.array_expression_trailing_commas,
14741479
space_around: context.config.array_expression_space_around,
@@ -5789,11 +5794,16 @@ fn gen_tpl_lit_type<'a>(node: &'a TsTplLitType, context: &mut Context<'a>) -> Pr
57895794
}
57905795

57915796
fn gen_tuple_type<'a>(node: &'a TsTupleType, context: &mut Context<'a>) -> PrintItems {
5797+
let prefer_hanging = match context.config.tuple_type_prefer_hanging {
5798+
PreferHanging::Never => false,
5799+
PreferHanging::OnlySingleItem => node.elem_types.len() == 1,
5800+
PreferHanging::Always => true,
5801+
};
57925802
gen_array_like_nodes(
57935803
GenArrayLikeNodesOptions {
57945804
node: node.into(),
57955805
nodes: node.elem_types.iter().map(|&x| Some(x.into())).collect(),
5796-
prefer_hanging: context.config.tuple_type_prefer_hanging,
5806+
prefer_hanging,
57975807
prefer_single_line: context.config.tuple_type_prefer_single_line,
57985808
trailing_commas: context.config.tuple_type_trailing_commas,
57995809
space_around: context.config.tuple_type_space_around,
@@ -5851,12 +5861,18 @@ fn gen_type_parameters<'a>(node: TypeParamNode<'a>, context: &mut Context<'a>) -
58515861
let params = node.params();
58525862
let force_use_new_lines = get_use_new_lines(&node, &params, context);
58535863
let mut items = PrintItems::new();
5864+
let prefer_hanging_config = context.config.type_parameters_prefer_hanging;
5865+
let prefer_hanging = match prefer_hanging_config {
5866+
PreferHanging::Never => false,
5867+
PreferHanging::OnlySingleItem => params.len() == 1,
5868+
PreferHanging::Always => true,
5869+
};
58545870

58555871
items.push_str("<");
58565872
items.extend(gen_separated_values(
58575873
GenSeparatedValuesParams {
58585874
nodes: params.into_iter().map(NodeOrSeparator::Node).collect(),
5859-
prefer_hanging: context.config.type_parameters_prefer_hanging,
5875+
prefer_hanging,
58605876
force_use_new_lines,
58615877
allow_blank_lines: false,
58625878
separator: get_trailing_commas(&node, context).into(),
@@ -7015,19 +7031,26 @@ fn gen_parameters_or_arguments<'a, F>(opts: GenParametersOrArgumentsOptions<'a,
70157031
where
70167032
F: FnOnce(&mut Context<'a>) -> Option<PrintItems>,
70177033
{
7018-
let is_parameters = opts.is_parameters;
7019-
let prefer_single_line = is_parameters && context.config.parameters_prefer_single_line || !is_parameters && context.config.arguments_prefer_single_line;
7020-
let force_use_new_lines = get_use_new_lines_for_nodes_with_preceeding_token("(", &opts.nodes, prefer_single_line, context);
7021-
let range = opts.range;
7022-
let custom_close_paren = opts.custom_close_paren;
7023-
let first_member_range = opts.nodes.iter().map(|n| n.range()).next();
70247034
let nodes = opts.nodes;
7025-
let nodes_length = nodes.len();
7026-
let prefer_hanging = if is_parameters {
7035+
let is_parameters = opts.is_parameters;
7036+
let prefer_hanging_config = if is_parameters {
70277037
context.config.parameters_prefer_hanging
70287038
} else {
70297039
context.config.arguments_prefer_hanging
70307040
};
7041+
let prefer_hanging = match prefer_hanging_config {
7042+
PreferHanging::Never => false,
7043+
PreferHanging::OnlySingleItem => only_single_item_and_no_comments(&nodes, context.program),
7044+
PreferHanging::Always => true,
7045+
};
7046+
let prefer_single_item_hanging = prefer_hanging_config == PreferHanging::OnlySingleItem && prefer_hanging;
7047+
let prefer_single_line = prefer_single_item_hanging
7048+
|| (is_parameters && context.config.parameters_prefer_single_line || !is_parameters && context.config.arguments_prefer_single_line);
7049+
let force_use_new_lines = get_use_new_lines_for_nodes_with_preceeding_token("(", &nodes, prefer_single_line, context);
7050+
let range = opts.range;
7051+
let custom_close_paren = opts.custom_close_paren;
7052+
let first_member_range = nodes.iter().map(|n| n.range()).next();
7053+
let nodes_length = nodes.len();
70317054
let space_around = if nodes_length > 0 && is_parameters {
70327055
context.config.parameters_space_around
70337056
} else if nodes_length > 0 {
@@ -7073,7 +7096,11 @@ where
70737096
single_line_space_at_start: space_around,
70747097
single_line_space_at_end: space_around,
70757098
custom_single_line_separator: None,
7076-
multi_line_options: ir_helpers::MultiLineOptions::surround_newlines_indented(),
7099+
multi_line_options: if prefer_single_item_hanging {
7100+
MultiLineOptions::maintain_line_breaks()
7101+
} else {
7102+
MultiLineOptions::surround_newlines_indented()
7103+
},
70777104
force_possible_newline_at_start: is_parameters,
70787105
node_sorter: None,
70797106
},
@@ -7135,6 +7162,22 @@ where
71357162
}
71367163
}
71377164
}
7165+
7166+
fn only_single_item_and_no_comments(nodes: &[Node], program: &Program) -> bool {
7167+
if nodes.len() != 1 {
7168+
return false;
7169+
}
7170+
// check for leading or trailing comments on the only child node
7171+
let child = nodes[0];
7172+
if !child.leading_comments_fast(program).is_empty() || !child.trailing_comments_fast(program).is_empty() {
7173+
return false;
7174+
}
7175+
// search after the trailing comma if it exists
7176+
match child.next_token_fast(program) {
7177+
Some(TokenAndSpan { token: Token::Comma, span, .. }) => span.trailing_comments_fast(program).is_empty(),
7178+
_ => true,
7179+
}
7180+
}
71387181
}
71397182

71407183
struct GenCloseParenWithTypeOptions<'a> {
@@ -7217,7 +7260,7 @@ fn gen_close_paren_with_type<'a>(opts: GenCloseParenWithTypeOptions<'a>, context
72177260
fn get_use_new_line_group(param_count: usize, type_node: Node, context: &mut Context) -> bool {
72187261
if param_count == 0 {
72197262
false
7220-
} else if context.config.parameters_prefer_hanging && param_count > 1 {
7263+
} else if context.config.parameters_prefer_hanging == PreferHanging::Always && param_count > 1 {
72217264
// This was done to prevent the second argument becoming hanging, which doesn't
72227265
// look good especially when the return type then becomes multi-line.
72237266
match type_node {

tests/specs/declarations/class/method/ClassMethod_PreferHanging_True.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
~~ parameters.preferHanging: true, lineWidth: 50 ~~
1+
~~ parameters.preferHanging: always, lineWidth: 50 ~~
22
== should format the return type on the same line when the rest of the header is hanging ==
33
class Test {
44
method(param: string, otherTestinginging: string): test | other {

tests/specs/declarations/function/Function_BracePosition_Maintain.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
~~ functionDeclaration.bracePosition: maintain, parameters.preferHanging: true, lineWidth: 30 ~~
1+
~~ functionDeclaration.bracePosition: maintain, parameters.preferHanging: always, lineWidth: 30 ~~
22
== should maintain the position for the brace position when on same line ==
33
function t() {
44
}

tests/specs/declarations/function/Function_BracePosition_NextLine.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
~~ functionDeclaration.bracePosition: nextLine, parameters.preferHanging: true, lineWidth: 30 ~~
1+
~~ functionDeclaration.bracePosition: nextLine, parameters.preferHanging: always, lineWidth: 30 ~~
22
== should use the next line for the brace position ==
33
function t() {
44
}

tests/specs/declarations/function/Function_BracePosition_SameLine.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
~~ functionDeclaration.bracePosition: sameLine, parameters.preferHanging: true, lineWidth: 30 ~~
1+
~~ functionDeclaration.bracePosition: sameLine, parameters.preferHanging: always, lineWidth: 30 ~~
22
== should use the same line for the brace position ==
33
function t()
44
{

tests/specs/declarations/function/Function_CloseBraceOverMaxWidth.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
~~ lineWidth: 80, parameters.preferHanging: true ~~
1+
~~ lineWidth: 80, parameters.preferHanging: always ~~
22
== Brace at 79 ==
33
export function test(some, very, long, list, of, params, to, put, brace, over) {
44
}

0 commit comments

Comments
 (0)