diff options
Diffstat (limited to 'src/utils.rs')
| -rw-r--r-- | src/utils.rs | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/src/utils.rs b/src/utils.rs index 3b03ede2be3..5c2bca73432 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -20,42 +20,50 @@ use rewrite::{Rewrite, RewriteContext}; use SKIP_ANNOTATION; -// Computes the length of a string's last line, minus offset. -#[inline] -pub fn extra_offset(text: &str, offset: Indent) -> usize { - match text.rfind('\n') { - // 1 for newline character - Some(idx) => text.len() - idx - 1 - offset.width(), - None => text.len(), - } +pub trait CodeMapSpanUtils { + fn span_after(&self, original: Span, needle: &str) -> BytePos; + fn span_after_last(&self, original: Span, needle: &str) -> BytePos; + fn span_before(&self, original: Span, needle: &str) -> BytePos; } -#[inline] -pub fn span_after(original: Span, needle: &str, codemap: &CodeMap) -> BytePos { - let snippet = codemap.span_to_snippet(original).unwrap(); - let offset = snippet.find_uncommented(needle).unwrap() + needle.len(); +impl CodeMapSpanUtils for CodeMap { + #[inline] + fn span_after(&self, original: Span, needle: &str) -> BytePos { + let snippet = self.span_to_snippet(original).unwrap(); + let offset = snippet.find_uncommented(needle).unwrap() + needle.len(); - original.lo + BytePos(offset as u32) -} + original.lo + BytePos(offset as u32) + } -#[inline] -pub fn span_before(original: Span, needle: &str, codemap: &CodeMap) -> BytePos { - let snippet = codemap.span_to_snippet(original).unwrap(); - let offset = snippet.find_uncommented(needle).unwrap(); + #[inline] + fn span_after_last(&self, original: Span, needle: &str) -> BytePos { + let snippet = self.span_to_snippet(original).unwrap(); + let mut offset = 0; - original.lo + BytePos(offset as u32) -} + while let Some(additional_offset) = snippet[offset..].find_uncommented(needle) { + offset += additional_offset + needle.len(); + } -#[inline] -pub fn span_after_last(original: Span, needle: &str, codemap: &CodeMap) -> BytePos { - let snippet = codemap.span_to_snippet(original).unwrap(); - let mut offset = 0; + original.lo + BytePos(offset as u32) + } + + #[inline] + fn span_before(&self, original: Span, needle: &str) -> BytePos { + let snippet = self.span_to_snippet(original).unwrap(); + let offset = snippet.find_uncommented(needle).unwrap(); - while let Some(additional_offset) = snippet[offset..].find_uncommented(needle) { - offset += additional_offset + needle.len(); + original.lo + BytePos(offset as u32) } +} - original.lo + BytePos(offset as u32) +// Computes the length of a string's last line, minus offset. +#[inline] +pub fn extra_offset(text: &str, offset: Indent) -> usize { + match text.rfind('\n') { + // 1 for newline character + Some(idx) => text.len() - idx - 1 - offset.width(), + None => text.len(), + } } #[inline] |
