@@ -16,22 +16,19 @@ use std::env;
16
16
use std:: sync:: LazyLock ;
17
17
18
18
use base_db:: SourceDatabaseFileInputExt as _;
19
- use either:: Either ;
20
19
use expect_test:: Expect ;
21
20
use hir_def:: {
22
21
db:: DefDatabase ,
23
22
expr_store:: { Body , BodySourceMap } ,
24
23
hir:: { ExprId , Pat , PatId } ,
25
24
item_scope:: ItemScope ,
26
25
nameres:: DefMap ,
27
- src:: { HasChildSource , HasSource } ,
28
- AdtId , AssocItemId , DefWithBodyId , FieldId , HasModule , LocalModuleId , Lookup , ModuleDefId ,
29
- SyntheticSyntax ,
26
+ src:: HasSource ,
27
+ AssocItemId , DefWithBodyId , HasModule , LocalModuleId , Lookup , ModuleDefId , SyntheticSyntax ,
30
28
} ;
31
29
use hir_expand:: { db:: ExpandDatabase , FileRange , InFile } ;
32
30
use itertools:: Itertools ;
33
31
use rustc_hash:: FxHashMap ;
34
- use span:: TextSize ;
35
32
use stdx:: format_to;
36
33
use syntax:: {
37
34
ast:: { self , AstNode , HasName } ,
@@ -135,40 +132,14 @@ fn check_impl(
135
132
None => continue ,
136
133
} ;
137
134
let def_map = module. def_map ( & db) ;
138
- visit_module ( & db, & def_map, module. local_id , & mut |it| match it {
139
- ModuleDefId :: FunctionId ( it) => defs. push ( it. into ( ) ) ,
140
- ModuleDefId :: EnumVariantId ( it) => {
141
- defs. push ( it. into ( ) ) ;
142
- let variant_id = it. into ( ) ;
143
- let vd = db. variant_data ( variant_id) ;
144
- defs. extend ( vd. fields ( ) . iter ( ) . filter_map ( |( local_id, fd) | {
145
- if fd. has_default {
146
- let field = FieldId { parent : variant_id, local_id, has_default : true } ;
147
- Some ( DefWithBodyId :: FieldId ( field) )
148
- } else {
149
- None
150
- }
151
- } ) ) ;
152
- }
153
- ModuleDefId :: ConstId ( it) => defs. push ( it. into ( ) ) ,
154
- ModuleDefId :: StaticId ( it) => defs. push ( it. into ( ) ) ,
155
- ModuleDefId :: AdtId ( it) => {
156
- let variant_id = match it {
157
- AdtId :: StructId ( it) => it. into ( ) ,
158
- AdtId :: UnionId ( it) => it. into ( ) ,
159
- AdtId :: EnumId ( _) => return ,
160
- } ;
161
- let vd = db. variant_data ( variant_id) ;
162
- defs. extend ( vd. fields ( ) . iter ( ) . filter_map ( |( local_id, fd) | {
163
- if fd. has_default {
164
- let field = FieldId { parent : variant_id, local_id, has_default : true } ;
165
- Some ( DefWithBodyId :: FieldId ( field) )
166
- } else {
167
- None
168
- }
169
- } ) ) ;
170
- }
171
- _ => { }
135
+ visit_module ( & db, & def_map, module. local_id , & mut |it| {
136
+ defs. push ( match it {
137
+ ModuleDefId :: FunctionId ( it) => it. into ( ) ,
138
+ ModuleDefId :: EnumVariantId ( it) => it. into ( ) ,
139
+ ModuleDefId :: ConstId ( it) => it. into ( ) ,
140
+ ModuleDefId :: StaticId ( it) => it. into ( ) ,
141
+ _ => return ,
142
+ } )
172
143
} ) ;
173
144
}
174
145
defs. sort_by_key ( |def| match def {
@@ -189,20 +160,12 @@ fn check_impl(
189
160
loc. source ( & db) . value . syntax ( ) . text_range ( ) . start ( )
190
161
}
191
162
DefWithBodyId :: InTypeConstId ( it) => it. source ( & db) . syntax ( ) . text_range ( ) . start ( ) ,
192
- DefWithBodyId :: FieldId ( it) => {
193
- let cs = it. parent . child_source ( & db) ;
194
- match cs. value . get ( it. local_id ) {
195
- Some ( Either :: Left ( it) ) => it. syntax ( ) . text_range ( ) . start ( ) ,
196
- Some ( Either :: Right ( it) ) => it. syntax ( ) . text_range ( ) . end ( ) ,
197
- None => TextSize :: new ( u32:: MAX ) ,
198
- }
199
- }
163
+ DefWithBodyId :: FieldId ( _) => unreachable ! ( ) ,
200
164
} ) ;
201
165
let mut unexpected_type_mismatches = String :: new ( ) ;
202
166
for def in defs {
203
167
let ( body, body_source_map) = db. body_with_source_map ( def) ;
204
168
let inference_result = db. infer ( def) ;
205
- dbg ! ( & inference_result) ;
206
169
207
170
for ( pat, mut ty) in inference_result. type_of_pat . iter ( ) {
208
171
if let Pat :: Bind { id, .. } = body. pats [ pat] {
@@ -426,40 +389,14 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
426
389
let def_map = module. def_map ( & db) ;
427
390
428
391
let mut defs: Vec < DefWithBodyId > = Vec :: new ( ) ;
429
- visit_module ( & db, & def_map, module. local_id , & mut |it| match it {
430
- ModuleDefId :: FunctionId ( it) => defs. push ( it. into ( ) ) ,
431
- ModuleDefId :: EnumVariantId ( it) => {
432
- defs. push ( it. into ( ) ) ;
433
- let variant_id = it. into ( ) ;
434
- let vd = db. variant_data ( variant_id) ;
435
- defs. extend ( vd. fields ( ) . iter ( ) . filter_map ( |( local_id, fd) | {
436
- if fd. has_default {
437
- let field = FieldId { parent : variant_id, local_id, has_default : true } ;
438
- Some ( DefWithBodyId :: FieldId ( field) )
439
- } else {
440
- None
441
- }
442
- } ) ) ;
443
- }
444
- ModuleDefId :: ConstId ( it) => defs. push ( it. into ( ) ) ,
445
- ModuleDefId :: StaticId ( it) => defs. push ( it. into ( ) ) ,
446
- ModuleDefId :: AdtId ( it) => {
447
- let variant_id = match it {
448
- AdtId :: StructId ( it) => it. into ( ) ,
449
- AdtId :: UnionId ( it) => it. into ( ) ,
450
- AdtId :: EnumId ( _) => return ,
451
- } ;
452
- let vd = db. variant_data ( variant_id) ;
453
- defs. extend ( vd. fields ( ) . iter ( ) . filter_map ( |( local_id, fd) | {
454
- if fd. has_default {
455
- let field = FieldId { parent : variant_id, local_id, has_default : true } ;
456
- Some ( DefWithBodyId :: FieldId ( field) )
457
- } else {
458
- None
459
- }
460
- } ) ) ;
461
- }
462
- _ => { }
392
+ visit_module ( & db, & def_map, module. local_id , & mut |it| {
393
+ defs. push ( match it {
394
+ ModuleDefId :: FunctionId ( it) => it. into ( ) ,
395
+ ModuleDefId :: EnumVariantId ( it) => it. into ( ) ,
396
+ ModuleDefId :: ConstId ( it) => it. into ( ) ,
397
+ ModuleDefId :: StaticId ( it) => it. into ( ) ,
398
+ _ => return ,
399
+ } )
463
400
} ) ;
464
401
defs. sort_by_key ( |def| match def {
465
402
DefWithBodyId :: FunctionId ( it) => {
@@ -479,14 +416,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
479
416
loc. source ( & db) . value . syntax ( ) . text_range ( ) . start ( )
480
417
}
481
418
DefWithBodyId :: InTypeConstId ( it) => it. source ( & db) . syntax ( ) . text_range ( ) . start ( ) ,
482
- DefWithBodyId :: FieldId ( it) => {
483
- let cs = it. parent . child_source ( & db) ;
484
- match cs. value . get ( it. local_id ) {
485
- Some ( Either :: Left ( it) ) => it. syntax ( ) . text_range ( ) . start ( ) ,
486
- Some ( Either :: Right ( it) ) => it. syntax ( ) . text_range ( ) . end ( ) ,
487
- None => TextSize :: new ( u32:: MAX ) ,
488
- }
489
- }
419
+ DefWithBodyId :: FieldId ( _) => unreachable ! ( ) ,
490
420
} ) ;
491
421
for def in defs {
492
422
let ( body, source_map) = db. body_with_source_map ( def) ;
@@ -547,7 +477,7 @@ pub(crate) fn visit_module(
547
477
let body = db. body ( it. into ( ) ) ;
548
478
visit_body ( db, & body, cb) ;
549
479
}
550
- ModuleDefId :: AdtId ( AdtId :: EnumId ( it) ) => {
480
+ ModuleDefId :: AdtId ( hir_def :: AdtId :: EnumId ( it) ) => {
551
481
db. enum_data ( it) . variants . iter ( ) . for_each ( |& ( it, _) | {
552
482
let body = db. body ( it. into ( ) ) ;
553
483
cb ( it. into ( ) ) ;
0 commit comments