@@ -776,48 +776,31 @@ impl AttributesExt for [ast::Attribute] {
776776 let sess = tcx. sess ;
777777 let doc_cfg_active = tcx. features ( ) . doc_cfg ;
778778
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 ;
793784 }
785+ Some ( item)
794786 }
795787
796788 let mut cfg = if doc_cfg_active {
797789 let mut doc_cfg = self
798790 . iter ( )
799791 . 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 ) )
801793 . filter ( |attr| attr. has_name ( sym:: cfg) )
802- . filter_map ( |attr| Some ( attr. meta_item_list ( ) ?. single ( ) ?. meta_item ( ) ?. clone ( ) ) )
803794 . peekable ( ) ;
804795 if doc_cfg. peek ( ) . is_some ( ) {
805796 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 ( ) )
811798 . fold ( Cfg :: True , |cfg, new_cfg| cfg & new_cfg)
812799 } else {
813800 self . iter ( )
814801 . 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 ( ) )
821804 . filter ( |cfg| !hidden_cfg. contains ( cfg) )
822805 . fold ( Cfg :: True , |cfg, new_cfg| cfg & new_cfg)
823806 }
0 commit comments