From 3c39b016a4c538d645a7e0f5bdfd476e4588afd9 Mon Sep 17 00:00:00 2001 From: Timothy Clem Date: Wed, 17 Jun 2020 15:11:42 -0700 Subject: [PATCH] Trim whitespace from tag source lines --- tags/src/lib.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tags/src/lib.rs b/tags/src/lib.rs index 8cd73457..32eaa0d9 100644 --- a/tags/src/lib.rs +++ b/tags/src/lib.rs @@ -495,7 +495,16 @@ fn line_range(text: &[u8], index: usize, max_line_len: usize) -> Range { let start = memrchr(b'\n', &text[0..index]).map_or(0, |i| i + 1); let max_line_len = max_line_len.min(text.len() - start); let end = start + memchr(b'\n', &text[start..(start + max_line_len)]).unwrap_or(max_line_len); - start..end + trim_start(text, start..end) +} + +fn trim_start(text: &[u8], r: Range) -> Range { + for (index, c) in text[r.start..r.end].iter().enumerate() { + if !c.is_ascii_whitespace(){ + return index..r.end + } + } + return r } #[cfg(test)] @@ -514,4 +523,13 @@ mod tests { assert_eq!(line_range(text, 5, 10), 4..8); assert_eq!(line_range(text, 11, 10), 9..14); } + + #[test] + fn test_get_line_trims() { + let text = b" foo\nbar\n"; + assert_eq!(line_range(text, 0, 10), 3..6); + + let text = b"\t func foo\nbar\n"; + assert_eq!(line_range(text, 0, 10), 2..10); + } }