@@ -776,48 +776,31 @@ impl AttributesExt for [ast::Attribute] {
776
776
let sess = tcx. sess ;
777
777
let doc_cfg_active = tcx. features ( ) . doc_cfg ;
778
778
779
- trait SingleExt {
780
- type Item ;
781
- fn single ( self ) -> Option < Self :: Item > ;
782
- }
783
-
784
- impl < T : IntoIterator > SingleExt for T {
785
- type Item = T :: Item ;
786
- fn single ( self ) -> Option < Self :: Item > {
787
- let mut iter = self . into_iter ( ) ;
788
- let item = iter. next ( ) ?;
789
- if iter. next ( ) . is_some ( ) {
790
- return None ;
791
- }
792
- Some ( item)
779
+ fn single < T : IntoIterator > ( it : T ) -> Option < T :: Item > {
780
+ let mut iter = it. into_iter ( ) ;
781
+ let item = iter. next ( ) ?;
782
+ if iter. next ( ) . is_some ( ) {
783
+ return None ;
793
784
}
785
+ Some ( item)
794
786
}
795
787
796
788
let mut cfg = if doc_cfg_active {
797
789
let mut doc_cfg = self
798
790
. iter ( )
799
791
. filter ( |attr| attr. has_name ( sym:: doc) )
800
- . filter_map ( |attr| Some ( attr. meta_item_list ( ) ? . single ( ) ? ) )
792
+ . flat_map ( |attr| attr. meta_item_list ( ) . unwrap_or_else ( Vec :: new ) )
801
793
. filter ( |attr| attr. has_name ( sym:: cfg) )
802
- . filter_map ( |attr| Some ( attr. meta_item_list ( ) ?. single ( ) ?. meta_item ( ) ?. clone ( ) ) )
803
794
. peekable ( ) ;
804
795
if doc_cfg. peek ( ) . is_some ( ) {
805
796
doc_cfg
806
- . filter_map ( |attr| {
807
- Cfg :: parse ( & attr)
808
- . map_err ( |e| sess. diagnostic ( ) . span_err ( e. span , e. msg ) )
809
- . ok ( )
810
- } )
797
+ . filter_map ( |attr| Cfg :: parse ( attr. meta_item ( ) ?) . ok ( ) )
811
798
. fold ( Cfg :: True , |cfg, new_cfg| cfg & new_cfg)
812
799
} else {
813
800
self . iter ( )
814
801
. filter ( |attr| attr. has_name ( sym:: cfg) )
815
- . filter_map ( |attr| Some ( attr. meta_item_list ( ) ?. single ( ) ?. meta_item ( ) ?. clone ( ) ) )
816
- . filter_map ( |attr| {
817
- Cfg :: parse ( & attr)
818
- . map_err ( |e| sess. diagnostic ( ) . span_err ( e. span , e. msg ) )
819
- . ok ( )
820
- } )
802
+ . filter_map ( |attr| single ( attr. meta_item_list ( ) ?) )
803
+ . filter_map ( |attr| Cfg :: parse ( attr. meta_item ( ) ?) . ok ( ) )
821
804
. filter ( |cfg| !hidden_cfg. contains ( cfg) )
822
805
. fold ( Cfg :: True , |cfg, new_cfg| cfg & new_cfg)
823
806
}
0 commit comments