about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNick Cameron <nrc@ncameron.org>2015-10-24 11:14:24 +1300
committerNick Cameron <nrc@ncameron.org>2015-10-24 11:14:24 +1300
commit45bcf59bdee49bb81182e89abceae2d5466e9986 (patch)
tree510aa2655b3ebf20986c95dfe42e5ea6b723f194
parent02c118ae7207c2d5a48a2b1cf5f6a59dbbe1d314 (diff)
parent0bb979bb852ca8889492f595245ec9f55d1c94e8 (diff)
Merge pull request #528 from marcusklaas/chain-idempotence
Restore idempotence for chain formatting
-rw-r--r--src/chains.rs8
-rw-r--r--tests/source/chains.rs5
-rw-r--r--tests/target/chains-no-overflow.rs3
-rw-r--r--tests/target/chains.rs8
4 files changed, 18 insertions, 6 deletions
diff --git a/src/chains.rs b/src/chains.rs
index 4716f545b3f..f004a5798c2 100644
--- a/src/chains.rs
+++ b/src/chains.rs
@@ -80,11 +80,11 @@ pub fn rewrite_chain(mut expr: &ast::Expr,
     let veto_single_line = if context.config.take_source_hints && subexpr_list.len() > 1 {
         // Look at the source code. Unless all chain elements start on the same
         // line, we won't consider putting them on a single line either.
-        let first_line_no = context.codemap.lookup_char_pos(subexpr_list[0].span.lo).line;
+        let last_span = context.snippet(mk_sp(subexpr_list[1].span.hi, total_span.hi));
+        let first_span = context.snippet(subexpr_list[1].span);
+        let last_iter = last_span.chars().take_while(|c| c.is_whitespace());
 
-        subexpr_list[1..]
-            .iter()
-            .any(|ex| context.codemap.lookup_char_pos(ex.span.hi).line != first_line_no)
+        first_span.chars().chain(last_iter).any(|c| c == '\n')
     } else {
         false
     };
diff --git a/tests/source/chains.rs b/tests/source/chains.rs
index a50a9c51253..bf1ed31afe7 100644
--- a/tests/source/chains.rs
+++ b/tests/source/chains.rs
@@ -101,3 +101,8 @@ fn floaters() {
 
     a + match x { true => "yay!", false => "boo!" }.bar()
 }
+
+fn is_replaced_content() -> bool {
+    constellat.send(ConstellationMsg::ViewportConstrained(
+            self.id, constraints)).unwrap();
+}
diff --git a/tests/target/chains-no-overflow.rs b/tests/target/chains-no-overflow.rs
index 9b1f244637d..400db5f8df5 100644
--- a/tests/target/chains-no-overflow.rs
+++ b/tests/target/chains-no-overflow.rs
@@ -2,7 +2,8 @@
 // Test chain formatting without overflowing the last item.
 
 fn main() {
-    bbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc.ddddddddddddddddddddddddddd();
+    bbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc
+                       .ddddddddddddddddddddddddddd();
 
     bbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc
                        .ddddddddddddddddddddddddddd
diff --git a/tests/target/chains.rs b/tests/target/chains.rs
index 9e195b42d6e..2fb201011a5 100644
--- a/tests/target/chains.rs
+++ b/tests/target/chains.rs
@@ -7,7 +7,8 @@ fn main() {
              .1
              .foo(|x| x + 1);
 
-    bbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc.ddddddddddddddddddddddddddd();
+    bbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc
+                       .ddddddddddddddddddddddddddd();
 
     bbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccc
                        .ddddddddddddddddddddddddddd
@@ -126,3 +127,8 @@ fn floaters() {
     }
     .bar()
 }
+
+fn is_replaced_content() -> bool {
+    constellat.send(ConstellationMsg::ViewportConstrained(self.id, constraints))
+              .unwrap();
+}