Fix intra-doc links for Self on cross-crate items and primitives#76467
Fix intra-doc links for Self on cross-crate items and primitives#76467bors merged 3 commits intorust-lang:masterfrom
Self on cross-crate items and primitives#76467Conversation
This comment has been minimized.
This comment has been minimized.
|
@bors r+ much nicer, thanks |
|
📌 Commit c90f2ff207aaa3ae45421add0215690095730ccb has been approved by |
|
@bors r- Failed documenting libstd: |
|
The issue is that the hack I used for |
|
Hmm ... I'm starting to wonder if we should be doing textual substitution at all for |
|
Ok yeah my sketch of an idea is that instead of turning this into a string, I turn it into a Actually to make this even more consistent, I could strip |
|
Another possible hack is to prepend |
This comment has been minimized.
This comment has been minimized.
c90f2ff to
4296022
Compare
|
Ok, I have the rustdoc side of this mostly working, but I'm not sure how to pass the partial resolution to @petrochenkov do you know how I would tell resolve ' |
|
I did find |
This comment has been minimized.
This comment has been minimized.
4296022 to
6d6b311
Compare
|
Hold on a second ...
So resolving that path segment doesn't need to go through resolve at all! It has all the info it needs available from Petrochenkov, sorry for the ping, I think I figured it out. |
Refactor and fix intra-doc link diagnostics, and fix links to primitives Closes rust-lang#76925, closes rust-lang#76693, closes rust-lang#76692. Originally I only meant to fix rust-lang#76925. But the hack with `has_primitive` was so bad it was easier to fix the primitive issues than to try and work around it. Note that this still has one bug: `std::primitive::i32::MAX` does not resolve. However, this fixes the ICE so I'm fine with fixing the link in a later PR. This is part of a series of refactors to make rust-lang#76467 possible. This is best reviewed commit-by-commit; it has detailed commit messages. r? @euclio
Refactor and fix intra-doc link diagnostics, and fix links to primitives Closes rust-lang#76925, closes rust-lang#76693, closes rust-lang#76692. Originally I only meant to fix rust-lang#76925. But the hack with `has_primitive` was so bad it was easier to fix the primitive issues than to try and work around it. Note that this still has one bug: `std::primitive::i32::MAX` does not resolve. However, this fixes the ICE so I'm fine with fixing the link in a later PR. This is part of a series of refactors to make rust-lang#76467 possible. This is best reviewed commit-by-commit; it has detailed commit messages. r? `@euclio`
This comment has been minimized.
This comment has been minimized.
6d6b311 to
82453c3
Compare
837dc4e to
b2fe714
Compare
|
Rather than trying to rewrite all of intra-doc links at once, I changed this to use fully-qualified paths when stringifying DefIds. This is less reliable than using the DefId directly, but should let this land (and unblock #77700) without needing giant refactors. I still need to add a test case for #77875 (comment), I haven't been able to make an MCVE. |
|
cc @da-x - is there a better way to get the fully-qualified path of a type than the current hack? https://github.com/rust-lang/rust/blob/b2fe71488ffdaf9eadaabd25b5fd24e56512277a/src/librustdoc/passes/collect_intra_doc_links.rs#L852-L859 |
SelfSelf on cross-crate items and primitives
- Remove the difference between `parent_item` and `current_item`; these should never have been different. - Remove `current_item` from `resolve` and `variant_field` so that `Self` is only substituted in one place at the very start. - Resolve the current item as a `DefId`, not a `HirId`. This is what actually fixed the bug. Hacks: - `clean` uses `TypedefItem` when it _really_ should be `AssociatedTypeItem`. I tried fixing this without success and hacked around it instead (see comments) - This stringifies DefIds, then resolves them a second time. This is really silly and rustdoc should just use DefIds throughout. Fixing this is a larger task than I want to take on right now.
b2fe714 to
aa8c9b0
Compare
|
@Manishearth this is actually ready to go this time 😆 |
|
@bors r+ |
|
📌 Commit 2b17f02 has been approved by |
Fix intra-doc links for `Self` on cross-crate items and primitives - Remove the difference between `parent_item` and `current_item`; these should never have been different. - Remove `current_item` from `resolve` and `variant_field` so that `Self` is only substituted in one place at the very start. - Resolve the current item as a `DefId`, not a `HirId`. This is what actually fixed the bug. Hacks: - `clean` uses `TypedefItem` when it _really_ should be `AssociatedTypeItem`. I tried fixing this without success and hacked around it instead (see comments) - This second-guesses the `to_string()` impl since it wants fully-qualified paths. Possibly there's a better way to do this.
|
☀️ Test successful - checks-actions |
parent_itemandcurrent_item; theseshould never have been different.
current_itemfromresolveandvariant_fieldso thatSelfis only substituted in one place at the very start.DefId, not aHirId. This is whatactually fixed the bug.
Hacks:
cleanusesTypedefItemwhen it really should beAssociatedTypeItem. I tried fixing this without success and hackedaround it instead (see comments)
to_string()impl since it wantsfully-qualified paths. Possibly there's a better way to do this.