33
44use std:: mem;
55
6+ use rustc_ast:: attr:: AttributeExt ;
67use rustc_data_structures:: fx:: { FxHashSet , FxIndexMap } ;
78use rustc_hir as hir;
8- use rustc_hir:: attrs:: AttributeKind ;
9+ use rustc_hir:: attrs:: { AttributeKind , DocInline } ;
910use rustc_hir:: def:: { DefKind , MacroKinds , Res } ;
1011use rustc_hir:: def_id:: { DefId , DefIdMap , LocalDefId , LocalDefIdSet } ;
1112use rustc_hir:: intravisit:: { Visitor , walk_body, walk_item} ;
@@ -14,11 +15,11 @@ use rustc_middle::hir::nested_filter;
1415use rustc_middle:: ty:: TyCtxt ;
1516use rustc_span:: Span ;
1617use rustc_span:: def_id:: { CRATE_DEF_ID , LOCAL_CRATE } ;
17- use rustc_span:: symbol:: { Symbol , kw, sym } ;
18+ use rustc_span:: symbol:: { Symbol , kw} ;
1819use tracing:: debug;
1920
21+ use crate :: clean:: reexport_chain;
2022use crate :: clean:: utils:: { inherits_doc_hidden, should_ignore_res} ;
21- use crate :: clean:: { NestedAttributesExt , hir_attr_lists, reexport_chain} ;
2223use crate :: core;
2324
2425/// This module is used to store stuff from Rust's AST in a more convenient
@@ -246,8 +247,8 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
246247 let document_hidden = self . cx . document_hidden ( ) ;
247248 let use_attrs = tcx. hir_attrs ( tcx. local_def_id_to_hir_id ( def_id) ) ;
248249 // Don't inline `doc(hidden)` imports so they can be stripped at a later stage.
249- let is_no_inline = hir_attr_lists ( use_attrs, sym :: doc ) . has_word ( sym :: no_inline )
250- || ( document_hidden && hir_attr_lists ( use_attrs, sym :: doc ) . has_word ( sym :: hidden ) ) ;
250+ let is_no_inline = find_attr ! ( use_attrs, AttributeKind :: Doc ( d ) if d . inline . is_some_and ( | ( inline , _ ) | inline == DocInline :: NoInline ) )
251+ || ( document_hidden && use_attrs. iter ( ) . any ( |attr| attr . is_doc_hidden ( ) ) ) ;
251252
252253 if is_no_inline {
253254 return false ;
@@ -464,12 +465,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
464465 // If there was a private module in the current path then don't bother inlining
465466 // anything as it will probably be stripped anyway.
466467 if is_pub && self . inside_public_path {
467- let please_inline = attrs. iter ( ) . any ( |item| match item. meta_item_list ( ) {
468- Some ( ref list) if item. has_name ( sym:: doc) => {
469- list. iter ( ) . any ( |i| i. has_name ( sym:: inline) )
470- }
471- _ => false ,
472- } ) ;
468+ let please_inline = find_attr ! ( attrs, AttributeKind :: Doc ( d) if d. inline. is_some_and( |( inline, _) | inline == DocInline :: Inline ) ) ;
473469 let ident = match kind {
474470 hir:: UseKind :: Single ( ident) => Some ( ident. name ) ,
475471 hir:: UseKind :: Glob => None ,
0 commit comments