about summary refs log tree commit diff
path: root/src/patterns.rs
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2017-03-09 15:49:58 +1300
committerNick Cameron <ncameron@mozilla.com>2017-03-09 15:49:58 +1300
commite3aad6ee83a73be49132b65ea8abc099ae8da027 (patch)
treed6113143292ab0218f49897561d3873645177955 /src/patterns.rs
parentd107ca12b83b679ed7aab54a72fcd0d01b511ed8 (diff)
Be smarter about finding the span for `..` in patterns
Fixes #1319
Diffstat (limited to 'src/patterns.rs')
-rw-r--r--src/patterns.rs15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/patterns.rs b/src/patterns.rs
index 601506b4954..c1b3de56cfb 100644
--- a/src/patterns.rs
+++ b/src/patterns.rs
@@ -210,8 +210,19 @@ fn rewrite_tuple_pat(pats: &[ptr::P<ast::Pat>],
     let mut pat_vec: Vec<_> = pats.into_iter().map(|x| TuplePatField::Pat(x)).collect();
 
     if let Some(pos) = dotdot_pos {
-        let snippet = context.snippet(span);
-        let lo = span.lo + BytePos(snippet.find_uncommented("..").unwrap() as u32);
+        let prev = if pos == 0 {
+            span.lo
+        } else {
+            pats[pos - 1].span().hi
+        };
+        let next = if pos + 1 >= pats.len() {
+            span.hi
+        } else {
+            pats[pos + 1].span().lo
+        };
+        let dot_span = codemap::mk_sp(prev, next);
+        let snippet = context.snippet(dot_span);
+        let lo = dot_span.lo + BytePos(snippet.find_uncommented("..").unwrap() as u32);
         let span = Span {
             lo: lo,
             // 2 == "..".len()