-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
rustdoc: add support for incoherent impls on structs and traits #103746
Merged
bors
merged 1 commit into
rust-lang:master
from
notriddle:notriddle/incoherent-dyn-trait
Oct 31, 2022
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#![feature(rustc_attrs)] | ||
|
||
#[rustc_has_incoherent_inherent_impls] | ||
pub trait FooTrait {} | ||
|
||
#[rustc_has_incoherent_inherent_impls] | ||
pub struct FooStruct; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// aux-build:incoherent-impl-types.rs | ||
// build-aux-docs | ||
|
||
#![crate_name = "foo"] | ||
#![feature(rustc_attrs)] | ||
|
||
extern crate incoherent_impl_types; | ||
|
||
// The only way this actually shows up is if the type gets inlined. | ||
#[doc(inline)] | ||
pub use incoherent_impl_types::FooTrait; | ||
|
||
// @has foo/trait.FooTrait.html | ||
// @count - '//section[@id="method.do_something"]' 1 | ||
impl dyn FooTrait { | ||
#[rustc_allow_incoherent_impl] | ||
pub fn do_something() {} | ||
} | ||
|
||
#[doc(inline)] | ||
pub use incoherent_impl_types::FooStruct; | ||
|
||
// @has foo/struct.FooStruct.html | ||
// @count - '//section[@id="method.do_something"]' 1 | ||
impl FooStruct { | ||
#[rustc_allow_incoherent_impl] | ||
pub fn do_something() {} | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Then the issue will remain for the JSON output if we fix it in
inline
, no?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 is only a problem in the HTML output because, if inlining isn’t performed, there’s nowhere to actually show it. JSON directly represents impl blocks as their own item, rather than attaching them to their types, so all it needs to do is not strip them out.
If there’s a problem in JSON output, the solution is going to be totally different and should probably be a separate PR.
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.
Makes sense! So no need for it.
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.
Probably still want to add a test case for JSON output on incoherent impl, but, again, separate PR.
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.
Yes, totally fine.