about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock8
-rw-r--r--crates/ide/Cargo.toml4
-rw-r--r--crates/ide/src/doc_links.rs25
3 files changed, 20 insertions, 17 deletions
diff --git a/Cargo.lock b/Cargo.lock
index b890b6e19f2..bcd89f3a838 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1191,9 +1191,9 @@ dependencies = [
 
 [[package]]
 name = "pulldown-cmark"
-version = "0.7.2"
+version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca36dea94d187597e104a5c8e4b07576a8a45aa5db48a65e12940d3eb7461f55"
+checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8"
 dependencies = [
  "bitflags",
  "memchr",
@@ -1202,9 +1202,9 @@ dependencies = [
 
 [[package]]
 name = "pulldown-cmark-to-cmark"
-version = "5.0.0"
+version = "6.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32accf4473121d8c0b508ca5673363703762d6cc59cf25af1df48f653346f736"
+checksum = "e8f2b9878102358ec65434fdd1a9a161f8648bb2f531acc9260e4d094c96de23"
 dependencies = [
  "pulldown-cmark",
 ]
diff --git a/crates/ide/Cargo.toml b/crates/ide/Cargo.toml
index f0257403d20..29dc9a6a8e3 100644
--- a/crates/ide/Cargo.toml
+++ b/crates/ide/Cargo.toml
@@ -16,8 +16,8 @@ itertools = "0.9.0"
 log = "0.4.8"
 rustc-hash = "1.1.0"
 oorandom = "11.1.2"
-pulldown-cmark-to-cmark = "5.0.0"
-pulldown-cmark = {version = "0.7.2", default-features = false}
+pulldown-cmark-to-cmark = "6.0.0"
+pulldown-cmark = { version = "0.8.0", default-features = false }
 url = "2.1.1"
 
 stdx = { path = "../stdx", version = "0.0.0" }
diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs
index 06af36b73e1..db3f911c82f 100644
--- a/crates/ide/src/doc_links.rs
+++ b/crates/ide/src/doc_links.rs
@@ -1,9 +1,10 @@
 //! Resolves and rewrites links in markdown documentation.
 
+use std::convert::TryFrom;
 use std::iter::once;
 
 use itertools::Itertools;
-use pulldown_cmark::{CowStr, Event, LinkType, Options, Parser, Tag};
+use pulldown_cmark::{BrokenLink, CowStr, Event, InlineStr, LinkType, Options, Parser, Tag};
 use pulldown_cmark_to_cmark::{cmark_with_options, Options as CmarkOptions};
 use url::Url;
 
@@ -24,11 +25,13 @@ pub type DocumentationLink = String;
 
 /// Rewrite documentation links in markdown to point to an online host (e.g. docs.rs)
 pub fn rewrite_links(db: &RootDatabase, markdown: &str, definition: &Definition) -> String {
-    let doc = Parser::new_with_broken_link_callback(
-        markdown,
-        Options::empty(),
-        Some(&|label, _| Some((/*url*/ label.to_string(), /*title*/ label.to_string()))),
-    );
+    let mut cb = |link: BrokenLink| {
+        Some((
+            /*url*/ link.reference.to_owned().into(),
+            /*title*/ link.reference.to_owned().into(),
+        ))
+    };
+    let doc = Parser::new_with_broken_link_callback(markdown, Options::empty(), Some(&mut cb));
 
     let doc = map_links(doc, |target, title: &str| {
         // This check is imperfect, there's some overlap between valid intra-doc links
@@ -66,11 +69,11 @@ pub fn remove_links(markdown: &str) -> String {
     let mut opts = Options::empty();
     opts.insert(Options::ENABLE_FOOTNOTES);
 
-    let doc = Parser::new_with_broken_link_callback(
-        markdown,
-        opts,
-        Some(&|_, _| Some((String::new(), String::new()))),
-    );
+    let mut cb = |_: BrokenLink| {
+        let empty = InlineStr::try_from("").unwrap();
+        Some((CowStr::Inlined(empty.clone()), CowStr::Inlined(empty)))
+    };
+    let doc = Parser::new_with_broken_link_callback(markdown, opts, Some(&mut cb));
     let doc = doc.filter_map(move |evt| match evt {
         Event::Start(Tag::Link(link_type, ref target, ref title)) => {
             if link_type == LinkType::Inline && target.contains("://") {