From 092d6be3683192bdbcd780d950817c622f44b62e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ga=C3=ABtan=20Cassiers?= Date: Mon, 25 May 2015 22:14:05 +0200 Subject: [PATCH] Implement reformat of tuple litterals --- src/expr.rs | 37 +++++++++++++++++++++++++++++++++++++ tests/idem/tuple.rs | 9 +++++++++ 2 files changed, 46 insertions(+) create mode 100644 tests/idem/tuple.rs diff --git a/src/expr.rs b/src/expr.rs index 4b32301fe91..e731abde4e7 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -194,6 +194,40 @@ fn rewrite_field(&mut self, field: &ast::Field, width: usize, offset: usize) -> format!("{}: {}", name, expr) } + fn rewrite_tuple_lit(&mut self, items: &[ptr::P], width: usize, offset: usize) + -> String { + // opening paren + let indent = offset + 1; + // Only last line has width-1 as budget, other may take max_width + let item_strs: Vec<_> = + items.iter() + .enumerate() + .map(|(i, item)| self.rewrite_expr( + item, + // for last line, -2 is for indent + ")", for other lines, -1 is for comma + if i == items.len() - 1 { width - 2 } else { config!(max_width) - indent - 1 }, + indent)) + .collect(); + let tactics = if item_strs.iter().any(|s| s.contains('\n')) { + ListTactic::Vertical + } else { + ListTactic::HorizontalVertical + }; + // FIXME handle comments + let item_strs: Vec<_> = item_strs.into_iter().map(|s| (s, String::new())).collect(); + let fmt = ListFormatting { + tactic: tactics, + separator: ",", + trailing_separator: SeparatorTactic::Never, + indent: indent, + h_width: width - 2, + v_width: width - 2, + }; + let item_str = write_list(&item_strs, &fmt); + format!("({})", item_str) + } + + pub fn rewrite_expr(&mut self, expr: &ast::Expr, width: usize, offset: usize) -> String { match expr.node { ast::Expr_::ExprLit(ref l) => { @@ -219,6 +253,9 @@ pub fn rewrite_expr(&mut self, expr: &ast::Expr, width: usize, offset: usize) -> width, offset); } + ast::Expr_::ExprTup(ref items) => { + return self.rewrite_tuple_lit(items, width, offset); + } _ => {} } diff --git a/tests/idem/tuple.rs b/tests/idem/tuple.rs new file mode 100644 index 00000000000..a0ca2c1e145 --- /dev/null +++ b/tests/idem/tuple.rs @@ -0,0 +1,9 @@ +// Test tuple litterals + +fn foo() { + let a = (a, a, a, a, a); + let aaaaaaaaaaaaaaaa = (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaa, aaaaaaaaaa); + let aaaaaaaaaaaaaaaaaaaaaa = (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, + aaaaaaaaaaaaaaaaaaaaaaaaa, + aaaa); +} -- 2.44.0