diff options
| author | Justus K <justus.k@protonmail.com> | 2021-05-02 19:39:33 +0200 |
|---|---|---|
| committer | Justus K <justus.k@protonmail.com> | 2021-05-02 21:16:50 +0200 |
| commit | 9ca6d5863be4ca847458a8b42e995b98406ad015 (patch) | |
| tree | 7aa341a7cfa2287ccfc3bc6c2771c7c043a7df04 | |
| parent | 89ebad52a8b5a6d89d66a158d377cd7505ec4b48 (diff) | |
| download | rust-9ca6d5863be4ca847458a8b42e995b98406ad015.tar.gz rust-9ca6d5863be4ca847458a8b42e995b98406ad015.zip | |
Do not print visibility in external traits
| -rw-r--r-- | src/librustdoc/clean/inline.rs | 16 | ||||
| -rw-r--r-- | src/test/rustdoc/auxiliary/trait-visibility.rs | 3 | ||||
| -rw-r--r-- | src/test/rustdoc/trait-visibility.rs | 8 |
3 files changed, 24 insertions, 3 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 5dd9f3f1ebd..0ff7e8c4d83 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -19,7 +19,7 @@ use crate::clean::{self, Attributes, AttributesExt, GetDefId, ToSource}; use crate::core::DocContext; use crate::formats::item_type::ItemType; -use super::Clean; +use super::{Clean, Visibility}; type Attrs<'hir> = rustc_middle::ty::Attributes<'hir>; @@ -193,8 +193,18 @@ crate fn record_extern_fqn(cx: &mut DocContext<'_>, did: DefId, kind: ItemType) } crate fn build_external_trait(cx: &mut DocContext<'_>, did: DefId) -> clean::Trait { - let trait_items = - cx.tcx.associated_items(did).in_definition_order().map(|item| item.clean(cx)).collect(); + let trait_items = cx + .tcx + .associated_items(did) + .in_definition_order() + .map(|item| { + // When building an external trait, the cleaned trait will have all items public, + // which causes methods to have a `pub` prefix, which is invalid since items in traits + // can not have a visibility prefix. Thus we override the visibility here manually. + // See https://github.com/rust-lang/rust/issues/81274 + clean::Item { visibility: Visibility::Inherited, ..item.clean(cx) } + }) + .collect(); let predicates = cx.tcx.predicates_of(did); let generics = (cx.tcx.generics_of(did), predicates).clean(cx); diff --git a/src/test/rustdoc/auxiliary/trait-visibility.rs b/src/test/rustdoc/auxiliary/trait-visibility.rs new file mode 100644 index 00000000000..1e8d0b8e02a --- /dev/null +++ b/src/test/rustdoc/auxiliary/trait-visibility.rs @@ -0,0 +1,3 @@ +pub trait Bar { + fn foo(); +} diff --git a/src/test/rustdoc/trait-visibility.rs b/src/test/rustdoc/trait-visibility.rs new file mode 100644 index 00000000000..8ba3ee03a74 --- /dev/null +++ b/src/test/rustdoc/trait-visibility.rs @@ -0,0 +1,8 @@ +// aux-build:trait-visibility.rs + +#![crate_name = "foo"] + +extern crate trait_visibility; + +// @has foo/trait.Bar.html '//a[@href="#tymethod.foo"]/..' "fn foo()" +pub use trait_visibility::Bar; |
