]> git.lizzy.rs Git - rust.git/commitdiff
Make definitive_tactic more generic via enum Separator
authorSeiichi Uchida <seuchida@gmail.com>
Mon, 31 Jul 2017 07:23:42 +0000 (16:23 +0900)
committerSeiichi Uchida <seuchida@gmail.com>
Mon, 31 Jul 2017 07:23:42 +0000 (16:23 +0900)
src/expr.rs
src/imports.rs
src/items.rs
src/lists.rs
src/types.rs
src/vertical.rs

index 5621bcbf1b9854046d875e82a6a02562ef3d19fc..cf2bc33724790765fb8dd86de24311aa5c3f96ce 100644 (file)
@@ -24,7 +24,7 @@
 use items::{span_hi_for_arg, span_lo_for_arg};
 use lists::{definitive_tactic, itemize_list, shape_for_tactic, struct_lit_formatting,
             struct_lit_shape, struct_lit_tactic, write_list, DefinitiveListTactic, ListFormatting,
-            ListItem, ListTactic, SeparatorTactic};
+            ListItem, ListTactic, Separator, SeparatorTactic};
 use macros::{rewrite_macro, MacroPosition};
 use patterns::{can_be_overflowed_pat, TuplePatField};
 use rewrite::{Rewrite, RewriteContext};
@@ -485,7 +485,7 @@ pub fn rewrite_array<'a, I>(
                 Some(width) => {
                     let tactic =
                         ListTactic::LimitedHorizontalVertical(context.config.array_width());
-                    definitive_tactic(&items, tactic, 2, width)
+                    definitive_tactic(&items, tactic, Separator::Comma, width)
                 }
                 None => DefinitiveListTactic::Vertical,
             }
@@ -494,7 +494,7 @@ pub fn rewrite_array<'a, I>(
             definitive_tactic(
                 &items,
                 ListTactic::LimitedHorizontalVertical(context.config.array_width()),
-                2,
+                Separator::Comma,
                 nested_shape.width,
             )
         } else {
@@ -595,7 +595,7 @@ fn rewrite_closure_fn_decl(
     let tactic = definitive_tactic(
         &item_vec,
         ListTactic::HorizontalVertical,
-        2,
+        Separator::Comma,
         horizontal_budget,
     );
     let arg_shape = match tactic {
@@ -1674,7 +1674,12 @@ fn rewrite_match_pattern(
     );
 
     let items: Vec<_> = pat_strs.into_iter().map(ListItem::from_str).collect();
-    let tactic = definitive_tactic(&items, ListTactic::HorizontalVertical, 3, pat_shape.width);
+    let tactic = definitive_tactic(
+        &items,
+        ListTactic::HorizontalVertical,
+        Separator::VerticalBar,
+        pat_shape.width,
+    );
     let fmt = ListFormatting {
         tactic: tactic,
         separator: " |",
@@ -2222,7 +2227,7 @@ fn try_overflow_last_arg<'a, T>(
     let tactic = definitive_tactic(
         &*item_vec,
         ListTactic::LimitedHorizontalVertical(args_max_width),
-        2,
+        Separator::Comma,
         one_line_width,
     );
 
@@ -2763,7 +2768,7 @@ fn rewrite_tuple_in_visual_indent_style<'a, T>(
     let tactic = definitive_tactic(
         &item_vec,
         ListTactic::HorizontalVertical,
-        2,
+        Separator::Comma,
         nested_shape.width,
     );
     let fmt = ListFormatting {
index bc743649e844d96da20438ed4df3e76d7e4330d9..e0049698bfb014236133948247444c7b6258631a 100644 (file)
@@ -17,7 +17,7 @@
 use codemap::SpanUtils;
 use config::IndentStyle;
 use lists::{definitive_tactic, itemize_list, write_list, DefinitiveListTactic, ListFormatting,
-            ListItem, SeparatorTactic};
+            ListItem, Separator, SeparatorTactic};
 use rewrite::{Rewrite, RewriteContext};
 use types::{rewrite_path, PathContext};
 use utils;
@@ -451,7 +451,7 @@ fn rewrite_use_list(
     let tactic = definitive_tactic(
         &items[first_index..],
         context.config.imports_layout(),
-        2,
+        Separator::Comma,
         remaining_width,
     );
 
index 8b4fd4c725e10768fb1950770dfc71f8de774757..89028afdc1055d446153fefa524e67e871b8fe26 100644 (file)
@@ -23,7 +23,7 @@
 use expr::{format_expr, is_empty_block, is_simple_block_stmt, rewrite_assign_rhs,
            rewrite_call_inner, ExprType};
 use lists::{definitive_tactic, itemize_list, write_list, DefinitiveListTactic, ListFormatting,
-            ListItem, ListTactic, SeparatorTactic};
+            ListItem, ListTactic, Separator, SeparatorTactic};
 use rewrite::{Rewrite, RewriteContext};
 use types::join_bounds;
 use utils::{colon_spaces, contains_skip, end_typaram, format_defaultness, format_mutability,
@@ -2241,7 +2241,7 @@ enum ArgumentKind<'a> {
     let tactic = definitive_tactic(
         &arg_items,
         context.config.fn_args_density().to_list_tactic(),
-        2,
+        Separator::Comma,
         one_line_budget,
     );
     let budget = match tactic {
@@ -2427,7 +2427,7 @@ pub fn format_generics_item_list<I>(
     let tactic = definitive_tactic(
         &item_vec,
         ListTactic::HorizontalVertical,
-        2,
+        Separator::Comma,
         one_line_budget,
     );
     let fmt = ListFormatting {
@@ -2642,7 +2642,12 @@ fn rewrite_where_clause(
     let item_vec = items.collect::<Vec<_>>();
     // FIXME: we don't need to collect here if the where_layout isn't
     // HorizontalVertical.
-    let tactic = definitive_tactic(&item_vec, context.config.where_layout(), 2, budget);
+    let tactic = definitive_tactic(
+        &item_vec,
+        context.config.where_layout(),
+        Separator::Comma,
+        budget,
+    );
 
     let mut comma_tactic = context.config.trailing_comma();
     // Kind of a hack because we don't usually have trailing commas in where clauses.
index 56ac10691de103cb96d25b8fbd9a3576100c03ab..048f11a18561a4a9cdd87a0dc33d8fe42b64cab5 100644 (file)
@@ -135,10 +135,28 @@ pub fn ends_with_newline(&self, indent_style: IndentStyle) -> bool {
     }
 }
 
+/// The type of separator for lists.
+#[derive(Eq, PartialEq, Debug)]
+pub enum Separator {
+    Comma,
+    VerticalBar,
+}
+
+impl Separator {
+    pub fn len(&self) -> usize {
+        match *self {
+            // 2 = `, `
+            Separator::Comma => 2,
+            // 3 = ` | `
+            Separator::VerticalBar => 3,
+        }
+    }
+}
+
 pub fn definitive_tactic<I, T>(
     items: I,
     tactic: ListTactic,
-    sep_len: usize,
+    sep: Separator,
     width: usize,
 ) -> DefinitiveListTactic
 where
@@ -160,7 +178,7 @@ pub fn definitive_tactic<I, T>(
     };
 
     let (sep_count, total_width) = calculate_width(items.clone());
-    let total_sep_len = sep_len * sep_count.checked_sub(1).unwrap_or(0);
+    let total_sep_len = sep.len() * sep_count.checked_sub(1).unwrap_or(0);
     let real_total = total_width + total_sep_len;
 
     if real_total <= limit && !pre_line_comments &&
@@ -644,7 +662,7 @@ pub fn struct_lit_tactic(
             (IndentStyle::Visual, 1) => ListTactic::HorizontalVertical,
             _ => context.config.struct_lit_multiline_style().to_list_tactic(),
         };
-        definitive_tactic(items, prelim_tactic, 2, h_shape.width)
+        definitive_tactic(items, prelim_tactic, Separator::Comma, h_shape.width)
     } else {
         DefinitiveListTactic::Vertical
     }
index 3144efe9db06ec3a9df1b27025e6c485dfe63280..8e0cf2436dee3b53652edb1fdd17312fd101c36d 100644 (file)
@@ -22,7 +22,7 @@
 use config::{IndentStyle, Style, TypeDensity};
 use expr::{rewrite_pair, rewrite_tuple, rewrite_unary_prefix, wrap_args_with_parens};
 use items::{format_generics_item_list, generics_shape_from_config};
-use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListTactic,
+use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListTactic, Separator,
             SeparatorTactic};
 use rewrite::{Rewrite, RewriteContext};
 use utils::{colon_spaces, extra_offset, format_mutability, last_line_width, mk_sp, wrap_str};
@@ -348,7 +348,12 @@ enum ArgumentKind<T>
 
     let item_vec: Vec<_> = items.collect();
 
-    let tactic = definitive_tactic(&*item_vec, ListTactic::HorizontalVertical, 2, budget);
+    let tactic = definitive_tactic(
+        &*item_vec,
+        ListTactic::HorizontalVertical,
+        Separator::Comma,
+        budget,
+    );
 
     let fmt = ListFormatting {
         tactic: tactic,
index 08ef6281baa5bb590d6a6ded64a027d0de289b16..7f43fa8681a42c0925374f661acb2d4e069a4b8f 100644 (file)
@@ -20,7 +20,7 @@
 use comment::contains_comment;
 use expr::rewrite_field;
 use items::{rewrite_struct_field, rewrite_struct_field_prefix};
-use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListTactic};
+use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListTactic, Separator};
 use rewrite::{Rewrite, RewriteContext};
 use utils::{contains_skip, mk_sp};
 
@@ -221,7 +221,12 @@ fn rewrite_aligned_items_inner<T: AlignedItem>(
         span.hi,
     ).collect::<Vec<_>>();
 
-    let tactic = definitive_tactic(&items, ListTactic::HorizontalVertical, 2, one_line_width);
+    let tactic = definitive_tactic(
+        &items,
+        ListTactic::HorizontalVertical,
+        Separator::Comma,
+        one_line_width,
+    );
 
     let fmt = ListFormatting {
         tactic: tactic,