rustdoc: fix ICE from rustc_resolve and librustdoc parse divergence

This commit is contained in:
Michael Howell 2023-04-18 12:22:13 -07:00
parent de96f3d873
commit df8a48fc8a
3 changed files with 61 additions and 0 deletions

View file

@ -367,6 +367,7 @@ fn preprocess_link(link: &str) -> Box<str> {
let link = link.strip_suffix("{}").unwrap_or(link);
let link = link.strip_suffix("[]").unwrap_or(link);
let link = if link != "!" { link.strip_suffix('!').unwrap_or(link) } else { link };
let link = link.trim();
strip_generics_from_path(link).unwrap_or_else(|_| link.into())
}

View file

@ -0,0 +1,6 @@
// this test used to ICE
#![deny(rustdoc::broken_intra_doc_links)]
//! [Clone ()]. //~ ERROR unresolved
//! [Clone !]. //~ ERROR incompatible
//! [`Clone ()`]. //~ ERROR unresolved
//! [`Clone !`]. //~ ERROR incompatible

View file

@ -0,0 +1,54 @@
error: unresolved link to `Clone`
--> $DIR/issue-110495-suffix-with-space.rs:3:6
|
LL | //! [Clone ()].
| ^^^^^^^^ this link resolves to the trait `Clone`, which is not in the value namespace
|
note: the lint level is defined here
--> $DIR/issue-110495-suffix-with-space.rs:2:9
|
LL | #![deny(rustdoc::broken_intra_doc_links)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: to link to the trait, prefix with `trait@`
|
LL - //! [Clone ()].
LL + //! [trait@Clone ].
|
error: incompatible link kind for `Clone`
--> $DIR/issue-110495-suffix-with-space.rs:4:6
|
LL | //! [Clone !].
| ^^^^^^^ this link resolved to a derive macro, which is not a macro
|
help: to link to the derive macro, prefix with `derive@`
|
LL - //! [Clone !].
LL + //! [derive@Clone ].
|
error: unresolved link to `Clone`
--> $DIR/issue-110495-suffix-with-space.rs:5:7
|
LL | //! [`Clone ()`].
| ^^^^^^^^ this link resolves to the trait `Clone`, which is not in the value namespace
|
help: to link to the trait, prefix with `trait@`
|
LL - //! [`Clone ()`].
LL + //! [`trait@Clone (`].
|
error: incompatible link kind for `Clone`
--> $DIR/issue-110495-suffix-with-space.rs:6:7
|
LL | //! [`Clone !`].
| ^^^^^^^ this link resolved to a derive macro, which is not a macro
|
help: to link to the derive macro, prefix with `derive@`
|
LL | //! [`derive@Clone !`].
| +++++++
error: aborting due to 4 previous errors