@@ -116,24 +116,37 @@ mod record_exports;
116
116
mod build_reduced_graph;
117
117
mod resolve_imports;
118
118
119
- fn resolve_err_417 < ' a , ' tcx > ( this : & Resolver < ' a , ' tcx > , span : syntax:: codemap:: Span , formatted : & str ) {
120
- resolve_err ! ( this, span, E0417 , "{}" , formatted) ;
119
+ pub enum ResolutionError < ' b , ' a : ' b , ' tcx : ' a > {
120
+ /// error: static variables cannot be referenced in a pattern
121
+ StaticVariableReference ( & ' b Resolver < ' a , ' tcx > , syntax:: codemap:: Span ) ,
122
+ /// error: does not name a struct
123
+ DoesNotNameAStruct ( & ' b Resolver < ' a , ' tcx > , syntax:: codemap:: Span ) ,
124
+ /// error: is a struct variant name, but this expression uses it like a function name
125
+ StructVariantUsedAsFunction ( & ' a Resolver < ' a , ' tcx > , syntax:: codemap:: Span ) ,
126
+ /// error: unresolved import
127
+ UnresolvedImport ( & ' b Resolver < ' a , ' tcx > , syntax:: codemap:: Span ) ,
128
+ /// error: failed to resolve
129
+ FailedToResolve ( & ' b Resolver < ' a , ' tcx > , syntax:: codemap:: Span ) ,
121
130
}
122
131
123
- fn resolve_err_422 < ' a , ' tcx > ( this : & Resolver < ' a , ' tcx > , span : syntax:: codemap:: Span , formatted : & str ) {
124
- resolve_err ! ( this, span, E0422 , "{}" , formatted) ;
125
- }
126
-
127
- fn resolve_err_423 < ' a , ' tcx > ( this : & Resolver < ' a , ' tcx > , span : syntax:: codemap:: Span , formatted : & str ) {
128
- resolve_err ! ( this, span, E0423 , "{}" , formatted) ;
129
- }
130
-
131
- fn resolve_err_432 < ' a , ' tcx > ( this : & Resolver < ' a , ' tcx > , span : syntax:: codemap:: Span , formatted : & str ) {
132
- resolve_err ! ( this, span, E0432 , "{}" , formatted) ;
133
- }
134
-
135
- fn resolve_err_433 < ' a , ' tcx > ( this : & Resolver < ' a , ' tcx > , span : syntax:: codemap:: Span , formatted : & str ) {
136
- resolve_err ! ( this, span, E0433 , "{}" , formatted) ;
132
+ fn resolve_error < ' b , ' a : ' b , ' tcx : ' a > ( resolution_error : & ResolutionError < ' b , ' a , ' tcx > , formatted : & str ) {
133
+ match resolution_error {
134
+ & ResolutionError :: StaticVariableReference ( resolver, span) => {
135
+ resolve_err ! ( resolver, span, E0417 , "{}" , formatted) ;
136
+ } ,
137
+ & ResolutionError :: DoesNotNameAStruct ( resolver, span) => {
138
+ resolve_err ! ( resolver, span, E0422 , "{}" , formatted) ;
139
+ } ,
140
+ & ResolutionError :: StructVariantUsedAsFunction ( resolver, span) => {
141
+ resolve_err ! ( resolver, span, E0423 , "{}" , formatted) ;
142
+ } ,
143
+ & ResolutionError :: UnresolvedImport ( resolver, span) => {
144
+ resolve_err ! ( resolver, span, E0432 , "{}" , formatted) ;
145
+ } ,
146
+ & ResolutionError :: FailedToResolve ( resolver, span) => {
147
+ resolve_err ! ( resolver, span, E0433 , "{}" , formatted) ;
148
+ } ,
149
+ }
137
150
}
138
151
139
152
#[ derive( Copy , Clone ) ]
@@ -1330,7 +1343,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1330
1343
PathSearch ,
1331
1344
true ) {
1332
1345
Failed ( Some ( ( span, msg) ) ) => {
1333
- resolve_err_433 ( self , span, & * format ! ( "failed to resolve. {}" , msg) ) ;
1346
+ resolve_error ( & ResolutionError :: FailedToResolve ( self , span) ,
1347
+ & * format ! ( "failed to resolve. {}" ,
1348
+ msg)
1349
+ ) ;
1334
1350
} ,
1335
1351
Failed ( None ) => ( ) , // Continue up the search chain.
1336
1352
Indeterminate => {
@@ -1588,12 +1604,13 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1588
1604
. span_to_snippet ( ( * imports) [ index] . span )
1589
1605
. unwrap ( ) ;
1590
1606
if sn. contains ( "::" ) {
1591
- resolve_err_432 ( self , ( * imports) [ index] . span , "unresolved import" ) ;
1607
+ resolve_error ( & ResolutionError :: UnresolvedImport ( self , ( * imports) [ index] . span ) ,
1608
+ "unresolved import" ) ;
1592
1609
} else {
1593
- resolve_err_432 ( self , ( * imports) [ index] . span ,
1594
- & * format ! ( "unresolved import (maybe you meant `{}::*`?)" ,
1595
- sn)
1596
- ) ;
1610
+ resolve_error ( & ResolutionError :: UnresolvedImport ( self , ( * imports) [ index] . span ) ,
1611
+ & * format ! ( "unresolved import (maybe you meant `{}::*`?)" ,
1612
+ sn)
1613
+ ) ;
1597
1614
}
1598
1615
}
1599
1616
@@ -2549,10 +2566,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2549
2566
self . record_def ( pattern. id , path_res) ;
2550
2567
}
2551
2568
DefStatic ( ..) => {
2552
- resolve_err_417 ( self , path. span ,
2553
- "static variables cannot be \
2554
- referenced in a pattern, \
2555
- use a `const` instead") ;
2569
+ resolve_error ( & ResolutionError :: StaticVariableReference ( & self , path. span ) ,
2570
+ "static variables cannot be \
2571
+ referenced in a pattern, \
2572
+ use a `const` instead") ;
2556
2573
}
2557
2574
_ => {
2558
2575
// If anything ends up here entirely resolved,
@@ -2630,7 +2647,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2630
2647
result => {
2631
2648
debug ! ( "(resolving pattern) didn't find struct \
2632
2649
def: {:?}", result) ;
2633
- resolve_err_422 ( self , path. span ,
2650
+ resolve_error ( & ResolutionError :: DoesNotNameAStruct ( self , path. span ) ,
2634
2651
& * format ! ( "`{}` does not name a structure" ,
2635
2652
path_names_to_string( path, 0 ) ) ) ;
2636
2653
}
@@ -2678,10 +2695,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2678
2695
return FoundConst ( def, LastMod ( AllPublic ) ) ;
2679
2696
}
2680
2697
DefStatic ( ..) => {
2681
- resolve_err_417 ( self , span,
2682
- "static variables cannot be \
2683
- referenced in a pattern, \
2684
- use a `const` instead") ;
2698
+ resolve_error ( & ResolutionError :: StaticVariableReference ( self , span) ,
2699
+ "static variables cannot be \
2700
+ referenced in a pattern, \
2701
+ use a `const` instead") ;
2685
2702
return BareIdentifierPatternUnresolved ;
2686
2703
}
2687
2704
_ => {
@@ -2698,9 +2715,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2698
2715
Failed ( err) => {
2699
2716
match err {
2700
2717
Some ( ( span, msg) ) => {
2701
- resolve_err_433 ( self , span,
2702
- & * format ! ( "failed to resolve: {}" ,
2703
- msg) ) ;
2718
+ resolve_error ( & ResolutionError :: FailedToResolve ( self , span) ,
2719
+ & * format ! ( "failed to resolve. {}" ,
2720
+ msg)
2721
+ ) ;
2704
2722
}
2705
2723
None => ( )
2706
2724
}
@@ -2929,9 +2947,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2929
2947
}
2930
2948
} ;
2931
2949
2932
- resolve_err_433 ( self , span,
2933
- & * format ! ( "failed to resolve: {}" ,
2934
- msg) ) ;
2950
+ resolve_error ( & ResolutionError :: FailedToResolve ( self , span) ,
2951
+ & * format ! ( "failed to resolve. {}" ,
2952
+ msg)
2953
+ ) ;
2935
2954
return None ;
2936
2955
}
2937
2956
Indeterminate => panic ! ( "indeterminate unexpected" ) ,
@@ -2990,11 +3009,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2990
3009
}
2991
3010
} ;
2992
3011
2993
- /*self.resolve_error(span, &format!("failed to resolve. {}",
2994
- msg));*/
2995
- resolve_err_433 ( self , span,
2996
- & * format ! ( "failed to resolve: {}" ,
2997
- msg) ) ;
3012
+ resolve_error ( & ResolutionError :: FailedToResolve ( self , span) ,
3013
+ & * format ! ( "failed to resolve. {}" ,
3014
+ msg)
3015
+ ) ;
2998
3016
return None ;
2999
3017
}
3000
3018
@@ -3090,9 +3108,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3090
3108
failed to resolve {}", name) ;
3091
3109
3092
3110
if let Some ( ( span, msg) ) = err {
3093
- resolve_err_433 ( self , span,
3094
- & * format ! ( "failed to resolve: {}" ,
3095
- msg) )
3111
+ resolve_error ( & ResolutionError :: FailedToResolve ( self , span) ,
3112
+ & * format ! ( "failed to resolve. {}" ,
3113
+ msg)
3114
+ )
3096
3115
}
3097
3116
3098
3117
return None ;
@@ -3294,11 +3313,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3294
3313
// Check if struct variant
3295
3314
if let DefVariant ( _, _, true ) = path_res. base_def {
3296
3315
let path_name = path_names_to_string ( path, 0 ) ;
3297
- resolve_err_423 ( self , expr. span ,
3298
- & * format ! ( "`{}` is a struct variant name, but \
3299
- this expression \
3300
- uses it like a function name",
3301
- path_name) ) ;
3316
+
3317
+ resolve_error ( & ResolutionError :: StructVariantUsedAsFunction ( self , expr. span ) ,
3318
+ & * format ! ( "`{}` is a struct variant name, but \
3319
+ this expression \
3320
+ uses it like a function name",
3321
+ path_name) ) ;
3302
3322
3303
3323
let msg = format ! ( "did you mean to write: \
3304
3324
`{} {{ /* fields */ }}`?",
@@ -3335,11 +3355,11 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3335
3355
match type_res. map ( |r| r. base_def ) {
3336
3356
Some ( DefTy ( struct_id, _) )
3337
3357
if self . structs . contains_key ( & struct_id) => {
3338
- resolve_err_423 ( self , expr. span ,
3339
- & * format ! ( "{}` is a structure name, but \
3340
- this expression \
3341
- uses it like a function name",
3342
- path_name) ) ;
3358
+ resolve_error ( & ResolutionError :: StructVariantUsedAsFunction ( self , expr. span ) ,
3359
+ & * format ! ( "` {}` is a struct variant name, but \
3360
+ this expression \
3361
+ uses it like a function name",
3362
+ path_name) ) ;
3343
3363
3344
3364
let msg = format ! ( "did you mean to write: \
3345
3365
`{} {{ /* fields */ }}`?",
@@ -3414,7 +3434,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3414
3434
Some ( definition) => self . record_def ( expr. id , definition) ,
3415
3435
None => {
3416
3436
debug ! ( "(resolving expression) didn't find struct def" , ) ;
3417
- resolve_err_422 ( self , path. span ,
3437
+
3438
+ resolve_error ( & ResolutionError :: DoesNotNameAStruct ( self , path. span ) ,
3418
3439
& * format ! ( "`{}` does not name a structure" ,
3419
3440
path_names_to_string( path, 0 ) ) ) ;
3420
3441
}
0 commit comments