diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2021-02-18 17:29:44 +0100 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2021-02-24 10:05:19 +0100 |
| commit | f24eac5e644a715c8a290f8ef8eb4883a7ddad3b (patch) | |
| tree | 561e3b94633139d6e86041f714fe993cfedf6d70 | |
| parent | fe1bf8e05c39bdcc73fc09e246b7209444e389bc (diff) | |
| download | rust-f24eac5e644a715c8a290f8ef8eb4883a7ddad3b.tar.gz rust-f24eac5e644a715c8a290f8ef8eb4883a7ddad3b.zip | |
Prevent to compute Item attributes twice
| -rw-r--r-- | src/librustdoc/clean/inline.rs | 11 | ||||
| -rw-r--r-- | src/librustdoc/clean/types.rs | 18 |
2 files changed, 23 insertions, 6 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index ea75d1614bd..27df320c19c 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -416,7 +416,10 @@ crate fn build_impl( debug!("build_impl: impl {:?} for {:?}", trait_.def_id(), for_.def_id()); - let mut item = clean::Item::from_def_id_and_parts( + let attrs = box merge_attrs(cx, parent_module.into(), load_attrs(cx, did), attrs); + debug!("merged_attrs={:?}", attrs); + + ret.push(clean::Item::from_def_id_and_attrs_and_parts( did, None, clean::ImplItem(clean::Impl { @@ -430,11 +433,9 @@ crate fn build_impl( synthetic: false, blanket_impl: None, }), + attrs, cx, - ); - item.attrs = box merge_attrs(cx, parent_module.into(), load_attrs(cx, did), attrs); - debug!("merged_attrs={:?}", item.attrs); - ret.push(item); + )); } fn build_module( diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 9a2319f6e37..202449748c4 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -141,6 +141,22 @@ impl Item { kind: ItemKind, cx: &mut DocContext<'_>, ) -> Item { + Self::from_def_id_and_attrs_and_parts( + def_id, + name, + kind, + box cx.tcx.get_attrs(def_id).clean(cx), + cx, + ) + } + + pub fn from_def_id_and_attrs_and_parts( + def_id: DefId, + name: Option<Symbol>, + kind: ItemKind, + attrs: Box<Attributes>, + cx: &DocContext<'_>, + ) -> Item { debug!("name={:?}, def_id={:?}", name, def_id); // `span_if_local()` lies about functions and only gives the span of the function signature @@ -157,7 +173,7 @@ impl Item { kind: box kind, name, source: source.clean(cx), - attrs: box cx.tcx.get_attrs(def_id).clean(cx), + attrs, visibility: cx.tcx.visibility(def_id).clean(cx), } } |
