about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2018-02-18 13:37:52 -0800
committerManish Goregaokar <manishsmail@gmail.com>2018-02-18 17:57:06 -0800
commitf60aeec5d564cf3ca0628db55abb8c62276e102f (patch)
tree4dce6a8f936d17c6c11dc010c4a54f4a0d1530d0
parent6818551c6f3a434752d0322fce03d594513b5ebd (diff)
downloadrust-f60aeec5d564cf3ca0628db55abb8c62276e102f.tar.gz
rust-f60aeec5d564cf3ca0628db55abb8c62276e102f.zip
Include shortcut links in markdown_links
-rw-r--r--src/librustdoc/html/markdown.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index fedd802ce55..bc7d1066ba4 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -731,18 +731,30 @@ pub fn markdown_links(md: &str) -> Vec<String> {
     opts.insert(OPTION_ENABLE_TABLES);
     opts.insert(OPTION_ENABLE_FOOTNOTES);
 
-    let p = Parser::new_ext(md, opts);
-
-    let iter = Footnotes::new(HeadingLinks::new(p, None));
     let mut links = vec![];
+    let shortcut_links = RefCell::new(vec![]);
+
+    {
+        let push = |_: &str, s: &str| {
+            shortcut_links.borrow_mut().push(s.to_owned());
+            None
+        };
+        let p = Parser::new_with_broken_link_callback(md, opts,
+            Some(&push));
 
-    for ev in iter {
-        if let Event::Start(Tag::Link(dest, _)) = ev {
-            debug!("found link: {}", dest);
-            links.push(dest.into_owned());
+        let iter = Footnotes::new(HeadingLinks::new(p, None));
+
+        for ev in iter {
+            if let Event::Start(Tag::Link(dest, _)) = ev {
+                debug!("found link: {}", dest);
+                links.push(dest.into_owned());
+            }
         }
     }
 
+    let mut shortcut_links = shortcut_links.into_inner();
+    links.extend(shortcut_links.drain(..));
+
     links
 }