From 58a34a4dde1aac009d5413b4eb414194764c5859 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 28 Jan 2021 17:05:22 +0100 Subject: [PATCH 1/5] Remove is_spotlight field from `Trait` --- src/librustdoc/clean/inline.rs | 6 +++--- src/librustdoc/clean/mod.rs | 3 --- src/librustdoc/clean/types.rs | 3 +-- src/librustdoc/clean/utils.rs | 18 +++++++++++++++++- src/librustdoc/core.rs | 2 +- src/librustdoc/fold.rs | 4 ++-- src/librustdoc/formats/cache.rs | 10 ++++++++-- src/librustdoc/html/render/mod.rs | 9 +++++---- src/librustdoc/json/conversions.rs | 2 +- src/librustdoc/json/mod.rs | 2 +- 10 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index ea75d1614bd80..519ec7216e386 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -195,14 +195,12 @@ crate fn build_external_trait(cx: &mut DocContext<'_>, did: DefId) -> clean::Tra let generics = (cx.tcx.generics_of(did), predicates).clean(cx); let generics = filter_non_trait_generics(did, generics); let (generics, supertrait_bounds) = separate_supertrait_bounds(generics); - let is_spotlight = load_attrs(cx, did).clean(cx).has_doc_flag(sym::spotlight); let is_auto = cx.tcx.trait_is_auto(did); clean::Trait { unsafety: cx.tcx.trait_def(did).unsafety, generics, items: trait_items, bounds: supertrait_bounds, - is_spotlight, is_auto, } } @@ -626,6 +624,8 @@ crate fn record_extern_trait(cx: &mut DocContext<'_>, did: DefId) { debug!("record_extern_trait: {:?}", did); let trait_ = build_external_trait(cx, did); - cx.external_traits.borrow_mut().insert(did, trait_); + cx.external_traits + .borrow_mut() + .insert(did, (trait_, clean::utils::has_doc_flag(cx.tcx.get_attrs(did), sym::spotlight))); cx.active_extern_traits.remove(&did); } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index b6e7046210596..7aa34333e175d 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2003,14 +2003,11 @@ impl Clean> for (&hir::Item<'_>, Option) { .iter() .map(|ti| cx.tcx.hir().trait_item(ti.id).clean(cx)) .collect(); - let attrs = item.attrs.clean(cx); - let is_spotlight = attrs.has_doc_flag(sym::spotlight); TraitItem(Trait { unsafety, items, generics: generics.clean(cx), bounds: bounds.clean(cx), - is_spotlight, is_auto: is_auto.clean(cx), }) } diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 9a2319f6e379d..0289ee9afb77b 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -57,7 +57,7 @@ crate struct Crate { crate primitives: Vec<(DefId, PrimitiveType)>, // These are later on moved into `CACHEKEY`, leaving the map empty. // Only here so that they can be filtered through the rustdoc passes. - crate external_traits: Rc>>, + crate external_traits: Rc>>, crate masked_crates: FxHashSet, crate collapsed: bool, } @@ -1185,7 +1185,6 @@ crate struct Trait { crate items: Vec, crate generics: Generics, crate bounds: Vec, - crate is_spotlight: bool, crate is_auto: bool, } diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index d2eee49f0c968..3473cc6931e83 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -7,13 +7,14 @@ use crate::clean::{ }; use crate::core::DocContext; +use rustc_attr::list_contains_name; use rustc_data_structures::fx::FxHashSet; use rustc_hir as hir; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, LOCAL_CRATE}; use rustc_middle::mir::interpret::ConstValue; use rustc_middle::ty::subst::{GenericArgKind, SubstsRef}; -use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt}; +use rustc_middle::ty::{self, Attributes, DefIdTree, Ty, TyCtxt}; use rustc_span::symbol::{kw, sym, Symbol}; use std::mem; @@ -520,3 +521,18 @@ crate fn find_nearest_parent_module(tcx: TyCtxt<'_>, def_id: DefId) -> Option, flag: Symbol) -> bool { + attrs.iter().any(|attr| { + attr.has_name(sym::doc) + && attr.meta_item_list().map_or(false, |l| list_contains_name(&l, flag)) + }) +} diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 8fceb00eeae51..5f24ec7b3f73e 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -55,7 +55,7 @@ crate struct DocContext<'tcx> { /// Later on moved into `cache` crate renderinfo: RenderInfo, /// Later on moved through `clean::Crate` into `cache` - crate external_traits: Rc>>, + crate external_traits: Rc>>, /// Used while populating `external_traits` to ensure we don't process the same trait twice at /// the same time. crate active_extern_traits: FxHashSet, diff --git a/src/librustdoc/fold.rs b/src/librustdoc/fold.rs index b2773a29e2905..752233ade3712 100644 --- a/src/librustdoc/fold.rs +++ b/src/librustdoc/fold.rs @@ -91,9 +91,9 @@ crate trait DocFolder: Sized { { let external_traits = { std::mem::take(&mut *c.external_traits.borrow_mut()) }; - for (k, mut v) in external_traits { + for (k, (mut v, is_spotlight)) in external_traits { v.items = v.items.into_iter().filter_map(|i| self.fold_item(i)).collect(); - c.external_traits.borrow_mut().insert(k, v); + c.external_traits.borrow_mut().insert(k, (v, is_spotlight)); } } c diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index ce1204c7be19c..a64eeb5bc5822 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -7,6 +7,7 @@ use rustc_hir::def_id::{CrateNum, DefId, CRATE_DEF_INDEX}; use rustc_middle::middle::privacy::AccessLevels; use rustc_middle::ty::TyCtxt; use rustc_span::source_map::FileName; +use rustc_span::symbol::sym; use rustc_span::Symbol; use crate::clean::{self, GetDefId}; @@ -64,7 +65,9 @@ crate struct Cache { /// Implementations of a crate should inherit the documentation of the /// parent trait if no extra documentation is specified, and default methods /// should show up in documentation about trait implementations. - crate traits: FxHashMap, + /// + /// The `bool` parameter is about if the trait is `spotlight`. + crate traits: FxHashMap, /// When rendering traits, it's often useful to be able to list all /// implementors of the trait, and this mapping is exactly, that: a mapping @@ -244,10 +247,13 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> { } } + let tcx = self.tcx; // Propagate a trait method's documentation to all implementors of the // trait. if let clean::TraitItem(ref t) = *item.kind { - self.cache.traits.entry(item.def_id).or_insert_with(|| t.clone()); + self.cache.traits.entry(item.def_id).or_insert_with(|| { + (t.clone(), clean::utils::has_doc_flag(tcx.get_attrs(item.def_id), sym::spotlight)) + }); } // Collect all the implementors of traits. diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 7f122bb8cb5ae..ab3c9bab64fbe 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -3687,8 +3687,9 @@ fn spotlight_decl(decl: &clean::FnDecl, cache: &Cache) -> String { if let Some(impls) = cache.impls.get(&did) { for i in impls { let impl_ = i.inner_impl(); - if impl_.trait_.def_id_full(cache).map_or(false, |d| cache.traits[&d].is_spotlight) - { + if impl_.trait_.def_id().map_or(false, |d| { + cache.traits.get(&d).map(|(_, is_spotlight)| *is_spotlight).unwrap_or(false) + }) { if out.is_empty() { write!( &mut out, @@ -3979,7 +3980,7 @@ fn render_impl( false, outer_version, outer_const_version, - trait_, + trait_.map(|(t, _)| t), show_def_docs, ); } @@ -4024,7 +4025,7 @@ fn render_impl( // We don't emit documentation for default items if they appear in the // Implementations on Foreign Types or Implementors sections. if show_default_items { - if let Some(t) = trait_ { + if let Some((t, _)) = trait_ { render_default_items( w, cx, diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index b248fcdefbe7f..da09d49a0066a 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -408,7 +408,7 @@ impl From for FnDecl { impl From for Trait { fn from(trait_: clean::Trait) -> Self { - let clean::Trait { unsafety, items, generics, bounds, is_spotlight: _, is_auto } = trait_; + let clean::Trait { unsafety, items, generics, bounds, is_auto } = trait_; Trait { is_auto, is_unsafe: unsafety == rustc_hir::Unsafety::Unsafe, diff --git a/src/librustdoc/json/mod.rs b/src/librustdoc/json/mod.rs index ce88e09b174e5..aa093ba0a772d 100644 --- a/src/librustdoc/json/mod.rs +++ b/src/librustdoc/json/mod.rs @@ -84,7 +84,7 @@ impl JsonRenderer<'tcx> { Rc::clone(&self.cache) .traits .iter() - .filter_map(|(&id, trait_item)| { + .filter_map(|(&id, (trait_item, _))| { // only need to synthesize items for external traits if !id.is_local() { trait_item.items.clone().into_iter().for_each(|i| self.item(i).unwrap()); From fa51c0f472fc9989f2dcc15f29e8b4079bcdb585 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 12 Feb 2021 13:55:34 +0100 Subject: [PATCH 2/5] Use a qualified path to make it more clear where `list_contains_name` function comes from --- src/librustdoc/clean/utils.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index 3473cc6931e83..92f9f5991e28e 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -7,7 +7,6 @@ use crate::clean::{ }; use crate::core::DocContext; -use rustc_attr::list_contains_name; use rustc_data_structures::fx::FxHashSet; use rustc_hir as hir; use rustc_hir::def::{DefKind, Res}; @@ -533,6 +532,6 @@ crate fn find_nearest_parent_module(tcx: TyCtxt<'_>, def_id: DefId) -> Option, flag: Symbol) -> bool { attrs.iter().any(|attr| { attr.has_name(sym::doc) - && attr.meta_item_list().map_or(false, |l| list_contains_name(&l, flag)) + && attr.meta_item_list().map_or(false, |l| rustc_attr::list_contains_name(&l, flag)) }) } From b5c8eea55d160f524305d09ad45c0d79493537b4 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 12 Feb 2021 14:33:32 +0100 Subject: [PATCH 3/5] Put clean::Trait extra information into a new struct to make it more coherent --- src/librustdoc/clean/inline.rs | 10 +++++++--- src/librustdoc/clean/types.rs | 9 ++++++++- src/librustdoc/core.rs | 2 +- src/librustdoc/fold.rs | 7 ++++--- src/librustdoc/formats/cache.rs | 12 +++++++----- src/librustdoc/html/render/mod.rs | 8 ++++---- src/librustdoc/json/mod.rs | 3 ++- 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 519ec7216e386..51cdcd74147d5 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -624,8 +624,12 @@ crate fn record_extern_trait(cx: &mut DocContext<'_>, did: DefId) { debug!("record_extern_trait: {:?}", did); let trait_ = build_external_trait(cx, did); - cx.external_traits - .borrow_mut() - .insert(did, (trait_, clean::utils::has_doc_flag(cx.tcx.get_attrs(did), sym::spotlight))); + cx.external_traits.borrow_mut().insert( + did, + clean::TraitWithExtraInfo { + trait_, + is_spotlight: clean::utils::has_doc_flag(cx.tcx.get_attrs(did), sym::spotlight), + }, + ); cx.active_extern_traits.remove(&did); } diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 0289ee9afb77b..51bef344e6722 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -57,11 +57,18 @@ crate struct Crate { crate primitives: Vec<(DefId, PrimitiveType)>, // These are later on moved into `CACHEKEY`, leaving the map empty. // Only here so that they can be filtered through the rustdoc passes. - crate external_traits: Rc>>, + crate external_traits: Rc>>, crate masked_crates: FxHashSet, crate collapsed: bool, } +/// This struct is used to wrap additional information added by rustdoc on a `trait` item. +#[derive(Clone, Debug)] +crate struct TraitWithExtraInfo { + crate trait_: Trait, + crate is_spotlight: bool, +} + #[derive(Clone, Debug)] crate struct ExternalCrate { crate name: Symbol, diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 5f24ec7b3f73e..3883652375fa5 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -55,7 +55,7 @@ crate struct DocContext<'tcx> { /// Later on moved into `cache` crate renderinfo: RenderInfo, /// Later on moved through `clean::Crate` into `cache` - crate external_traits: Rc>>, + crate external_traits: Rc>>, /// Used while populating `external_traits` to ensure we don't process the same trait twice at /// the same time. crate active_extern_traits: FxHashSet, diff --git a/src/librustdoc/fold.rs b/src/librustdoc/fold.rs index 752233ade3712..2b980ebe5926a 100644 --- a/src/librustdoc/fold.rs +++ b/src/librustdoc/fold.rs @@ -91,9 +91,10 @@ crate trait DocFolder: Sized { { let external_traits = { std::mem::take(&mut *c.external_traits.borrow_mut()) }; - for (k, (mut v, is_spotlight)) in external_traits { - v.items = v.items.into_iter().filter_map(|i| self.fold_item(i)).collect(); - c.external_traits.borrow_mut().insert(k, (v, is_spotlight)); + for (k, mut v) in external_traits { + v.trait_.items = + v.trait_.items.into_iter().filter_map(|i| self.fold_item(i)).collect(); + c.external_traits.borrow_mut().insert(k, v); } } c diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index a64eeb5bc5822..ef4e0e0d57c92 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -65,9 +65,7 @@ crate struct Cache { /// Implementations of a crate should inherit the documentation of the /// parent trait if no extra documentation is specified, and default methods /// should show up in documentation about trait implementations. - /// - /// The `bool` parameter is about if the trait is `spotlight`. - crate traits: FxHashMap, + crate traits: FxHashMap, /// When rendering traits, it's often useful to be able to list all /// implementors of the trait, and this mapping is exactly, that: a mapping @@ -251,8 +249,12 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> { // Propagate a trait method's documentation to all implementors of the // trait. if let clean::TraitItem(ref t) = *item.kind { - self.cache.traits.entry(item.def_id).or_insert_with(|| { - (t.clone(), clean::utils::has_doc_flag(tcx.get_attrs(item.def_id), sym::spotlight)) + self.cache.traits.entry(item.def_id).or_insert_with(|| clean::TraitWithExtraInfo { + trait_: t.clone(), + is_spotlight: clean::utils::has_doc_flag( + tcx.get_attrs(item.def_id), + sym::spotlight, + ), }); } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index ab3c9bab64fbe..b21f6a1339236 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -3688,7 +3688,7 @@ fn spotlight_decl(decl: &clean::FnDecl, cache: &Cache) -> String { for i in impls { let impl_ = i.inner_impl(); if impl_.trait_.def_id().map_or(false, |d| { - cache.traits.get(&d).map(|(_, is_spotlight)| *is_spotlight).unwrap_or(false) + cache.traits.get(&d).map(|t| t.is_spotlight).unwrap_or(false) }) { if out.is_empty() { write!( @@ -3980,7 +3980,7 @@ fn render_impl( false, outer_version, outer_const_version, - trait_.map(|(t, _)| t), + trait_.map(|t| &t.trait_), show_def_docs, ); } @@ -4025,11 +4025,11 @@ fn render_impl( // We don't emit documentation for default items if they appear in the // Implementations on Foreign Types or Implementors sections. if show_default_items { - if let Some((t, _)) = trait_ { + if let Some(t) = trait_ { render_default_items( w, cx, - t, + &t.trait_, &i.inner_impl(), &i.impl_item, render_mode, diff --git a/src/librustdoc/json/mod.rs b/src/librustdoc/json/mod.rs index aa093ba0a772d..a3b214677941b 100644 --- a/src/librustdoc/json/mod.rs +++ b/src/librustdoc/json/mod.rs @@ -84,9 +84,10 @@ impl JsonRenderer<'tcx> { Rc::clone(&self.cache) .traits .iter() - .filter_map(|(&id, (trait_item, _))| { + .filter_map(|(&id, trait_item)| { // only need to synthesize items for external traits if !id.is_local() { + let trait_item = &trait_item.trait_; trait_item.items.clone().into_iter().for_each(|i| self.item(i).unwrap()); Some(( from_def_id(id), From 3c59e64abf99f57baca9493e1ffe66844074e677 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 14 Feb 2021 14:47:55 +0100 Subject: [PATCH 4/5] * Fix some typo * Improve documentation * Add a test to ensure that spotlighted traits from dependencies are taken into account as expected --- src/librustdoc/clean/utils.rs | 11 +++++---- src/librustdoc/formats/cache.rs | 6 +---- src/test/rustdoc/spotlight-from-dependency.rs | 24 +++++++++++++++++++ 3 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 src/test/rustdoc/spotlight-from-dependency.rs diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index 92f9f5991e28e..0089a3838f423 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -521,14 +521,15 @@ crate fn find_nearest_parent_module(tcx: TyCtxt<'_>, def_id: DefId) -> Option, flag: Symbol) -> bool { attrs.iter().any(|attr| { attr.has_name(sym::doc) diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index ef4e0e0d57c92..e9c5dd50d59a8 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -245,16 +245,12 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> { } } - let tcx = self.tcx; // Propagate a trait method's documentation to all implementors of the // trait. if let clean::TraitItem(ref t) = *item.kind { self.cache.traits.entry(item.def_id).or_insert_with(|| clean::TraitWithExtraInfo { trait_: t.clone(), - is_spotlight: clean::utils::has_doc_flag( - tcx.get_attrs(item.def_id), - sym::spotlight, - ), + is_spotlight: item.attrs.has_doc_flag(sym::spotlight), }); } diff --git a/src/test/rustdoc/spotlight-from-dependency.rs b/src/test/rustdoc/spotlight-from-dependency.rs new file mode 100644 index 0000000000000..ed42c43594540 --- /dev/null +++ b/src/test/rustdoc/spotlight-from-dependency.rs @@ -0,0 +1,24 @@ +#![crate_name = "foo"] + +use std::iter::Iterator; + +// @has foo/struct.Odd.html +// @has - '//h4[@id="method.new"]//span[@class="notable-traits"]//code/span' 'impl Iterator for Odd' +pub struct Odd { + current: usize, +} + +impl Odd { + pub fn new() -> Odd { + Odd { current: 1 } + } +} + +impl Iterator for Odd { + type Item = usize; + + fn next(&mut self) -> Option { + self.current += 2; + Some(self.current - 2) + } +} From 33aaead6a1bdd4b2fde50efde825d2a770d8ecb8 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 23 Feb 2021 22:13:48 +0100 Subject: [PATCH 5/5] Improve code readability --- src/librustdoc/clean/inline.rs | 12 +++++------- src/librustdoc/clean/utils.rs | 4 ++-- src/librustdoc/core.rs | 7 +++++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 51cdcd74147d5..f9c63186544a4 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -624,12 +624,10 @@ crate fn record_extern_trait(cx: &mut DocContext<'_>, did: DefId) { debug!("record_extern_trait: {:?}", did); let trait_ = build_external_trait(cx, did); - cx.external_traits.borrow_mut().insert( - did, - clean::TraitWithExtraInfo { - trait_, - is_spotlight: clean::utils::has_doc_flag(cx.tcx.get_attrs(did), sym::spotlight), - }, - ); + let trait_ = clean::TraitWithExtraInfo { + trait_, + is_spotlight: clean::utils::has_doc_flag(cx.tcx.get_attrs(did), sym::spotlight), + }; + cx.external_traits.borrow_mut().insert(did, trait_); cx.active_extern_traits.remove(&did); } diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index 0089a3838f423..a0a2b78535368 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -13,7 +13,7 @@ use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, LOCAL_CRATE}; use rustc_middle::mir::interpret::ConstValue; use rustc_middle::ty::subst::{GenericArgKind, SubstsRef}; -use rustc_middle::ty::{self, Attributes, DefIdTree, Ty, TyCtxt}; +use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt}; use rustc_span::symbol::{kw, sym, Symbol}; use std::mem; @@ -530,7 +530,7 @@ crate fn find_nearest_parent_module(tcx: TyCtxt<'_>, def_id: DefId) -> Option, flag: Symbol) -> bool { +crate fn has_doc_flag(attrs: ty::Attributes<'_>, flag: Symbol) -> bool { attrs.iter().any(|attr| { attr.has_name(sym::doc) && attr.meta_item_list().map_or(false, |l| rustc_attr::list_contains_name(&l, flag)) diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 3883652375fa5..f0b3159f737a6 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -30,7 +30,7 @@ use std::{cell::RefCell, collections::hash_map::Entry}; use crate::clean; use crate::clean::inline::build_external_trait; -use crate::clean::{AttributesExt, MAX_DEF_IDX}; +use crate::clean::{AttributesExt, TraitWithExtraInfo, MAX_DEF_IDX}; use crate::config::{Options as RustdocOptions, RenderOptions}; use crate::config::{OutputFormat, RenderInfo}; use crate::formats::cache::Cache; @@ -538,7 +538,10 @@ crate fn run_global_ctxt( if let Some(sized_trait_did) = ctxt.tcx.lang_items().sized_trait() { let mut sized_trait = build_external_trait(&mut ctxt, sized_trait_did); sized_trait.is_auto = true; - ctxt.external_traits.borrow_mut().insert(sized_trait_did, sized_trait); + ctxt.external_traits.borrow_mut().insert( + sized_trait_did, + TraitWithExtraInfo { trait_: sized_trait, is_spotlight: false }, + ); } debug!("crate: {:?}", tcx.hir().krate());