return (
doc.to_owned(),
vec![
- (
- doc.len(),
- Span {
- lo: span.lo + BytePos(prefix.len() as u32),
- ..span
- }
- ),
+ (doc.len(), span.with_lo(span.lo() + BytePos(prefix.len() as u32))),
],
);
}
if comment.starts_with("/*") {
let doc = &comment[3..comment.len() - 2];
let mut sizes = vec![];
-
+ let mut contains_initial_stars = false;
for line in doc.lines() {
let offset = line.as_ptr() as usize - comment.as_ptr() as usize;
debug_assert_eq!(offset as u32 as usize, offset);
-
+ contains_initial_stars |= line.trim_left().starts_with('*');
// +1 for the newline
- sizes.push((
- line.len() + 1,
- Span {
- lo: span.lo + BytePos(offset as u32),
- ..span
- },
- ));
+ sizes.push((line.len() + 1, span.with_lo(span.lo() + BytePos(offset as u32))));
}
-
- return (doc.to_string(), sizes);
+ if !contains_initial_stars {
+ return (doc.to_string(), sizes);
+ }
+ // remove the initial '*'s if any
+ let mut no_stars = String::with_capacity(doc.len());
+ for line in doc.lines() {
+ let mut chars = line.chars();
+ while let Some(c) = chars.next() {
+ if c.is_whitespace() {
+ no_stars.push(c);
+ } else {
+ no_stars.push(if c == '*' { ' ' } else { c });
+ break;
+ }
+ }
+ no_stars.push_str(chars.as_str());
+ no_stars.push('\n');
+ }
+ return (no_stars, sizes);
}
panic!("not a doc-comment: {}", comment);
let (begin, span) = spans[index];
// Adjust for the begining of the current `Event`
- let span = Span {
- lo: span.lo + BytePos::from_usize(offset - begin),
- ..span
- };
+ let span = span.with_lo(span.lo() + BytePos::from_usize(offset - begin));
check_text(cx, valid_idents, &text, span);
}
// Adjust for the current word
let offset = word.as_ptr() as usize - text.as_ptr() as usize;
- let span = Span {
- lo: span.lo + BytePos::from_usize(offset),
- hi: span.lo + BytePos::from_usize(offset + word.len()),
- ..span
- };
+ let span = Span::new(
+ span.lo() + BytePos::from_usize(offset),
+ span.lo() + BytePos::from_usize(offset + word.len()),
+ span.ctxt(),
+ );
check_word(cx, word, span);
}