diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs index 47c870645ac..4555d98d2bf 100644 --- a/src/librustdoc/html/highlight.rs +++ b/src/librustdoc/html/highlight.rs @@ -235,6 +235,12 @@ fn new(src: &str, edition: Edition, file_span_lo: u32) -> Classifier<'_> { } } + /// Convenient wrapper around [`LightSpan::new_in_file`] to prevent passing the `file_span_lo` + /// argument every time. + fn new_light_span(&self, lo: u32, hi: u32) -> LightSpan { + LightSpan::new_in_file(self.file_span_lo, lo, hi) + } + /// Concatenate colons and idents as one when possible. fn get_full_ident_path(&mut self) -> Vec<(TokenKind, usize, usize)> { let start = self.byte_pos as usize; @@ -313,14 +319,12 @@ fn highlight(mut self, sink: &mut dyn FnMut(Highlight<'a>)) { .unwrap_or(false) { let tokens = self.get_full_ident_path(); - // We need this variable because `tokens` is consumed in the loop. - let skip = !tokens.is_empty(); - for (token, start, end) in tokens { - let text = &self.src[start..end]; - self.advance(token, text, sink, start as u32); + for (token, start, end) in &tokens { + let text = &self.src[*start..*end]; + self.advance(*token, text, sink, *start as u32); self.byte_pos += text.len() as u32; } - if skip { + if !tokens.is_empty() { continue; } } @@ -483,24 +487,16 @@ fn advance( self.in_macro_nonterminal = false; Class::MacroNonTerminal } - "self" | "Self" => Class::Self_(LightSpan::new_in_file( - self.file_span_lo, - before, - before + text.len() as u32, - )), - _ => Class::Ident(LightSpan::new_in_file( - self.file_span_lo, - before, - before + text.len() as u32, - )), + "self" | "Self" => { + Class::Self_(self.new_light_span(before, before + text.len() as u32)) + } + _ => Class::Ident(self.new_light_span(before, before + text.len() as u32)), }, Some(c) => c, }, - TokenKind::RawIdent | TokenKind::UnknownPrefix => Class::Ident(LightSpan::new_in_file( - self.file_span_lo, - before, - before + text.len() as u32, - )), + TokenKind::RawIdent | TokenKind::UnknownPrefix => { + Class::Ident(self.new_light_span(before, before + text.len() as u32)) + } TokenKind::Lifetime { .. } => Class::Lifetime, }; // Anything that didn't return above is the simple case where we the @@ -564,7 +560,7 @@ fn string( "self" | "Self" => write!( &mut path, "{}", - Class::Self_(LightSpan::empty()).as_html(), + Class::Self_(LightSpan::dummy()).as_html(), t ), "crate" | "super" => { diff --git a/src/librustdoc/html/render/span_map.rs b/src/librustdoc/html/render/span_map.rs index b60f5f433f7..390ac88faf0 100644 --- a/src/librustdoc/html/render/span_map.rs +++ b/src/librustdoc/html/render/span_map.rs @@ -51,7 +51,7 @@ impl LightSpan { Self { lo: lo + file_span_lo, hi: hi + file_span_lo } } - crate fn empty() -> Self { + crate fn dummy() -> Self { Self { lo: 0, hi: 0 } }