@@ -29,7 +29,7 @@ use hir_def::{
29
29
type_ref:: { Mutability , TypesMap , TypesSourceMap } ,
30
30
} ;
31
31
use hir_expand:: {
32
- HirFileId , InFile , InMacroFile , MacroFileId , MacroFileIdExt ,
32
+ HirFileId , InFile , MacroFileId , MacroFileIdExt ,
33
33
mod_path:: path,
34
34
name:: { AsName , Name } ,
35
35
} ;
@@ -129,13 +129,8 @@ impl SourceAnalyzer {
129
129
)
130
130
}
131
131
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) ;
139
134
let sm = self . body_source_map ( ) ?;
140
135
sm. node_expr ( src. as_ref ( ) )
141
136
}
@@ -151,37 +146,10 @@ impl SourceAnalyzer {
151
146
if let Pat :: Bind { id, .. } = self . body ( ) ?. pats [ pat_id. as_pat ( ) ?] { Some ( id) } else { None }
152
147
}
153
148
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 ] > {
182
150
// It is safe to omit destructuring assignments here because they have no adjustments (neither
183
151
// 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 ( ) ?;
185
153
let infer = self . infer . as_ref ( ) ?;
186
154
infer. expr_adjustments . get ( & expr_id) . map ( |v| & * * v)
187
155
}
@@ -191,7 +159,7 @@ impl SourceAnalyzer {
191
159
db : & dyn HirDatabase ,
192
160
expr : & ast:: Expr ,
193
161
) -> Option < ( Type , Option < Type > ) > {
194
- let expr_id = self . expr_id ( db , expr) ?;
162
+ let expr_id = self . expr_id ( expr. clone ( ) ) ?;
195
163
let infer = self . infer . as_ref ( ) ?;
196
164
let coerced = expr_id
197
165
. as_expr ( )
@@ -284,7 +252,7 @@ impl SourceAnalyzer {
284
252
db : & dyn HirDatabase ,
285
253
call : & ast:: MethodCallExpr ,
286
254
) -> 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 ( ) ?;
288
256
let ( func, substs) = self . infer . as_ref ( ) ?. method_resolution ( expr_id) ?;
289
257
let ty = db. value_ty ( func. into ( ) ) ?. substitute ( Interner , & substs) ;
290
258
let ty = Type :: new_with_resolver ( db, & self . resolver , ty) ;
@@ -298,7 +266,7 @@ impl SourceAnalyzer {
298
266
db : & dyn HirDatabase ,
299
267
call : & ast:: MethodCallExpr ,
300
268
) -> 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 ( ) ?;
302
270
let ( f_in_trait, substs) = self . infer . as_ref ( ) ?. method_resolution ( expr_id) ?;
303
271
304
272
Some ( self . resolve_impl_method_or_trait_def ( db, f_in_trait, substs) . into ( ) )
@@ -309,7 +277,7 @@ impl SourceAnalyzer {
309
277
db : & dyn HirDatabase ,
310
278
call : & ast:: MethodCallExpr ,
311
279
) -> 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 ( ) ?;
313
281
let inference_result = self . infer . as_ref ( ) ?;
314
282
match inference_result. method_resolution ( expr_id) {
315
283
Some ( ( f_in_trait, substs) ) => {
@@ -339,11 +307,10 @@ impl SourceAnalyzer {
339
307
340
308
pub ( crate ) fn resolve_field (
341
309
& self ,
342
- db : & dyn HirDatabase ,
343
310
field : & ast:: FieldExpr ,
344
311
) -> Option < Either < Field , TupleField > > {
345
312
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 ( ) ?;
347
314
self . infer . as_ref ( ) ?. field_resolution ( expr_id) . map ( |it| {
348
315
it. map_either ( Into :: into, |f| TupleField { owner : def, tuple : f. tuple , index : f. index } )
349
316
} )
@@ -373,7 +340,7 @@ impl SourceAnalyzer {
373
340
field : & ast:: FieldExpr ,
374
341
) -> Option < ( Either < Either < Field , TupleField > , Function > , Option < GenericSubstitution > ) > {
375
342
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 ( ) ?;
377
344
let inference_result = self . infer . as_ref ( ) ?;
378
345
match inference_result. field_resolution ( expr_id) {
379
346
Some ( field) => match field {
@@ -444,7 +411,7 @@ impl SourceAnalyzer {
444
411
db : & dyn HirDatabase ,
445
412
await_expr : & ast:: AwaitExpr ,
446
413
) -> 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 ( ) ;
448
415
449
416
let into_future_trait = self
450
417
. resolver
@@ -494,7 +461,7 @@ impl SourceAnalyzer {
494
461
self . infer
495
462
. as_ref ( )
496
463
. 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 ( ) ?;
498
465
let ( func, _) = infer. method_resolution ( expr) ?;
499
466
let ( deref_mut_trait, deref_mut) = self . lang_trait_fn (
500
467
db,
@@ -513,7 +480,7 @@ impl SourceAnalyzer {
513
480
}
514
481
} ;
515
482
516
- let ty = self . ty_of_expr ( db , & prefix_expr. expr ( ) ?) ?;
483
+ let ty = self . ty_of_expr ( prefix_expr. expr ( ) ?) ?;
517
484
518
485
// HACK: subst for all methods coincides with that for their trait because the methods
519
486
// don't have any generic parameters, so we skip building another subst for the methods.
@@ -527,16 +494,16 @@ impl SourceAnalyzer {
527
494
db : & dyn HirDatabase ,
528
495
index_expr : & ast:: IndexExpr ,
529
496
) -> 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 ( ) ?) ?;
532
499
533
500
let ( index_trait, index_fn) =
534
501
self . lang_trait_fn ( db, LangItem :: Index , & Name :: new_symbol_root ( sym:: index. clone ( ) ) ) ?;
535
502
let ( op_trait, op_fn) = self
536
503
. infer
537
504
. as_ref ( )
538
505
. 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 ( ) ?;
540
507
let ( func, _) = infer. method_resolution ( expr) ?;
541
508
let ( index_mut_trait, index_mut_fn) = self . lang_trait_fn (
542
509
db,
@@ -561,8 +528,8 @@ impl SourceAnalyzer {
561
528
binop_expr : & ast:: BinExpr ,
562
529
) -> Option < FunctionId > {
563
530
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 ( ) ?) ?;
566
533
567
534
let ( op_trait, op_fn) = lang_items_for_bin_op ( op)
568
535
. and_then ( |( name, lang_item) | self . lang_trait_fn ( db, lang_item, & name) ) ?;
@@ -581,7 +548,7 @@ impl SourceAnalyzer {
581
548
db : & dyn HirDatabase ,
582
549
try_expr : & ast:: TryExpr ,
583
550
) -> Option < FunctionId > {
584
- let ty = self . ty_of_expr ( db , & try_expr. expr ( ) ?) ?;
551
+ let ty = self . ty_of_expr ( try_expr. expr ( ) ?) ?;
585
552
586
553
let op_fn = db. lang_item ( self . resolver . krate ( ) , LangItem :: TryTraitBranch ) ?. as_function ( ) ?;
587
554
let op_trait = match op_fn. lookup ( db. upcast ( ) ) . container {
@@ -721,7 +688,7 @@ impl SourceAnalyzer {
721
688
let resolved = ( || {
722
689
let infer = self . infer . as_deref ( ) ?;
723
690
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 ( ) ) ?;
725
692
if let Some ( ( assoc, subs) ) = infer. assoc_resolutions_for_expr_or_pat ( expr_id) {
726
693
let ( assoc, subst) = match assoc {
727
694
AssocItemId :: FunctionId ( f_in_trait) => {
@@ -819,7 +786,7 @@ impl SourceAnalyzer {
819
786
return Some ( ( PathResolution :: Def ( ModuleDef :: Variant ( variant. into ( ) ) ) , None ) ) ;
820
787
}
821
788
} 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 ( ) ) ?;
823
790
if let Some ( VariantId :: EnumVariantId ( variant) ) =
824
791
infer. variant_resolution_for_expr_or_pat ( expr_id)
825
792
{
@@ -1010,7 +977,7 @@ impl SourceAnalyzer {
1010
977
let subst = ( || {
1011
978
let parent = parent ( ) ?;
1012
979
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) ?;
1014
981
self . infer . as_ref ( ) ?. type_of_expr_or_pat ( expr_id) ?
1015
982
} else if let Some ( pat) = ast:: Pat :: cast ( parent) {
1016
983
let pat_id = self . pat_id ( & pat) ?;
@@ -1064,7 +1031,7 @@ impl SourceAnalyzer {
1064
1031
let body = self . body ( ) ?;
1065
1032
let infer = self . infer . as_ref ( ) ?;
1066
1033
1067
- let expr_id = self . expr_id ( db , & literal. clone ( ) . into ( ) ) ?;
1034
+ let expr_id = self . expr_id ( literal. clone ( ) . into ( ) ) ?;
1068
1035
let substs = infer[ expr_id] . as_adt ( ) ?. 1 ;
1069
1036
1070
1037
let ( variant, missing_fields, _exhaustive) = match expr_id {
@@ -1130,13 +1097,9 @@ impl SourceAnalyzer {
1130
1097
Some ( macro_call_id. as_macro_file ( ) ) . filter ( |it| it. expansion_level ( db. upcast ( ) ) < 64 )
1131
1098
}
1132
1099
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 > {
1138
1101
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 ( ) ) ?;
1140
1103
infer. variant_resolution_for_expr_or_pat ( expr_id)
1141
1104
}
1142
1105
@@ -1284,8 +1247,8 @@ impl SourceAnalyzer {
1284
1247
Some ( ( trait_id, fn_id) )
1285
1248
}
1286
1249
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 ( ) ) ?)
1289
1252
}
1290
1253
}
1291
1254
0 commit comments