diff options
| author | Michael Goulet <michael@errs.io> | 2024-05-14 20:40:47 -0400 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-05-14 20:40:59 -0400 |
| commit | 8994840f7e61c1e90db35e7d966d0271880d905c (patch) | |
| tree | 3b15c94dd4fe273ece3d1866ef557d3bcd7f18fa | |
| parent | 8387315ab3c26a57a1f53a90f188f0bc88514bca (diff) | |
| download | rust-8994840f7e61c1e90db35e7d966d0271880d905c.tar.gz rust-8994840f7e61c1e90db35e7d966d0271880d905c.zip | |
rustdoc: Negative impls are not notable
4 files changed, 32 insertions, 0 deletions
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index b4e62e39d8d..18323e0b8ad 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1424,6 +1424,10 @@ pub(crate) fn notable_traits_button(ty: &clean::Type, cx: &mut Context<'_>) -> O if let Some(impls) = cx.cache().impls.get(&did) { for i in impls { let impl_ = i.inner_impl(); + if impl_.polarity != ty::ImplPolarity::Positive { + continue; + } + if !ty.is_doc_subtype_of(&impl_.for_, cx.cache()) { // Two different types might have the same did, // without actually being the same. @@ -1459,6 +1463,10 @@ fn notable_traits_decl(ty: &clean::Type, cx: &Context<'_>) -> (String, String) { for i in impls { let impl_ = i.inner_impl(); + if impl_.polarity != ty::ImplPolarity::Positive { + continue; + } + if !ty.is_doc_subtype_of(&impl_.for_, cx.cache()) { // Two different types might have the same did, // without actually being the same. diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-negative.negative.html b/tests/rustdoc/notable-trait/doc-notable_trait-negative.negative.html new file mode 100644 index 00000000000..6f19558cc15 --- /dev/null +++ b/tests/rustdoc/notable-trait/doc-notable_trait-negative.negative.html @@ -0,0 +1 @@ +<script type="text/json" id="notable-traits-data">{"Negative":"</code></pre>"}</script> \ No newline at end of file diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-negative.positive.html b/tests/rustdoc/notable-trait/doc-notable_trait-negative.positive.html new file mode 100644 index 00000000000..a3d0fedaaf4 --- /dev/null +++ b/tests/rustdoc/notable-trait/doc-notable_trait-negative.positive.html @@ -0,0 +1 @@ +<script type="text/json" id="notable-traits-data">{"Positive":"<h3>Notable traits for <code><a class=\"struct\" href=\"struct.Positive.html\" title=\"struct doc_notable_trait_negative::Positive\">Positive</a></code></h3><pre><code><div class=\"where\">impl <a class=\"trait\" href=\"trait.SomeTrait.html\" title=\"trait doc_notable_trait_negative::SomeTrait\">SomeTrait</a> for <a class=\"struct\" href=\"struct.Positive.html\" title=\"struct doc_notable_trait_negative::Positive\">Positive</a></div>"}</script> \ No newline at end of file diff --git a/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs b/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs new file mode 100644 index 00000000000..2bbe0a3ef8c --- /dev/null +++ b/tests/rustdoc/notable-trait/doc-notable_trait-negative.rs @@ -0,0 +1,22 @@ +#![feature(doc_notable_trait, negative_impls)] + +#[doc(notable_trait)] +pub trait SomeTrait {} + +pub struct Positive; +impl SomeTrait for Positive {} + +pub struct Negative; +impl !SomeTrait for Negative {} + +// @has doc_notable_trait_negative/fn.positive.html +// @snapshot positive - '//script[@id="notable-traits-data"]' +pub fn positive() -> Positive { + todo!() +} + +// @has doc_notable_trait_negative/fn.negative.html +// @count - '//script[@id="notable-traits-data"]' 0 +pub fn negative() -> Negative { + &[] +} |
