about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDániel Buga <bugadani@gmail.com>2020-12-31 10:26:24 +0100
committerDániel Buga <bugadani@gmail.com>2020-12-31 10:41:29 +0100
commit854b9d172798ff33472a0ffe2d76cd4605ceeada (patch)
tree5d97bfbe87b4cb410d9480017532569fb287ea67
parentcb4317de008408945bb873155d67439579b12b6c (diff)
downloadrust-854b9d172798ff33472a0ffe2d76cd4605ceeada.tar.gz
rust-854b9d172798ff33472a0ffe2d76cd4605ceeada.zip
Collect links into a single vector
-rw-r--r--src/librustdoc/html/markdown.rs12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index b642f27c0b4..f0dd552f82c 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -25,6 +25,7 @@ use rustc_session::lint;
 use rustc_span::edition::Edition;
 use rustc_span::Span;
 use std::borrow::Cow;
+use std::cell::RefCell;
 use std::collections::VecDeque;
 use std::default::Default;
 use std::fmt::Write;
@@ -1132,8 +1133,7 @@ crate fn markdown_links(md: &str) -> Vec<(String, Range<usize>)> {
         return vec![];
     }
 
-    let mut links = vec![];
-    let mut shortcut_links = vec![];
+    let links = RefCell::new(vec![]);
 
     let locate = |s: &str, fallback: Range<usize>| unsafe {
         let s_start = s.as_ptr();
@@ -1152,7 +1152,7 @@ crate fn markdown_links(md: &str) -> Vec<(String, Range<usize>)> {
     let mut push = |link: BrokenLink<'_>| {
         // FIXME: use `link.span` instead of `locate`
         // (doing it now includes the `[]` as well as the text)
-        shortcut_links.push((link.reference.to_owned(), locate(link.reference, link.span)));
+        links.borrow_mut().push((link.reference.to_owned(), locate(link.reference, link.span)));
         None
     };
     let p = Parser::new_with_broken_link_callback(md, opts(), Some(&mut push)).into_offset_iter();
@@ -1165,16 +1165,14 @@ crate fn markdown_links(md: &str) -> Vec<(String, Range<usize>)> {
     for ev in iter {
         if let Event::Start(Tag::Link(_, dest, _)) = ev.0 {
             debug!("found link: {}", dest);
-            links.push(match dest {
+            links.borrow_mut().push(match dest {
                 CowStr::Borrowed(s) => (s.to_owned(), locate(s, ev.1)),
                 s @ (CowStr::Boxed(..) | CowStr::Inlined(..)) => (s.into_string(), ev.1),
             });
         }
     }
 
-    links.append(&mut shortcut_links);
-
-    links
+    links.into_inner()
 }
 
 #[derive(Debug)]