diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2017-03-09 15:49:58 +1300 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2017-03-09 15:49:58 +1300 |
| commit | e3aad6ee83a73be49132b65ea8abc099ae8da027 (patch) | |
| tree | d6113143292ab0218f49897561d3873645177955 /src/patterns.rs | |
| parent | d107ca12b83b679ed7aab54a72fcd0d01b511ed8 (diff) | |
Be smarter about finding the span for `..` in patterns
Fixes #1319
Diffstat (limited to 'src/patterns.rs')
| -rw-r--r-- | src/patterns.rs | 15 |
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() |
