Fix a case where the link type was None

Which caused a panic.
This commit is contained in:
Chayim Refael Friedman 2025-07-07 20:44:18 +03:00
parent 3816d0ae53
commit 793e1573d4
2 changed files with 30 additions and 3 deletions

View file

@ -505,7 +505,7 @@ fn map_links<'e>(
Event::End(Tag::Link(link_type, target, _)) => {
in_link = false;
Event::End(Tag::Link(
end_link_type.unwrap_or(link_type),
end_link_type.take().unwrap_or(link_type),
end_link_target.take().unwrap_or(target),
CowStr::Borrowed(""),
))
@ -514,7 +514,7 @@ fn map_links<'e>(
let (link_type, link_target_s, link_name) =
callback(&end_link_target.take().unwrap(), &s, range, end_link_type.unwrap());
end_link_target = Some(CowStr::Boxed(link_target_s.into()));
if !matches!(end_link_type, Some(LinkType::Autolink)) {
if !matches!(end_link_type, Some(LinkType::Autolink)) && link_type.is_some() {
end_link_type = link_type;
}
Event::Text(CowStr::Boxed(link_name.into()))
@ -523,7 +523,7 @@ fn map_links<'e>(
let (link_type, link_target_s, link_name) =
callback(&end_link_target.take().unwrap(), &s, range, end_link_type.unwrap());
end_link_target = Some(CowStr::Boxed(link_target_s.into()));
if !matches!(end_link_type, Some(LinkType::Autolink)) {
if !matches!(end_link_type, Some(LinkType::Autolink)) && link_type.is_some() {
end_link_type = link_type;
}
Event::Code(CowStr::Boxed(link_name.into()))

View file

@ -10958,3 +10958,30 @@ fn bar$0() -> Foo {
"#]],
);
}
#[test]
fn regression_20190() {
check(
r#"
struct Foo;
/// [`foo` bar](Foo).
fn has_docs$0() {}
"#,
expect![[r#"
*has_docs*
```rust
ra_test_fixture
```
```rust
fn has_docs()
```
---
[`foo` bar](https://docs.rs/ra_test_fixture/*/ra_test_fixture/struct.Foo.html).
"#]],
);
}