@@ -39,46 +39,44 @@ pub(crate) fn cfg_eval(
39
39
let features = Some ( features) ;
40
40
CfgEval ( StripUnconfigured { sess, features, config_tokens : true , lint_node_id } )
41
41
. configure_annotatable ( annotatable)
42
- // Since the item itself has already been configured by the `InvocationCollector`,
43
- // we know that fold result vector will contain exactly one element.
44
- . unwrap ( )
45
42
}
46
43
47
44
struct CfgEval < ' a > ( StripUnconfigured < ' a > ) ;
48
45
49
- fn flat_map_annotatable (
50
- vis : & mut impl MutVisitor ,
51
- annotatable : Annotatable ,
52
- ) -> Option < Annotatable > {
46
+ fn flat_map_annotatable ( vis : & mut impl MutVisitor , annotatable : Annotatable ) -> Annotatable {
53
47
match annotatable {
54
- Annotatable :: Item ( item) => vis. flat_map_item ( item) . pop ( ) . map ( Annotatable :: Item ) ,
48
+ Annotatable :: Item ( item) => Annotatable :: Item ( vis. flat_map_item ( item) . pop ( ) . unwrap ( ) ) ,
55
49
Annotatable :: AssocItem ( item, ctxt) => {
56
- Some ( Annotatable :: AssocItem ( vis. flat_map_assoc_item ( item, ctxt) . pop ( ) ? , ctxt) )
50
+ Annotatable :: AssocItem ( vis. flat_map_assoc_item ( item, ctxt) . pop ( ) . unwrap ( ) , ctxt)
57
51
}
58
52
Annotatable :: ForeignItem ( item) => {
59
- vis. flat_map_foreign_item ( item) . pop ( ) . map ( Annotatable :: ForeignItem )
53
+ Annotatable :: ForeignItem ( vis. flat_map_foreign_item ( item) . pop ( ) . unwrap ( ) )
60
54
}
61
55
Annotatable :: Stmt ( stmt) => {
62
- vis. flat_map_stmt ( stmt. into_inner ( ) ) . pop ( ) . map ( P ) . map ( Annotatable :: Stmt )
56
+ Annotatable :: Stmt ( P ( vis. flat_map_stmt ( stmt. into_inner ( ) ) . pop ( ) . unwrap ( ) ) )
63
57
}
64
58
Annotatable :: Expr ( mut expr) => {
65
59
vis. visit_expr ( & mut expr) ;
66
- Some ( Annotatable :: Expr ( expr) )
60
+ Annotatable :: Expr ( expr)
67
61
}
68
- Annotatable :: Arm ( arm) => vis. flat_map_arm ( arm) . pop ( ) . map ( Annotatable :: Arm ) ,
62
+ Annotatable :: Arm ( arm) => Annotatable :: Arm ( vis. flat_map_arm ( arm) . pop ( ) . unwrap ( ) ) ,
69
63
Annotatable :: ExprField ( field) => {
70
- vis. flat_map_expr_field ( field) . pop ( ) . map ( Annotatable :: ExprField )
64
+ Annotatable :: ExprField ( vis. flat_map_expr_field ( field) . pop ( ) . unwrap ( ) )
65
+ }
66
+ Annotatable :: PatField ( fp) => {
67
+ Annotatable :: PatField ( vis. flat_map_pat_field ( fp) . pop ( ) . unwrap ( ) )
71
68
}
72
- Annotatable :: PatField ( fp) => vis. flat_map_pat_field ( fp) . pop ( ) . map ( Annotatable :: PatField ) ,
73
69
Annotatable :: GenericParam ( param) => {
74
- vis. flat_map_generic_param ( param) . pop ( ) . map ( Annotatable :: GenericParam )
70
+ Annotatable :: GenericParam ( vis. flat_map_generic_param ( param) . pop ( ) . unwrap ( ) )
71
+ }
72
+ Annotatable :: Param ( param) => Annotatable :: Param ( vis. flat_map_param ( param) . pop ( ) . unwrap ( ) ) ,
73
+ Annotatable :: FieldDef ( sf) => {
74
+ Annotatable :: FieldDef ( vis. flat_map_field_def ( sf) . pop ( ) . unwrap ( ) )
75
75
}
76
- Annotatable :: Param ( param) => vis. flat_map_param ( param) . pop ( ) . map ( Annotatable :: Param ) ,
77
- Annotatable :: FieldDef ( sf) => vis. flat_map_field_def ( sf) . pop ( ) . map ( Annotatable :: FieldDef ) ,
78
- Annotatable :: Variant ( v) => vis. flat_map_variant ( v) . pop ( ) . map ( Annotatable :: Variant ) ,
76
+ Annotatable :: Variant ( v) => Annotatable :: Variant ( vis. flat_map_variant ( v) . pop ( ) . unwrap ( ) ) ,
79
77
Annotatable :: Crate ( mut krate) => {
80
78
vis. visit_crate ( & mut krate) ;
81
- Some ( Annotatable :: Crate ( krate) )
79
+ Annotatable :: Crate ( krate)
82
80
}
83
81
}
84
82
}
@@ -123,11 +121,11 @@ impl CfgEval<'_> {
123
121
self . 0 . configure ( node)
124
122
}
125
123
126
- fn configure_annotatable ( & mut self , mut annotatable : Annotatable ) -> Option < Annotatable > {
124
+ fn configure_annotatable ( mut self , mut annotatable : Annotatable ) -> Annotatable {
127
125
// Tokenizing and re-parsing the `Annotatable` can have a significant
128
126
// performance impact, so try to avoid it if possible
129
127
if !has_cfg_or_cfg_attr ( & annotatable) {
130
- return Some ( annotatable) ;
128
+ return annotatable;
131
129
}
132
130
133
131
// The majority of parsed attribute targets will never need to have early cfg-expansion
@@ -197,13 +195,13 @@ impl CfgEval<'_> {
197
195
Ok ( a) => annotatable = a,
198
196
Err ( err) => {
199
197
err. emit ( ) ;
200
- return Some ( annotatable) ;
198
+ return annotatable;
201
199
}
202
200
}
203
201
204
202
// Now that we have our re-parsed `AttrTokenStream`, recursively configuring
205
203
// our attribute target will correctly configure the tokens as well.
206
- flat_map_annotatable ( self , annotatable)
204
+ flat_map_annotatable ( & mut self , annotatable)
207
205
}
208
206
}
209
207
0 commit comments