@@ -59,31 +59,45 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
5959 fn describe_enclosure ( & self , hir_id : hir:: HirId ) -> Option < & ' static str > {
6060 let hir = & self . tcx . hir ( ) ;
6161 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 ( || {
6480 Some ( if let hir:: FnHeader { asyncness : hir:: IsAsync :: Async , .. } = sig. header {
65- "an async function "
81+ "an async method "
6682 } else {
67- "a function "
83+ "a method "
6884 } )
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 ( || {
7690 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+ }
8499 }
85- } else {
86- None
100+ _ => None ,
87101 }
88102 }
89103
0 commit comments