diff options
| author | Noah Lev <camelidcamel@gmail.com> | 2022-03-12 14:27:51 -0800 |
|---|---|---|
| committer | Noah Lev <camelidcamel@gmail.com> | 2022-03-12 14:27:51 -0800 |
| commit | f39d0fc10093e2564ddd457aca1755b69f01654b (patch) | |
| tree | 815e9a20541813371cc460cc6e98df465ccdb902 /compiler | |
| parent | ed2a69c4a9f3e5535461484af6266681fd7d90d4 (diff) | |
| download | rust-f39d0fc10093e2564ddd457aca1755b69f01654b.tar.gz rust-f39d0fc10093e2564ddd457aca1755b69f01654b.zip | |
Queryify `is_doc_hidden`
It came up hot on some profiling of rustdoc I did, so hopefully turning it into a query will help.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_middle/src/query/mod.rs | 5 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/mod.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/util.rs | 12 |
3 files changed, 16 insertions, 11 deletions
diff --git a/compiler/rustc_middle/src/query/mod.rs b/compiler/rustc_middle/src/query/mod.rs index 2acfede87ae..44b622c1e3d 100644 --- a/compiler/rustc_middle/src/query/mod.rs +++ b/compiler/rustc_middle/src/query/mod.rs @@ -1035,6 +1035,11 @@ rustc_queries! { separate_provide_extern } + /// Determines whether an item is annotated with `doc(hidden)`. + query is_doc_hidden(def_id: DefId) -> bool { + desc { |tcx| "checking whether `{}` is `doc(hidden)`", tcx.def_path_str(def_id) } + } + query item_attrs(def_id: DefId) -> &'tcx [ast::Attribute] { desc { |tcx| "collecting attributes of `{}`", tcx.def_path_str(def_id) } separate_provide_extern diff --git a/compiler/rustc_middle/src/ty/mod.rs b/compiler/rustc_middle/src/ty/mod.rs index 6edcfbcdc6c..e7cef9e198b 100644 --- a/compiler/rustc_middle/src/ty/mod.rs +++ b/compiler/rustc_middle/src/ty/mod.rs @@ -41,7 +41,7 @@ use rustc_macros::HashStable; use rustc_query_system::ich::StableHashingContext; use rustc_session::cstore::CrateStoreDyn; use rustc_span::symbol::{kw, Ident, Symbol}; -use rustc_span::{sym, Span}; +use rustc_span::Span; use rustc_target::abi::Align; use std::hash::Hash; @@ -2125,14 +2125,6 @@ impl<'tcx> TyCtxt<'tcx> { self.sess.contains_name(&self.get_attrs(did), attr) } - /// Determines whether an item is annotated with `doc(hidden)`. - pub fn is_doc_hidden(self, did: DefId) -> bool { - self.get_attrs(did) - .iter() - .filter_map(|attr| if attr.has_name(sym::doc) { attr.meta_item_list() } else { None }) - .any(|items| items.iter().any(|item| item.has_name(sym::hidden))) - } - /// Returns `true` if this is an `auto trait`. pub fn trait_is_auto(self, trait_def_id: DefId) -> bool { self.trait_def(trait_def_id).has_auto_impl diff --git a/compiler/rustc_middle/src/ty/util.rs b/compiler/rustc_middle/src/ty/util.rs index 6bde9e6d5e2..984f5d99852 100644 --- a/compiler/rustc_middle/src/ty/util.rs +++ b/compiler/rustc_middle/src/ty/util.rs @@ -21,7 +21,7 @@ use rustc_hir::def::{CtorOf, DefKind, Res}; use rustc_hir::def_id::DefId; use rustc_macros::HashStable; use rustc_query_system::ich::NodeIdHashingMode; -use rustc_span::DUMMY_SP; +use rustc_span::{sym, DUMMY_SP}; use rustc_target::abi::{Integer, Size, TargetDataLayout}; use smallvec::SmallVec; use std::{fmt, iter}; @@ -1154,6 +1154,14 @@ pub fn normalize_opaque_types<'tcx>( val.fold_with(&mut visitor) } +/// Determines whether an item is annotated with `doc(hidden)`. +pub fn is_doc_hidden(tcx: TyCtxt<'_>, def_id: DefId) -> bool { + tcx.get_attrs(def_id) + .iter() + .filter_map(|attr| if attr.has_name(sym::doc) { attr.meta_item_list() } else { None }) + .any(|items| items.iter().any(|item| item.has_name(sym::hidden))) +} + pub fn provide(providers: &mut ty::query::Providers) { - *providers = ty::query::Providers { normalize_opaque_types, ..*providers } + *providers = ty::query::Providers { normalize_opaque_types, is_doc_hidden, ..*providers } } |
