]> git.lizzy.rs Git - rust.git/blobdiff - src/expr.rs
Use trim_tries to extract post comment over simple trim_matches
[rust.git] / src / expr.rs
index 0f4474d7c0f1a363420d394ad596288e0d05d39b..74639c6ef63d61e9001e7fb45205c6e9a16d377a 100644 (file)
 use std::cmp::min;
 
 use config::lists::*;
-use syntax::codemap::{BytePos, CodeMap, Span};
 use syntax::parse::token::DelimToken;
+use syntax::source_map::{BytePos, SourceMap, Span};
 use syntax::{ast, ptr};
 
 use chains::rewrite_chain;
 use closures;
-use codemap::{LineRangeUtils, SpanUtils};
 use comment::{
     combine_strs_with_missing_comments, contains_comment, recover_comment_removed, rewrite_comment,
     rewrite_missing_comment, CharClasses, FindUncommented,
@@ -35,6 +34,7 @@
 use patterns::{can_be_overflowed_pat, is_short_pattern, TuplePatField};
 use rewrite::{Rewrite, RewriteContext};
 use shape::{Indent, Shape};
+use source_map::{LineRangeUtils, SpanUtils};
 use spanned::Spanned;
 use string::{rewrite_string, StringFormat};
 use types::{can_be_overflowed_type, rewrite_path, PathContext};
@@ -317,22 +317,17 @@ fn needs_space_after_range(rhs: &ast::Expr) -> bool {
         // We do not format these expressions yet, but they should still
         // satisfy our width restrictions.
         ast::ExprKind::InlineAsm(..) => Some(context.snippet(expr.span).to_owned()),
-        ast::ExprKind::Catch(ref block) => {
-            if let rw @ Some(_) = rewrite_single_line_block(
-                context,
-                "do catch ",
-                block,
-                Some(&expr.attrs),
-                None,
-                shape,
-            ) {
+        ast::ExprKind::TryBlock(ref block) => {
+            if let rw @ Some(_) =
+                rewrite_single_line_block(context, "try ", block, Some(&expr.attrs), None, shape)
+            {
                 rw
             } else {
-                // 9 = `do catch `
+                // 9 = `try `
                 let budget = shape.width.saturating_sub(9);
                 Some(format!(
                     "{}{}",
-                    "do catch ",
+                    "try ",
                     rewrite_block(
                         block,
                         Some(&expr.attrs),
@@ -343,8 +338,10 @@ fn needs_space_after_range(rhs: &ast::Expr) -> bool {
                 ))
             }
         }
-        // FIXME(#2743)
-        ast::ExprKind::ObsoleteInPlace(..) => unimplemented!(),
+        ast::ExprKind::ObsoleteInPlace(ref lhs, ref rhs) => lhs
+            .rewrite(context, shape)
+            .map(|s| s + " <-")
+            .and_then(|lhs| rewrite_assign_rhs(context, lhs, &**rhs, shape)),
         ast::ExprKind::Async(capture_by, _node_id, ref block) => {
             let mover = if capture_by == ast::CaptureBy::Value {
                 "move "
@@ -425,7 +422,9 @@ fn rewrite_empty_block(
         return None;
     }
 
-    if block.stmts.is_empty() && !block_contains_comment(block, context.codemap) && shape.width >= 2
+    if block.stmts.is_empty()
+        && !block_contains_comment(block, context.source_map)
+        && shape.width >= 2
     {
         return Some(format!("{}{}{{}}", prefix, label_str));
     }
@@ -483,7 +482,7 @@ fn rewrite_single_line_block(
     label: Option<ast::Label>,
     shape: Shape,
 ) -> Option<String> {
-    if is_simple_block(block, attrs, context.codemap) {
+    if is_simple_block(block, attrs, context.source_map) {
         let expr_shape = shape.offset_left(last_line_width(prefix))?;
         let expr_str = block.stmts[0].rewrite(context, expr_shape)?;
         let label_str = rewrite_label(label);
@@ -769,8 +768,8 @@ fn rewrite_single_line(
         let fixed_cost = self.keyword.len() + "  {  } else {  }".len();
 
         if let ast::ExprKind::Block(ref else_node, _) = else_block.node {
-            if !is_simple_block(self.block, None, context.codemap)
-                || !is_simple_block(else_node, None, context.codemap)
+            if !is_simple_block(self.block, None, context.source_map)
+                || !is_simple_block(else_node, None, context.source_map)
                 || pat_expr_str.contains('\n')
             {
                 return None;
@@ -1113,8 +1112,8 @@ fn extract_comment(span: Span, context: &RewriteContext, shape: Shape) -> Option
     }
 }
 
-pub fn block_contains_comment(block: &ast::Block, codemap: &CodeMap) -> bool {
-    let snippet = codemap.span_to_snippet(block.span).unwrap();
+pub fn block_contains_comment(block: &ast::Block, source_map: &SourceMap) -> bool {
+    let snippet = source_map.span_to_snippet(block.span).unwrap();
     contains_comment(&snippet)
 }
 
@@ -1125,11 +1124,11 @@ pub fn block_contains_comment(block: &ast::Block, codemap: &CodeMap) -> bool {
 pub fn is_simple_block(
     block: &ast::Block,
     attrs: Option<&[ast::Attribute]>,
-    codemap: &CodeMap,
+    source_map: &SourceMap,
 ) -> bool {
     (block.stmts.len() == 1
         && stmt_is_expr(&block.stmts[0])
-        && !block_contains_comment(block, codemap)
+        && !block_contains_comment(block, source_map)
         && attrs.map_or(true, |a| a.is_empty()))
 }
 
@@ -1138,10 +1137,10 @@ pub fn is_simple_block(
 pub fn is_simple_block_stmt(
     block: &ast::Block,
     attrs: Option<&[ast::Attribute]>,
-    codemap: &CodeMap,
+    source_map: &SourceMap,
 ) -> bool {
     block.stmts.len() <= 1
-        && !block_contains_comment(block, codemap)
+        && !block_contains_comment(block, source_map)
         && attrs.map_or(true, |a| a.is_empty())
 }
 
@@ -1150,10 +1149,10 @@ pub fn is_simple_block_stmt(
 pub fn is_empty_block(
     block: &ast::Block,
     attrs: Option<&[ast::Attribute]>,
-    codemap: &CodeMap,
+    source_map: &SourceMap,
 ) -> bool {
     block.stmts.is_empty()
-        && !block_contains_comment(block, codemap)
+        && !block_contains_comment(block, source_map)
         && attrs.map_or(true, |a| inner_attributes(a).is_empty())
 }