diff options
Diffstat (limited to 'crates/ide/src/link_rewrite.rs')
-rw-r--r-- | crates/ide/src/link_rewrite.rs | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/crates/ide/src/link_rewrite.rs b/crates/ide/src/link_rewrite.rs index acedea71b..107787bb9 100644 --- a/crates/ide/src/link_rewrite.rs +++ b/crates/ide/src/link_rewrite.rs | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | use hir::{Adt, Crate, HasAttrs, ModuleDef}; | 5 | use hir::{Adt, Crate, HasAttrs, ModuleDef}; |
6 | use ide_db::{defs::Definition, RootDatabase}; | 6 | use ide_db::{defs::Definition, RootDatabase}; |
7 | use pulldown_cmark::{CowStr, Event, Options, Parser, Tag}; | 7 | use pulldown_cmark::{CowStr, Event, LinkType, Options, Parser, Tag}; |
8 | use pulldown_cmark_to_cmark::{cmark_with_options, Options as CmarkOptions}; | 8 | use pulldown_cmark_to_cmark::{cmark_with_options, Options as CmarkOptions}; |
9 | use url::Url; | 9 | use url::Url; |
10 | 10 | ||
@@ -45,6 +45,41 @@ pub fn rewrite_links(db: &RootDatabase, markdown: &str, definition: &Definition) | |||
45 | out | 45 | out |
46 | } | 46 | } |
47 | 47 | ||
48 | /// Remove all links in markdown documentation. | ||
49 | pub fn remove_links(markdown: &str) -> String { | ||
50 | let mut drop_link = false; | ||
51 | |||
52 | let mut opts = Options::empty(); | ||
53 | opts.insert(Options::ENABLE_FOOTNOTES); | ||
54 | |||
55 | let doc = Parser::new_with_broken_link_callback( | ||
56 | markdown, | ||
57 | opts, | ||
58 | Some(&|_, _| Some((String::new(), String::new()))), | ||
59 | ); | ||
60 | let doc = doc.filter_map(move |evt| match evt { | ||
61 | Event::Start(Tag::Link(link_type, ref target, ref title)) => { | ||
62 | if link_type == LinkType::Inline && target.contains("://") { | ||
63 | Some(Event::Start(Tag::Link(link_type, target.clone(), title.clone()))) | ||
64 | } else { | ||
65 | drop_link = true; | ||
66 | None | ||
67 | } | ||
68 | } | ||
69 | Event::End(_) if drop_link => { | ||
70 | drop_link = false; | ||
71 | None | ||
72 | } | ||
73 | _ => Some(evt), | ||
74 | }); | ||
75 | |||
76 | let mut out = String::new(); | ||
77 | let mut options = CmarkOptions::default(); | ||
78 | options.code_block_backticks = 3; | ||
79 | cmark_with_options(doc, &mut out, None, options).ok(); | ||
80 | out | ||
81 | } | ||
82 | |||
48 | fn rewrite_intra_doc_link( | 83 | fn rewrite_intra_doc_link( |
49 | db: &RootDatabase, | 84 | db: &RootDatabase, |
50 | def: Definition, | 85 | def: Definition, |