@@ -29,7 +29,7 @@ use hir_def::{
2929 type_ref:: { Mutability , TypesMap , TypesSourceMap } ,
3030} ;
3131use hir_expand:: {
32- HirFileId , InFile , InMacroFile , MacroFileId , MacroFileIdExt ,
32+ HirFileId , InFile , MacroFileId , MacroFileIdExt ,
3333 mod_path:: path,
3434 name:: { AsName , Name } ,
3535} ;
@@ -129,13 +129,8 @@ impl SourceAnalyzer {
129129 )
130130 }
131131
132- fn expr_id ( & self , db : & dyn HirDatabase , expr : & ast:: Expr ) -> Option < ExprOrPatId > {
133- let src = match expr {
134- ast:: Expr :: MacroExpr ( expr) => {
135- self . expand_expr ( db, InFile :: new ( self . file_id , expr. macro_call ( ) ?) ) ?. into ( )
136- }
137- _ => InFile :: new ( self . file_id , expr. clone ( ) ) ,
138- } ;
132+ fn expr_id ( & self , expr : ast:: Expr ) -> Option < ExprOrPatId > {
133+ let src = InFile :: new ( self . file_id , expr) ;
139134 let sm = self . body_source_map ( ) ?;
140135 sm. node_expr ( src. as_ref ( ) )
141136 }
@@ -151,37 +146,10 @@ impl SourceAnalyzer {
151146 if let Pat :: Bind { id, .. } = self . body ( ) ?. pats [ pat_id. as_pat ( ) ?] { Some ( id) } else { None }
152147 }
153148
154- fn expand_expr (
155- & self ,
156- db : & dyn HirDatabase ,
157- expr : InFile < ast:: MacroCall > ,
158- ) -> Option < InMacroFile < ast:: Expr > > {
159- let macro_file = self . body_source_map ( ) ?. node_macro_file ( expr. as_ref ( ) ) ?;
160- let expanded = db. parse_macro_expansion ( macro_file) . value . 0 . syntax_node ( ) ;
161- let res = if let Some ( stmts) = ast:: MacroStmts :: cast ( expanded. clone ( ) ) {
162- match stmts. expr ( ) ? {
163- ast:: Expr :: MacroExpr ( mac) => {
164- self . expand_expr ( db, InFile :: new ( macro_file. into ( ) , mac. macro_call ( ) ?) ) ?
165- }
166- expr => InMacroFile :: new ( macro_file, expr) ,
167- }
168- } else if let Some ( call) = ast:: MacroCall :: cast ( expanded. clone ( ) ) {
169- self . expand_expr ( db, InFile :: new ( macro_file. into ( ) , call) ) ?
170- } else {
171- InMacroFile :: new ( macro_file, ast:: Expr :: cast ( expanded) ?)
172- } ;
173-
174- Some ( res)
175- }
176-
177- pub ( crate ) fn expr_adjustments (
178- & self ,
179- db : & dyn HirDatabase ,
180- expr : & ast:: Expr ,
181- ) -> Option < & [ Adjustment ] > {
149+ pub ( crate ) fn expr_adjustments ( & self , expr : & ast:: Expr ) -> Option < & [ Adjustment ] > {
182150 // It is safe to omit destructuring assignments here because they have no adjustments (neither
183151 // expressions nor patterns).
184- let expr_id = self . expr_id ( db , expr) ?. as_expr ( ) ?;
152+ let expr_id = self . expr_id ( expr. clone ( ) ) ?. as_expr ( ) ?;
185153 let infer = self . infer . as_ref ( ) ?;
186154 infer. expr_adjustments . get ( & expr_id) . map ( |v| & * * v)
187155 }
@@ -191,7 +159,7 @@ impl SourceAnalyzer {
191159 db : & dyn HirDatabase ,
192160 expr : & ast:: Expr ,
193161 ) -> Option < ( Type , Option < Type > ) > {
194- let expr_id = self . expr_id ( db , expr) ?;
162+ let expr_id = self . expr_id ( expr. clone ( ) ) ?;
195163 let infer = self . infer . as_ref ( ) ?;
196164 let coerced = expr_id
197165 . as_expr ( )
@@ -284,7 +252,7 @@ impl SourceAnalyzer {
284252 db : & dyn HirDatabase ,
285253 call : & ast:: MethodCallExpr ,
286254 ) -> Option < Callable > {
287- let expr_id = self . expr_id ( db , & call. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
255+ let expr_id = self . expr_id ( call. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
288256 let ( func, substs) = self . infer . as_ref ( ) ?. method_resolution ( expr_id) ?;
289257 let ty = db. value_ty ( func. into ( ) ) ?. substitute ( Interner , & substs) ;
290258 let ty = Type :: new_with_resolver ( db, & self . resolver , ty) ;
@@ -298,7 +266,7 @@ impl SourceAnalyzer {
298266 db : & dyn HirDatabase ,
299267 call : & ast:: MethodCallExpr ,
300268 ) -> Option < Function > {
301- let expr_id = self . expr_id ( db , & call. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
269+ let expr_id = self . expr_id ( call. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
302270 let ( f_in_trait, substs) = self . infer . as_ref ( ) ?. method_resolution ( expr_id) ?;
303271
304272 Some ( self . resolve_impl_method_or_trait_def ( db, f_in_trait, substs) . into ( ) )
@@ -309,7 +277,7 @@ impl SourceAnalyzer {
309277 db : & dyn HirDatabase ,
310278 call : & ast:: MethodCallExpr ,
311279 ) -> Option < ( Either < Function , Field > , Option < GenericSubstitution > ) > {
312- let expr_id = self . expr_id ( db , & call. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
280+ let expr_id = self . expr_id ( call. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
313281 let inference_result = self . infer . as_ref ( ) ?;
314282 match inference_result. method_resolution ( expr_id) {
315283 Some ( ( f_in_trait, substs) ) => {
@@ -339,11 +307,10 @@ impl SourceAnalyzer {
339307
340308 pub ( crate ) fn resolve_field (
341309 & self ,
342- db : & dyn HirDatabase ,
343310 field : & ast:: FieldExpr ,
344311 ) -> Option < Either < Field , TupleField > > {
345312 let & ( def, ..) = self . def . as_ref ( ) ?;
346- let expr_id = self . expr_id ( db , & field. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
313+ let expr_id = self . expr_id ( field. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
347314 self . infer . as_ref ( ) ?. field_resolution ( expr_id) . map ( |it| {
348315 it. map_either ( Into :: into, |f| TupleField { owner : def, tuple : f. tuple , index : f. index } )
349316 } )
@@ -373,7 +340,7 @@ impl SourceAnalyzer {
373340 field : & ast:: FieldExpr ,
374341 ) -> Option < ( Either < Either < Field , TupleField > , Function > , Option < GenericSubstitution > ) > {
375342 let & ( def, ..) = self . def . as_ref ( ) ?;
376- let expr_id = self . expr_id ( db , & field. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
343+ let expr_id = self . expr_id ( field. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
377344 let inference_result = self . infer . as_ref ( ) ?;
378345 match inference_result. field_resolution ( expr_id) {
379346 Some ( field) => match field {
@@ -444,7 +411,7 @@ impl SourceAnalyzer {
444411 db : & dyn HirDatabase ,
445412 await_expr : & ast:: AwaitExpr ,
446413 ) -> Option < FunctionId > {
447- let mut ty = self . ty_of_expr ( db , & await_expr. expr ( ) ?) ?. clone ( ) ;
414+ let mut ty = self . ty_of_expr ( await_expr. expr ( ) ?) ?. clone ( ) ;
448415
449416 let into_future_trait = self
450417 . resolver
@@ -494,7 +461,7 @@ impl SourceAnalyzer {
494461 self . infer
495462 . as_ref ( )
496463 . and_then ( |infer| {
497- let expr = self . expr_id ( db , & prefix_expr. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
464+ let expr = self . expr_id ( prefix_expr. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
498465 let ( func, _) = infer. method_resolution ( expr) ?;
499466 let ( deref_mut_trait, deref_mut) = self . lang_trait_fn (
500467 db,
@@ -513,7 +480,7 @@ impl SourceAnalyzer {
513480 }
514481 } ;
515482
516- let ty = self . ty_of_expr ( db , & prefix_expr. expr ( ) ?) ?;
483+ let ty = self . ty_of_expr ( prefix_expr. expr ( ) ?) ?;
517484
518485 // HACK: subst for all methods coincides with that for their trait because the methods
519486 // don't have any generic parameters, so we skip building another subst for the methods.
@@ -527,16 +494,16 @@ impl SourceAnalyzer {
527494 db : & dyn HirDatabase ,
528495 index_expr : & ast:: IndexExpr ,
529496 ) -> Option < FunctionId > {
530- let base_ty = self . ty_of_expr ( db , & index_expr. base ( ) ?) ?;
531- let index_ty = self . ty_of_expr ( db , & index_expr. index ( ) ?) ?;
497+ let base_ty = self . ty_of_expr ( index_expr. base ( ) ?) ?;
498+ let index_ty = self . ty_of_expr ( index_expr. index ( ) ?) ?;
532499
533500 let ( index_trait, index_fn) =
534501 self . lang_trait_fn ( db, LangItem :: Index , & Name :: new_symbol_root ( sym:: index. clone ( ) ) ) ?;
535502 let ( op_trait, op_fn) = self
536503 . infer
537504 . as_ref ( )
538505 . and_then ( |infer| {
539- let expr = self . expr_id ( db , & index_expr. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
506+ let expr = self . expr_id ( index_expr. clone ( ) . into ( ) ) ?. as_expr ( ) ?;
540507 let ( func, _) = infer. method_resolution ( expr) ?;
541508 let ( index_mut_trait, index_mut_fn) = self . lang_trait_fn (
542509 db,
@@ -561,8 +528,8 @@ impl SourceAnalyzer {
561528 binop_expr : & ast:: BinExpr ,
562529 ) -> Option < FunctionId > {
563530 let op = binop_expr. op_kind ( ) ?;
564- let lhs = self . ty_of_expr ( db , & binop_expr. lhs ( ) ?) ?;
565- let rhs = self . ty_of_expr ( db , & binop_expr. rhs ( ) ?) ?;
531+ let lhs = self . ty_of_expr ( binop_expr. lhs ( ) ?) ?;
532+ let rhs = self . ty_of_expr ( binop_expr. rhs ( ) ?) ?;
566533
567534 let ( op_trait, op_fn) = lang_items_for_bin_op ( op)
568535 . and_then ( |( name, lang_item) | self . lang_trait_fn ( db, lang_item, & name) ) ?;
@@ -581,7 +548,7 @@ impl SourceAnalyzer {
581548 db : & dyn HirDatabase ,
582549 try_expr : & ast:: TryExpr ,
583550 ) -> Option < FunctionId > {
584- let ty = self . ty_of_expr ( db , & try_expr. expr ( ) ?) ?;
551+ let ty = self . ty_of_expr ( try_expr. expr ( ) ?) ?;
585552
586553 let op_fn = db. lang_item ( self . resolver . krate ( ) , LangItem :: TryTraitBranch ) ?. as_function ( ) ?;
587554 let op_trait = match op_fn. lookup ( db. upcast ( ) ) . container {
@@ -721,7 +688,7 @@ impl SourceAnalyzer {
721688 let resolved = ( || {
722689 let infer = self . infer . as_deref ( ) ?;
723690 if let Some ( path_expr) = parent ( ) . and_then ( ast:: PathExpr :: cast) {
724- let expr_id = self . expr_id ( db , & path_expr. into ( ) ) ?;
691+ let expr_id = self . expr_id ( path_expr. into ( ) ) ?;
725692 if let Some ( ( assoc, subs) ) = infer. assoc_resolutions_for_expr_or_pat ( expr_id) {
726693 let ( assoc, subst) = match assoc {
727694 AssocItemId :: FunctionId ( f_in_trait) => {
@@ -819,7 +786,7 @@ impl SourceAnalyzer {
819786 return Some ( ( PathResolution :: Def ( ModuleDef :: Variant ( variant. into ( ) ) ) , None ) ) ;
820787 }
821788 } else if let Some ( rec_lit) = parent ( ) . and_then ( ast:: RecordExpr :: cast) {
822- let expr_id = self . expr_id ( db , & rec_lit. into ( ) ) ?;
789+ let expr_id = self . expr_id ( rec_lit. into ( ) ) ?;
823790 if let Some ( VariantId :: EnumVariantId ( variant) ) =
824791 infer. variant_resolution_for_expr_or_pat ( expr_id)
825792 {
@@ -1010,7 +977,7 @@ impl SourceAnalyzer {
1010977 let subst = ( || {
1011978 let parent = parent ( ) ?;
1012979 let ty = if let Some ( expr) = ast:: Expr :: cast ( parent. clone ( ) ) {
1013- let expr_id = self . expr_id ( db , & expr) ?;
980+ let expr_id = self . expr_id ( expr) ?;
1014981 self . infer . as_ref ( ) ?. type_of_expr_or_pat ( expr_id) ?
1015982 } else if let Some ( pat) = ast:: Pat :: cast ( parent) {
1016983 let pat_id = self . pat_id ( & pat) ?;
@@ -1064,7 +1031,7 @@ impl SourceAnalyzer {
10641031 let body = self . body ( ) ?;
10651032 let infer = self . infer . as_ref ( ) ?;
10661033
1067- let expr_id = self . expr_id ( db , & literal. clone ( ) . into ( ) ) ?;
1034+ let expr_id = self . expr_id ( literal. clone ( ) . into ( ) ) ?;
10681035 let substs = infer[ expr_id] . as_adt ( ) ?. 1 ;
10691036
10701037 let ( variant, missing_fields, _exhaustive) = match expr_id {
@@ -1130,13 +1097,9 @@ impl SourceAnalyzer {
11301097 Some ( macro_call_id. as_macro_file ( ) ) . filter ( |it| it. expansion_level ( db. upcast ( ) ) < 64 )
11311098 }
11321099
1133- pub ( crate ) fn resolve_variant (
1134- & self ,
1135- db : & dyn HirDatabase ,
1136- record_lit : ast:: RecordExpr ,
1137- ) -> Option < VariantId > {
1100+ pub ( crate ) fn resolve_variant ( & self , record_lit : ast:: RecordExpr ) -> Option < VariantId > {
11381101 let infer = self . infer . as_ref ( ) ?;
1139- let expr_id = self . expr_id ( db , & record_lit. into ( ) ) ?;
1102+ let expr_id = self . expr_id ( record_lit. into ( ) ) ?;
11401103 infer. variant_resolution_for_expr_or_pat ( expr_id)
11411104 }
11421105
@@ -1284,8 +1247,8 @@ impl SourceAnalyzer {
12841247 Some ( ( trait_id, fn_id) )
12851248 }
12861249
1287- fn ty_of_expr ( & self , db : & dyn HirDatabase , expr : & ast:: Expr ) -> Option < & Ty > {
1288- self . infer . as_ref ( ) ?. type_of_expr_or_pat ( self . expr_id ( db , expr) ?)
1250+ fn ty_of_expr ( & self , expr : ast:: Expr ) -> Option < & Ty > {
1251+ self . infer . as_ref ( ) ?. type_of_expr_or_pat ( self . expr_id ( expr. clone ( ) ) ?)
12891252 }
12901253}
12911254
0 commit comments