From 6e082f7aad35afa89563180d1cdecab3afdf573f Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Tue, 21 Apr 2015 19:59:48 +1200 Subject: [PATCH] Extract some methods for functions. --- src/functions.rs | 72 ++++++++++++++++++++++++++++++------------------ src/mod.rs | 1 + 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/functions.rs b/src/functions.rs index f1a9c3954705..ffacfa8cf56d 100644 --- a/src/functions.rs +++ b/src/functions.rs @@ -16,6 +16,7 @@ use syntax::print::pprust; use syntax::parse::token; impl<'a> FmtVisitor<'a> { + // TODO extract methods for args and generics pub fn rewrite_fn(&mut self, indent: usize, ident: ast::Ident, @@ -31,11 +32,7 @@ impl<'a> FmtVisitor<'a> { // who comments there probably deserves what they get. let where_clause = &generics.where_clause; - let newline_brace = match FN_BRACE_STYLE { - BraceStyle::AlwaysNextLine => true, - BraceStyle::SameLineWhere if where_clause.predicates.len() > 0 => true, - _ => false, - }; + let newline_brace = self.newline_for_brace(where_clause); let mut result = String::with_capacity(1024); // Vis unsafety abi. @@ -81,11 +78,7 @@ impl<'a> FmtVisitor<'a> { result.push('>'); } - let ret_str = match fd.output { - ast::FunctionRetTy::DefaultReturn(_) => String::new(), - ast::FunctionRetTy::NoReturn(_) => "-> !".to_string(), - ast::FunctionRetTy::Return(ref ty) => "-> ".to_string() + &pprust::ty_to_string(ty), - }; + let ret_str = self.rewrite_return(&fd.output); // Args. let args = &fd.inputs; @@ -172,23 +165,7 @@ impl<'a> FmtVisitor<'a> { result.push(')'); // Where clause. - if where_clause.predicates.len() > 0 { - result.push('\n'); - result.push_str(&make_indent(indent + 4)); - result.push_str("where "); - - let budget = IDEAL_WIDTH + LEEWAY - indent - 10; - let fmt = ListFormatting { - tactic: ListTactic::Vertical, - separator: ",", - trailing_separator: SeparatorTactic::Always, - indent: indent + 10, - h_width: budget, - v_width: budget, - }; - let where_strs: Vec<_> = where_clause.predicates.iter().map(|p| (self.rewrite_pred(p), String::new())).collect(); - result.push_str(&write_list(&where_strs, &fmt)); - } + result.push_str(&self.rewrite_where_clause(where_clause, indent)); // Return type. if ret_str.len() > 0 { @@ -225,6 +202,47 @@ impl<'a> FmtVisitor<'a> { result } + fn newline_for_brace(&self, where_clause: &ast::WhereClause) -> bool { + match FN_BRACE_STYLE { + BraceStyle::AlwaysNextLine => true, + BraceStyle::SameLineWhere if where_clause.predicates.len() > 0 => true, + _ => false, + } + } + + fn rewrite_where_clause(&self, where_clause: &ast::WhereClause, indent: usize) -> String { + let mut result = String::new(); + if where_clause.predicates.len() == 0 { + return result; + } + + result.push('\n'); + result.push_str(&make_indent(indent + 4)); + result.push_str("where "); + + let budget = IDEAL_WIDTH + LEEWAY - indent - 10; + let fmt = ListFormatting { + tactic: ListTactic::Vertical, + separator: ",", + trailing_separator: SeparatorTactic::Always, + indent: indent + 10, + h_width: budget, + v_width: budget, + }; + let where_strs: Vec<_> = where_clause.predicates.iter().map(|p| (self.rewrite_pred(p), String::new())).collect(); + result.push_str(&write_list(&where_strs, &fmt)); + + result + } + + fn rewrite_return(&self, ret: &ast::FunctionRetTy) -> String { + match *ret { + ast::FunctionRetTy::DefaultReturn(_) => String::new(), + ast::FunctionRetTy::NoReturn(_) => "-> !".to_string(), + ast::FunctionRetTy::Return(ref ty) => "-> ".to_string() + &pprust::ty_to_string(ty), + } + } + // TODO we farm this out, but this could spill over the column limit, so we ought to handle it properly fn rewrite_fn_input(&self, arg: &ast::Arg) -> String { format!("{}: {}", diff --git a/src/mod.rs b/src/mod.rs index 7ea31aec7329..0e3ad3a088b0 100644 --- a/src/mod.rs +++ b/src/mod.rs @@ -192,6 +192,7 @@ impl<'a, 'v> visit::Visitor<'v> for FmtVisitor<'a> { self.block_indent -= TAB_SPACES; // TODO we should compress any newlines here to just one + // TODO somewhere here we are preserving bogus whitespace self.format_missing_with_indent(b.span.hi - BytePos(1)); self.changes.push_str_span(b.span, "}"); self.last_pos = b.span.hi;