-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
get rid of some false negatives in rustdoc::broken_intra_doc_links #132748
base: master
Are you sure you want to change the base?
get rid of some false negatives in rustdoc::broken_intra_doc_links #132748
Conversation
r? @notriddle rustbot has assigned @notriddle. Use |
rustdoc will not try to do intra-doc linking if the "path" of a link looks too much like a "real url". however, only inline links ([text](url)) can actually contain a url, other types of links (reference links, shortcut links) contain a *reference* which is later resolved to an actual url. the "path" in this case cannot be a url, and therefore it should not be skipped due to looking like a url. fixes rust-lang#54191
df3d0f6
to
8ae6586
Compare
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks like a good idea, but I have found one problem. Consider a sample like this:
//@ check-pass
#![no_std]
#![deny(rustdoc::broken_intra_doc_links)]
// regression test for https://github.com/rust-lang/rust/issues/54191
// false positives
//! This is not an intra-doc link: [`foobar`]
//!
//! [`foobar`]: /index.html
That test case fails, because it thinks /index.html
is an intra-doc link. You're right that certain kinds of links aren't allowed to be URLs—that's the Unknown type links.
fix link kind check Co-authored-by: Michael Howell <[email protected]>
add error annotation Co-authored-by: Michael Howell <[email protected]>
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
welp, turns out the standard library itself contains several of these false negatives! |
...or perhaps there's some deeper bug with intra-doc link generation? there seems to be some false positives containing spaces, even though there is a matching reference definition... I guess we can just re-enable unconditionally ignoring links with spaces? |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Ok, this breaks a lot of ui tests. This might actually have a pretty big impact, maybe we should do a crater run or something..? |
It's looks fine to me. Here's the PRs where each of these test cases were added:
The last two are both contrived ICE tests, and all of them are intended to be parsed as intra-doc links. Making it so that they warn seems fine to me. r? @GuillaumeGomez do you also think this is a suitable bug fix? |
I think so. I'm not completely satisfied with the current impact though. Intra-doc links should not be triggered on items that contain characters which can't be in an ident or a path, like |
@GuillaumeGomez what about just amending the current warning to account for other common mistakes? honestly makes me wish we had regardless, i think that should be a separate issue, since the lint output isn't the most helpful in general (it just recommends escaping the brackets, and doesn't mention other common issues, such as misspelled link references) |
Do you have an example of before/after of what you have in mind by any chance? |
well, the most obvious one is some sort of "consider adding a reference: and perhaps we should also mention surrounding code by backticks, since code snippets should generally be in |
Sounds good to me. The distance between two items could be nice too (as a follow-up?). |
opened #132788 to track future improvements to this lint. |
The job Click to see the possible cause of the failure (guessed by this bot)
|
rustdoc will not try to do intra-doc linking if the "path" of a link looks too much like a "real url".
however, only inline links (text) can actually contain a url, other types of links (reference links, shortcut links) contain a reference which is later resolved to an actual url.
the "path" in this case cannot be a url, and therefore it should not be skipped due to looking like a url.
fixes #54191