diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs index 08085ac7841f2..0f2ab6d695511 100644 --- a/crates/ide/src/doc_links.rs +++ b/crates/ide/src/doc_links.rs @@ -362,14 +362,15 @@ fn map_links<'e>( // holds the origin link target on start event and the rewritten one on end event let mut end_link_target: Option = None; // normally link's type is determined by the type of link tag in the end event, - // however in same cases we want to change the link type, for example, - // `Shortcut` type doesn't make sense for url links + // however in some cases we want to change the link type, for example, + // `Shortcut` type parsed from Start/End tags doesn't make sense for url links let mut end_link_type: Option = None; events.map(move |evt| match evt { - Event::Start(Tag::Link(_, ref target, _)) => { + Event::Start(Tag::Link(link_type, ref target, _)) => { in_link = true; end_link_target = Some(target.clone()); + end_link_type = Some(link_type); evt } Event::End(Tag::Link(link_type, target, _)) => { @@ -384,14 +385,18 @@ fn map_links<'e>( let (link_type, link_target_s, link_name) = callback(&end_link_target.take().unwrap(), &s); end_link_target = Some(CowStr::Boxed(link_target_s.into())); - end_link_type = link_type; + if !matches!(end_link_type, Some(LinkType::Autolink)) { + end_link_type = link_type; + } Event::Text(CowStr::Boxed(link_name.into())) } Event::Code(s) if in_link => { let (link_type, link_target_s, link_name) = callback(&end_link_target.take().unwrap(), &s); end_link_target = Some(CowStr::Boxed(link_target_s.into())); - end_link_type = link_type; + if !matches!(end_link_type, Some(LinkType::Autolink)) { + end_link_type = link_type; + } Event::Code(CowStr::Boxed(link_name.into())) } _ => evt, diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs index 8eb16aab29392..af502e4106567 100644 --- a/crates/ide/src/hover/tests.rs +++ b/crates/ide/src/hover/tests.rs @@ -3808,6 +3808,7 @@ fn foo() { /// [closure] /// [closures][closure] /// [threads] +/// /// /// [closure]: ../book/ch13-01-closures.html /// [threads]: ../book/ch16-01-threads.html#using-move-closures-with-threads @@ -3825,6 +3826,7 @@ mod move_keyword {} [closure](https://doc.rust-lang.org/nightly/book/ch13-01-closures.html) [closures](https://doc.rust-lang.org/nightly/book/ch13-01-closures.html) [threads](https://doc.rust-lang.org/nightly/book/ch16-01-threads.html#using-move-closures-with-threads) + "##]], ); }