@@ -78,9 +78,15 @@ impl SourceAnalyzer {
7878 }
7979 }
8080
81- fn expr_id ( & self , expr : & ast:: Expr ) -> Option < ExprId > {
82- let src = InFile { file_id : self . file_id , value : expr } ;
83- self . body_source_map . as_ref ( ) ?. node_expr ( src)
81+ fn expr_id ( & self , db : & dyn HirDatabase , expr : & ast:: Expr ) -> Option < ExprId > {
82+ let src = match expr {
83+ ast:: Expr :: MacroCall ( call) => {
84+ self . expand_expr ( db, InFile :: new ( self . file_id , call. clone ( ) ) ) ?
85+ }
86+ _ => InFile :: new ( self . file_id , expr. clone ( ) ) ,
87+ } ;
88+ let sm = self . body_source_map . as_ref ( ) ?;
89+ sm. node_expr ( src. as_ref ( ) )
8490 }
8591
8692 fn pat_id ( & self , pat : & ast:: Pat ) -> Option < PatId > {
@@ -104,14 +110,7 @@ impl SourceAnalyzer {
104110 }
105111
106112 pub ( crate ) fn type_of ( & self , db : & dyn HirDatabase , expr : & ast:: Expr ) -> Option < Type > {
107- let expr_id = match expr {
108- ast:: Expr :: MacroCall ( call) => {
109- let expr = self . expand_expr ( db, InFile :: new ( self . file_id , call. clone ( ) ) ) ?;
110- self . body_source_map . as_ref ( ) ?. node_expr ( expr. as_ref ( ) )
111- }
112- _ => self . expr_id ( expr) ,
113- } ?;
114-
113+ let expr_id = self . expr_id ( db, expr) ?;
115114 let ty = self . infer . as_ref ( ) ?[ expr_id] . clone ( ) ;
116115 Type :: new_with_resolver ( db, & self . resolver , ty)
117116 }
@@ -122,13 +121,21 @@ impl SourceAnalyzer {
122121 Type :: new_with_resolver ( db, & self . resolver , ty)
123122 }
124123
125- pub ( crate ) fn resolve_method_call ( & self , call : & ast:: MethodCallExpr ) -> Option < Function > {
126- let expr_id = self . expr_id ( & call. clone ( ) . into ( ) ) ?;
124+ pub ( crate ) fn resolve_method_call (
125+ & self ,
126+ db : & dyn HirDatabase ,
127+ call : & ast:: MethodCallExpr ,
128+ ) -> Option < Function > {
129+ let expr_id = self . expr_id ( db, & call. clone ( ) . into ( ) ) ?;
127130 self . infer . as_ref ( ) ?. method_resolution ( expr_id) . map ( Function :: from)
128131 }
129132
130- pub ( crate ) fn resolve_field ( & self , field : & ast:: FieldExpr ) -> Option < crate :: StructField > {
131- let expr_id = self . expr_id ( & field. clone ( ) . into ( ) ) ?;
133+ pub ( crate ) fn resolve_field (
134+ & self ,
135+ db : & dyn HirDatabase ,
136+ field : & ast:: FieldExpr ,
137+ ) -> Option < crate :: StructField > {
138+ let expr_id = self . expr_id ( db, & field. clone ( ) . into ( ) ) ?;
132139 self . infer . as_ref ( ) ?. field_resolution ( expr_id) . map ( |it| it. into ( ) )
133140 }
134141
@@ -138,7 +145,7 @@ impl SourceAnalyzer {
138145 field : & ast:: RecordField ,
139146 ) -> Option < ( crate :: StructField , Option < Local > ) > {
140147 let ( expr_id, local) = match field. expr ( ) {
141- Some ( it) => ( self . expr_id ( & it) ?, None ) ,
148+ Some ( it) => ( self . expr_id ( db , & it) ?, None ) ,
142149 None => {
143150 let src = InFile { file_id : self . file_id , value : field } ;
144151 let expr_id = self . body_source_map . as_ref ( ) ?. field_init_shorthand_expr ( src) ?;
@@ -159,9 +166,10 @@ impl SourceAnalyzer {
159166
160167 pub ( crate ) fn resolve_record_literal (
161168 & self ,
169+ db : & dyn HirDatabase ,
162170 record_lit : & ast:: RecordLit ,
163171 ) -> Option < crate :: VariantDef > {
164- let expr_id = self . expr_id ( & record_lit. clone ( ) . into ( ) ) ?;
172+ let expr_id = self . expr_id ( db , & record_lit. clone ( ) . into ( ) ) ?;
165173 self . infer . as_ref ( ) ?. variant_resolution_for_expr ( expr_id) . map ( |it| it. into ( ) )
166174 }
167175
@@ -207,7 +215,7 @@ impl SourceAnalyzer {
207215 path : & ast:: Path ,
208216 ) -> Option < PathResolution > {
209217 if let Some ( path_expr) = path. syntax ( ) . parent ( ) . and_then ( ast:: PathExpr :: cast) {
210- let expr_id = self . expr_id ( & path_expr. into ( ) ) ?;
218+ let expr_id = self . expr_id ( db , & path_expr. into ( ) ) ?;
211219 if let Some ( assoc) = self . infer . as_ref ( ) ?. assoc_resolutions_for_expr ( expr_id) {
212220 return Some ( PathResolution :: AssocItem ( assoc. into ( ) ) ) ;
213221 }
0 commit comments