Skip to content

Commit ecd9f12

Browse files
authored
Support using a comma as separator in type literals (#40)
* Configuration for #11. * #11 - Refactor into using a "Separator" struct that specifies the separator based on whether single-line or multi-line * Implement rest of feature. * Pluralize option values.
2 parents 1b8ad00 + fc702a0 commit ecd9f12

File tree

9 files changed

+293
-97
lines changed

9 files changed

+293
-97
lines changed

src/configuration/builder.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,21 @@ impl ConfigurationBuilder {
386386
self.insert("memberExpression.linePerExpression", value.into())
387387
}
388388

389+
/// The kind of separator to use in type literals.
390+
pub fn type_literal_separator_kind(&mut self, value: SemiColonsOrCommas) -> &mut Self {
391+
self.insert("typeLiteral.separatorKind", value.to_string().into())
392+
}
393+
394+
/// The kind of separator to use in type literals when single line.
395+
pub fn type_literal_separator_kind_single_line(&mut self, value: SemiColonsOrCommas) -> &mut Self {
396+
self.insert("typeLiteral.separatorKind.singleLine", value.to_string().into())
397+
}
398+
399+
/// The kind of separator to use in type literals when multi-line.
400+
pub fn type_literal_separator_kind_multi_line(&mut self, value: SemiColonsOrCommas) -> &mut Self {
401+
self.insert("typeLiteral.separatorKind.multiLine", value.to_string().into())
402+
}
403+
389404
/* ignore comments */
390405

391406
/// The text to use for an ignore comment (ex. `// dprint-ignore`).
@@ -676,6 +691,11 @@ impl ConfigurationBuilder {
676691
self.insert("tupleType.trailingCommas", value.to_string().into())
677692
}
678693

694+
/// Only applies when using commas on type literals.
695+
pub fn type_literal_trailing_commas(&mut self, value: TrailingCommas) -> &mut Self {
696+
self.insert("typeLiteral.trailingCommas", value.to_string().into())
697+
}
698+
679699
pub fn type_parameters_trailing_commas(&mut self, value: TrailingCommas) -> &mut Self {
680700
self.insert("typeParameters.trailingCommas", value.to_string().into())
681701
}
@@ -836,6 +856,9 @@ mod tests {
836856
.arrow_function_use_parentheses(UseParentheses::Maintain)
837857
.binary_expression_line_per_expression(false)
838858
.member_expression_line_per_expression(false)
859+
.type_literal_separator_kind(SemiColonsOrCommas::Commas)
860+
.type_literal_separator_kind_single_line(SemiColonsOrCommas::Commas)
861+
.type_literal_separator_kind_multi_line(SemiColonsOrCommas::Commas)
839862
/* ignore comments */
840863
.ignore_node_comment_text("ignore")
841864
.ignore_file_comment_text("ignore-file")
@@ -912,6 +935,7 @@ mod tests {
912935
.object_pattern_trailing_commas(TrailingCommas::Never)
913936
.type_parameters_trailing_commas(TrailingCommas::Never)
914937
.tuple_type_trailing_commas(TrailingCommas::Never)
938+
.type_literal_trailing_commas(TrailingCommas::Never)
915939
/* use braces */
916940
.if_statement_use_braces(UseBraces::Always)
917941
.for_statement_use_braces(UseBraces::Always)
@@ -970,7 +994,7 @@ mod tests {
970994
.while_statement_space_after_while_keyword(true);
971995

972996
let inner_config = config.get_inner_config();
973-
assert_eq!(inner_config.len(), 137);
997+
assert_eq!(inner_config.len(), 141);
974998
let diagnostics = resolve_config(inner_config, &resolve_global_config(HashMap::new()).config).diagnostics;
975999
assert_eq!(diagnostics.len(), 0);
9761000
}

src/configuration/resolve_config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ pub fn resolve_config(config: ConfigKeyMap, global_config: &GlobalConfiguration)
4141
let use_braces = get_value(&mut config, "useBraces", UseBraces::WhenNotSingleLine, &mut diagnostics);
4242
let prefer_hanging = get_value(&mut config, "preferHanging", false, &mut diagnostics);
4343
let prefer_single_line = get_value(&mut config, "preferSingleLine", false, &mut diagnostics);
44+
let type_literal_separator_kind = get_value(&mut config, "typeLiteral.separatorKind", SemiColonsOrCommas::SemiColons, &mut diagnostics);
4445

4546
let resolved_config = Configuration {
4647
line_width: get_value(&mut config, "lineWidth", global_config.line_width.unwrap_or(DEFAULT_GLOBAL_CONFIGURATION.line_width), &mut diagnostics),
@@ -53,6 +54,8 @@ pub fn resolve_config(config: ConfigKeyMap, global_config: &GlobalConfiguration)
5354
arrow_function_use_parentheses: get_value(&mut config, "arrowFunction.useParentheses", UseParentheses::Maintain, &mut diagnostics),
5455
binary_expression_line_per_expression: get_value(&mut config, "binaryExpression.linePerExpression", false, &mut diagnostics),
5556
member_expression_line_per_expression: get_value(&mut config, "memberExpression.linePerExpression", false, &mut diagnostics),
57+
type_literal_separator_kind_single_line: get_value(&mut config, "typeLiteral.separatorKind.singleLine", type_literal_separator_kind, &mut diagnostics),
58+
type_literal_separator_kind_multi_line: get_value(&mut config, "typeLiteral.separatorKind.multiLine", type_literal_separator_kind, &mut diagnostics),
5659
/* ignore comments */
5760
ignore_node_comment_text: get_value(&mut config, "ignoreNodeCommentText", String::from("dprint-ignore"), &mut diagnostics),
5861
ignore_file_comment_text: get_value(&mut config, "ignoreFileCommentText", String::from("dprint-ignore-file"), &mut diagnostics),
@@ -128,6 +131,7 @@ pub fn resolve_config(config: ConfigKeyMap, global_config: &GlobalConfiguration)
128131
object_expression_trailing_commas: get_value(&mut config, "objectExpression.trailingCommas", trailing_commas, &mut diagnostics),
129132
object_pattern_trailing_commas: get_value(&mut config, "objectPattern.trailingCommas", trailing_commas, &mut diagnostics),
130133
tuple_type_trailing_commas: get_value(&mut config, "tupleType.trailingCommas", trailing_commas, &mut diagnostics),
134+
type_literal_trailing_commas: get_value(&mut config, "typeLiteral.trailingCommas", trailing_commas, &mut diagnostics),
131135
type_parameters_trailing_commas: get_value(&mut config, "typeParameters.trailingCommas", trailing_commas, &mut diagnostics),
132136
/* use braces */
133137
if_statement_use_braces: get_value(&mut config, "ifStatement.useBraces", use_braces, &mut diagnostics),

src/configuration/types.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,22 @@ generate_str_to_from![
217217
[PreferSingle, "preferSingle"]
218218
];
219219

220+
/// Whether to use semi-colons or commas.
221+
#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)]
222+
#[serde(rename_all = "camelCase")]
223+
pub enum SemiColonsOrCommas {
224+
/// Use semi colons (default).
225+
SemiColons,
226+
/// Use commas.
227+
Commas,
228+
}
229+
230+
generate_str_to_from![
231+
SemiColonsOrCommas,
232+
[SemiColons, "semiColons"],
233+
[Commas, "commas"]
234+
];
235+
220236
#[derive(Clone, Serialize, Deserialize)]
221237
#[serde(rename_all = "camelCase")]
222238
pub struct Configuration {
@@ -233,6 +249,10 @@ pub struct Configuration {
233249
pub binary_expression_line_per_expression: bool,
234250
#[serde(rename = "memberExpression.linePerExpression")]
235251
pub member_expression_line_per_expression: bool,
252+
#[serde(rename = "typeLiteral.separatorKind.singleLine")]
253+
pub type_literal_separator_kind_single_line: SemiColonsOrCommas,
254+
#[serde(rename = "typeLiteral.separatorKind.multiLine")]
255+
pub type_literal_separator_kind_multi_line: SemiColonsOrCommas,
236256
/* ignore comments */
237257
pub ignore_node_comment_text: String,
238258
pub ignore_file_comment_text: String,
@@ -373,6 +393,8 @@ pub struct Configuration {
373393
pub object_expression_trailing_commas: TrailingCommas,
374394
#[serde(rename = "tupleType.trailingCommas")]
375395
pub tuple_type_trailing_commas: TrailingCommas,
396+
#[serde(rename = "typeLiteral.trailingCommas")]
397+
pub type_literal_trailing_commas: TrailingCommas,
376398
#[serde(rename = "typeParameters.trailingCommas")]
377399
pub type_parameters_trailing_commas: TrailingCommas,
378400
/* use braces */

0 commit comments

Comments
 (0)