Move inherits_doc_hidden
and should_ignore_res
into clean/utils.rs
This commit is contained in:
parent
31bb3c0cd1
commit
82bf232245
@ -41,7 +41,7 @@ use thin_vec::ThinVec;
|
||||
|
||||
use crate::core::{self, DocContext, ImplTraitParam};
|
||||
use crate::formats::item_type::ItemType;
|
||||
use crate::visit_ast::{should_ignore_res, Module as DocModule};
|
||||
use crate::visit_ast::Module as DocModule;
|
||||
|
||||
use utils::*;
|
||||
|
||||
|
@ -13,7 +13,7 @@ use rustc_ast as ast;
|
||||
use rustc_ast::tokenstream::TokenTree;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
||||
use rustc_hir::def_id::{DefId, LocalDefId, LOCAL_CRATE};
|
||||
use rustc_middle::mir;
|
||||
use rustc_middle::mir::interpret::ConstValue;
|
||||
use rustc_middle::ty::{self, GenericArgKind, GenericArgsRef, TyCtxt};
|
||||
@ -629,3 +629,35 @@ pub(super) fn display_macro_source(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn inherits_doc_hidden(
|
||||
tcx: TyCtxt<'_>,
|
||||
mut def_id: LocalDefId,
|
||||
stop_at: Option<LocalDefId>,
|
||||
) -> bool {
|
||||
let hir = tcx.hir();
|
||||
while let Some(id) = tcx.opt_local_parent(def_id) {
|
||||
if let Some(stop_at) = stop_at && id == stop_at {
|
||||
return false;
|
||||
}
|
||||
def_id = id;
|
||||
if tcx.is_doc_hidden(def_id.to_def_id()) {
|
||||
return true;
|
||||
} else if let Some(node) = hir.find_by_def_id(def_id) &&
|
||||
matches!(
|
||||
node,
|
||||
hir::Node::Item(hir::Item { kind: hir::ItemKind::Impl(_), .. }),
|
||||
)
|
||||
{
|
||||
// `impl` blocks stand a bit on their own: unless they have `#[doc(hidden)]` directly
|
||||
// on them, they don't inherit it from the parent context.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub(crate) fn should_ignore_res(res: Res) -> bool {
|
||||
matches!(res, Res::Def(DefKind::Ctor(..), _) | Res::SelfCtor(..))
|
||||
}
|
||||
|
@ -7,11 +7,11 @@
|
||||
|
||||
use super::Pass;
|
||||
use crate::clean;
|
||||
use crate::clean::utils::inherits_doc_hidden;
|
||||
use crate::clean::*;
|
||||
use crate::core::DocContext;
|
||||
use crate::html::markdown::{find_testable_code, ErrorCodes, Ignore, LangString};
|
||||
use crate::visit::DocVisitor;
|
||||
use crate::visit_ast::inherits_doc_hidden;
|
||||
use rustc_hir as hir;
|
||||
use rustc_middle::lint::LintLevelSource;
|
||||
use rustc_session::lint;
|
||||
|
@ -6,11 +6,11 @@ use rustc_span::symbol::sym;
|
||||
use std::mem;
|
||||
|
||||
use crate::clean;
|
||||
use crate::clean::utils::inherits_doc_hidden;
|
||||
use crate::clean::{Item, ItemIdSet};
|
||||
use crate::core::DocContext;
|
||||
use crate::fold::{strip_item, DocFolder};
|
||||
use crate::passes::{ImplStripper, Pass};
|
||||
use crate::visit_ast::inherits_doc_hidden;
|
||||
|
||||
pub(crate) const STRIP_HIDDEN: Pass = Pass {
|
||||
name: "strip-hidden",
|
||||
|
@ -3,10 +3,10 @@ use rustc_hir::def_id::DefId;
|
||||
use rustc_middle::ty::{TyCtxt, Visibility};
|
||||
use std::mem;
|
||||
|
||||
use crate::clean::utils::inherits_doc_hidden;
|
||||
use crate::clean::{self, Item, ItemId, ItemIdSet};
|
||||
use crate::fold::{strip_item, DocFolder};
|
||||
use crate::formats::cache::Cache;
|
||||
use crate::visit_ast::inherits_doc_hidden;
|
||||
use crate::visit_lib::RustdocEffectiveVisibilities;
|
||||
|
||||
pub(crate) struct Stripper<'a, 'tcx> {
|
||||
|
@ -16,6 +16,7 @@ use rustc_span::Span;
|
||||
|
||||
use std::mem;
|
||||
|
||||
use crate::clean::utils::{inherits_doc_hidden, should_ignore_res};
|
||||
use crate::clean::{cfg::Cfg, reexport_chain, AttributesExt, NestedAttributesExt};
|
||||
use crate::core;
|
||||
|
||||
@ -73,38 +74,6 @@ fn def_id_to_path(tcx: TyCtxt<'_>, did: DefId) -> Vec<Symbol> {
|
||||
std::iter::once(crate_name).chain(relative).collect()
|
||||
}
|
||||
|
||||
pub(crate) fn inherits_doc_hidden(
|
||||
tcx: TyCtxt<'_>,
|
||||
mut def_id: LocalDefId,
|
||||
stop_at: Option<LocalDefId>,
|
||||
) -> bool {
|
||||
let hir = tcx.hir();
|
||||
while let Some(id) = tcx.opt_local_parent(def_id) {
|
||||
if let Some(stop_at) = stop_at && id == stop_at {
|
||||
return false;
|
||||
}
|
||||
def_id = id;
|
||||
if tcx.is_doc_hidden(def_id.to_def_id()) {
|
||||
return true;
|
||||
} else if let Some(node) = hir.find_by_def_id(def_id) &&
|
||||
matches!(
|
||||
node,
|
||||
hir::Node::Item(hir::Item { kind: hir::ItemKind::Impl(_), .. }),
|
||||
)
|
||||
{
|
||||
// `impl` blocks stand a bit on their own: unless they have `#[doc(hidden)]` directly
|
||||
// on them, they don't inherit it from the parent context.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub(crate) fn should_ignore_res(res: Res) -> bool {
|
||||
matches!(res, Res::Def(DefKind::Ctor(..), _) | Res::SelfCtor(..))
|
||||
}
|
||||
|
||||
pub(crate) struct RustdocVisitor<'a, 'tcx> {
|
||||
cx: &'a mut core::DocContext<'tcx>,
|
||||
view_item_stack: LocalDefIdSet,
|
||||
|
Loading…
x
Reference in New Issue
Block a user