diff --git a/src/expr.rs b/src/expr.rs index 75a7ff21abe..5876409a9fa 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -570,19 +570,6 @@ fn rewrite_closure(capture: ast::CaptureBy, rewrite.map(|rw| format!("{} {}", prefix, rw)) } - fn no_weird_visual_indent(block_str: &str, context: &RewriteContext) -> bool { - let mut prev_indent_width = 0; - for line in block_str.lines() { - let cur_indent_width = line.find(|c: char| !c.is_whitespace()).unwrap_or(0); - if prev_indent_width > cur_indent_width + context.config.tab_spaces && - line.find('}').unwrap_or(0) != cur_indent_width { - return false; - } - prev_indent_width = cur_indent_width; - } - true - } - fn rewrite_closure_block(block: &ast::Block, prefix: String, context: &RewriteContext, @@ -592,9 +579,7 @@ fn rewrite_closure(capture: ast::CaptureBy, // closure is large. if let Some(block_str) = block.rewrite(&context, shape) { let block_threshold = context.config.closure_block_indent_threshold; - if (block_threshold < 0 || - block_str.matches('\n').count() <= block_threshold as usize) && - no_weird_visual_indent(&block_str, context) { + if block_threshold < 0 || block_str.matches('\n').count() <= block_threshold as usize { if let Some(block_str) = block_str.rewrite(context, shape) { return Some(format!("{} {}", prefix, block_str)); } @@ -697,8 +682,11 @@ impl Rewrite for ast::Block { }; visitor.visit_block(self); - - Some(format!("{}{}", prefix, visitor.buffer)) + if visitor.failed { + None + } else { + Some(format!("{}{}", prefix, visitor.buffer)) + } } } diff --git a/src/visitor.rs b/src/visitor.rs index 86fb1bce9d9..71013d085d5 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -39,6 +39,7 @@ pub struct FmtVisitor<'a> { // FIXME: use an RAII util or closure for indenting pub block_indent: Indent, pub config: &'a Config, + pub failed: bool, } impl<'a> FmtVisitor<'a> { @@ -65,6 +66,9 @@ impl<'a> FmtVisitor<'a> { Shape::legacy(self.config.max_width - self.block_indent.width(), self.block_indent)); + if rewrite.is_none() { + self.failed = true; + } self.push_rewrite(stmt.span, rewrite); } ast::StmtKind::Mac(ref mac) => { @@ -457,6 +461,7 @@ impl<'a> FmtVisitor<'a> { alignment: 0, }, config: config, + failed: false, } }