@@ -59,31 +59,45 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
59
59
fn describe_enclosure ( & self , hir_id : hir:: HirId ) -> Option < & ' static str > {
60
60
let hir = & self . tcx . hir ( ) ;
61
61
let node = hir. find ( hir_id) ?;
62
- if let hir:: Node :: Item ( hir:: Item { kind : hir:: ItemKind :: Fn ( sig, _, body_id) , .. } ) = & node {
63
- self . describe_generator ( * body_id) . or_else ( || {
62
+ match & node {
63
+ hir:: Node :: Item ( hir:: Item { kind : hir:: ItemKind :: Fn ( sig, _, body_id) , .. } ) => {
64
+ self . describe_generator ( * body_id) . or_else ( || {
65
+ Some ( if let hir:: FnHeader { asyncness : hir:: IsAsync :: Async , .. } = sig. header {
66
+ "an async function"
67
+ } else {
68
+ "a function"
69
+ } )
70
+ } )
71
+ }
72
+ hir:: Node :: TraitItem ( hir:: TraitItem {
73
+ kind : hir:: TraitItemKind :: Method ( _, hir:: TraitMethod :: Provided ( body_id) ) ,
74
+ ..
75
+ } ) => self . describe_generator ( * body_id) . or_else ( || Some ( "a trait method" ) ) ,
76
+ hir:: Node :: ImplItem ( hir:: ImplItem {
77
+ kind : hir:: ImplItemKind :: Method ( sig, body_id) ,
78
+ ..
79
+ } ) => self . describe_generator ( * body_id) . or_else ( || {
64
80
Some ( if let hir:: FnHeader { asyncness : hir:: IsAsync :: Async , .. } = sig. header {
65
- "an async function "
81
+ "an async method "
66
82
} else {
67
- "a function "
83
+ "a method "
68
84
} )
69
- } )
70
- } else if let hir:: Node :: Expr ( hir:: Expr {
71
- kind : hir:: ExprKind :: Closure ( _is_move, _, body_id, _, gen_movability) ,
72
- ..
73
- } ) = & node
74
- {
75
- self . describe_generator ( * body_id) . or_else ( || {
85
+ } ) ,
86
+ hir:: Node :: Expr ( hir:: Expr {
87
+ kind : hir:: ExprKind :: Closure ( _is_move, _, body_id, _, gen_movability) ,
88
+ ..
89
+ } ) => self . describe_generator ( * body_id) . or_else ( || {
76
90
Some ( if gen_movability. is_some ( ) { "an async closure" } else { "a closure" } )
77
- } )
78
- } else if let hir:: Node :: Expr ( hir:: Expr { .. } ) = & node {
79
- let parent_hid = hir. get_parent_node ( hir_id) ;
80
- if parent_hid != hir_id {
81
- return self . describe_enclosure ( parent_hid) ;
82
- } else {
83
- None
91
+ } ) ,
92
+ hir:: Node :: Expr ( hir:: Expr { .. } ) => {
93
+ let parent_hid = hir. get_parent_node ( hir_id) ;
94
+ if parent_hid != hir_id {
95
+ return self . describe_enclosure ( parent_hid) ;
96
+ } else {
97
+ None
98
+ }
84
99
}
85
- } else {
86
- None
100
+ _ => None ,
87
101
}
88
102
}
89
103
0 commit comments