about summary refs log tree commit diff
path: root/src/libsyntax/codemap.rs
diff options
context:
space:
mode:
authorYukio Siraichi <yukio.siraichi@gmail.com>2018-03-17 15:41:46 -0300
committerYukio Siraichi <yukio.siraichi@gmail.com>2018-03-18 20:46:28 -0300
commit74a4928ed49d000dee9827c21f68148ad3aa271e (patch)
treeebf3558038a9f22ddadff427c2c3368651d2eb01 /src/libsyntax/codemap.rs
parentc1ba5ac62c14ab5e231edcce914fd33f0e32c2d1 (diff)
downloadrust-74a4928ed49d000dee9827c21f68148ad3aa271e.tar.gz
rust-74a4928ed49d000dee9827c21f68148ad3aa271e.zip
Review fixes.
- `span_suggestion` changed to `span_suggestion_short`;
- `Span` used changed to contain only `&` refs;
- Tests passing.
Diffstat (limited to 'src/libsyntax/codemap.rs')
-rw-r--r--src/libsyntax/codemap.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs
index a1aec052088..324d57c1194 100644
--- a/src/libsyntax/codemap.rs
+++ b/src/libsyntax/codemap.rs
@@ -697,6 +697,22 @@ impl CodeMap {
         sp
     }
 
+    /// Given a `Span`, get a shorter one until `predicate` yields false.
+    pub fn span_take_while<P>(&self, sp: Span, predicate: P) -> Span
+        where P: for <'r> FnMut(&'r char) -> bool
+    {
+        if let Ok(snippet) = self.span_to_snippet(sp) {
+            let offset = snippet.chars()
+                .take_while(predicate)
+                .map(|c| c.len_utf8())
+                .sum::<usize>();
+
+            sp.with_hi(BytePos(sp.lo().0 + (offset as u32)))
+        } else {
+            sp
+        }
+    }
+
     pub fn def_span(&self, sp: Span) -> Span {
         self.span_until_char(sp, '{')
     }