@@ -2648,6 +2648,38 @@ fn filter_tokens_from_list(
2648
2648
tokens
2649
2649
}
2650
2650
2651
+ fn filter_doc_attr_ident ( ident : Symbol , is_inline : bool ) -> bool {
2652
+ if is_inline {
2653
+ ident == sym:: hidden || ident == sym:: inline || ident == sym:: no_inline
2654
+ } else {
2655
+ ident == sym:: cfg
2656
+ }
2657
+ }
2658
+
2659
+ fn filter_doc_attr ( normal : & mut ast:: NormalAttr , is_inline : bool ) {
2660
+ match normal. item . args {
2661
+ ast:: AttrArgs :: Delimited ( ref mut args) => {
2662
+ let tokens = filter_tokens_from_list ( & args. tokens , |token| {
2663
+ !matches ! (
2664
+ token,
2665
+ TokenTree :: Token (
2666
+ Token {
2667
+ kind: TokenKind :: Ident (
2668
+ ident,
2669
+ _,
2670
+ ) ,
2671
+ ..
2672
+ } ,
2673
+ _,
2674
+ ) if filter_doc_attr_ident( * ident, is_inline) ,
2675
+ )
2676
+ } ) ;
2677
+ args. tokens = TokenStream :: new ( tokens) ;
2678
+ }
2679
+ ast:: AttrArgs :: Empty | ast:: AttrArgs :: Eq ( ..) => { }
2680
+ }
2681
+ }
2682
+
2651
2683
/// When inlining items, we merge their attributes (and all the reexports attributes too) with the
2652
2684
/// final reexport. For example:
2653
2685
///
@@ -2674,13 +2706,6 @@ fn add_without_unwanted_attributes<'hir>(
2674
2706
is_inline : bool ,
2675
2707
import_parent : Option < DefId > ,
2676
2708
) {
2677
- // If it's not `#[doc(inline)]`, we don't want all attributes, otherwise we keep everything.
2678
- if !is_inline {
2679
- for attr in new_attrs {
2680
- attrs. push ( ( Cow :: Borrowed ( attr) , import_parent) ) ;
2681
- }
2682
- return ;
2683
- }
2684
2709
for attr in new_attrs {
2685
2710
if matches ! ( attr. kind, ast:: AttrKind :: DocComment ( ..) ) {
2686
2711
attrs. push ( ( Cow :: Borrowed ( attr) , import_parent) ) ;
@@ -2689,33 +2714,14 @@ fn add_without_unwanted_attributes<'hir>(
2689
2714
let mut attr = attr. clone ( ) ;
2690
2715
match attr. kind {
2691
2716
ast:: AttrKind :: Normal ( ref mut normal) => {
2692
- if let [ ident] = & * normal. item . path . segments
2693
- && let ident = ident. ident . name
2694
- && ident == sym:: doc
2695
- {
2696
- match normal. item . args {
2697
- ast:: AttrArgs :: Delimited ( ref mut args) => {
2698
- let tokens = filter_tokens_from_list ( & args. tokens , |token| {
2699
- !matches ! (
2700
- token,
2701
- TokenTree :: Token (
2702
- Token {
2703
- kind: TokenKind :: Ident (
2704
- sym:: hidden | sym:: inline | sym:: no_inline,
2705
- _,
2706
- ) ,
2707
- ..
2708
- } ,
2709
- _,
2710
- ) ,
2711
- )
2712
- } ) ;
2713
- args. tokens = TokenStream :: new ( tokens) ;
2714
- attrs. push ( ( Cow :: Owned ( attr) , import_parent) ) ;
2715
- }
2716
- ast:: AttrArgs :: Empty | ast:: AttrArgs :: Eq ( ..) => {
2717
- attrs. push ( ( Cow :: Owned ( attr) , import_parent) ) ;
2718
- }
2717
+ if let [ ident] = & * normal. item . path . segments {
2718
+ let ident = ident. ident . name ;
2719
+ if ident == sym:: doc {
2720
+ filter_doc_attr ( normal, is_inline) ;
2721
+ attrs. push ( ( Cow :: Owned ( attr) , import_parent) ) ;
2722
+ } else if ident != sym:: cfg {
2723
+ // If it's not a `cfg()` attribute, we keep it.
2724
+ attrs. push ( ( Cow :: Owned ( attr) , import_parent) ) ;
2719
2725
}
2720
2726
}
2721
2727
}
0 commit comments