@@ -85,7 +85,7 @@ mod build_reduced_graph;
85
85
mod resolve_imports;
86
86
87
87
pub struct ResolvePath < ' a > {
88
- ident : & ' a [ Ident ] ,
88
+ segments : & ' a [ Ident ] ,
89
89
/// NodeId of the path that we are attempting to resolve. When None, this path is being
90
90
/// speculatively resolved and we should not emit errors or lints about it
91
91
source : Option < NodeId > ,
@@ -1663,7 +1663,7 @@ impl<'a> Resolver<'a> {
1663
1663
. collect ( ) ;
1664
1664
1665
1665
let path = ResolvePath {
1666
- ident : & path,
1666
+ segments : & path,
1667
1667
source : None ,
1668
1668
} ;
1669
1669
// FIXME (Manishearth): Intra doc links won't get warned of epoch changes
@@ -2364,7 +2364,7 @@ impl<'a> Resolver<'a> {
2364
2364
. map ( |seg| seg. ident )
2365
2365
. collect ( ) ;
2366
2366
let path = ResolvePath {
2367
- ident : & path,
2367
+ segments : & path,
2368
2368
source : Some ( trait_ref. ref_id ) ,
2369
2369
} ;
2370
2370
let def = self . smart_resolve_path_fragment (
@@ -2803,7 +2803,7 @@ impl<'a> Resolver<'a> {
2803
2803
. map ( |seg| seg. ident )
2804
2804
. collect :: < Vec < _ > > ( ) ;
2805
2805
let resolve_path = ResolvePath {
2806
- ident : & segments,
2806
+ segments : & segments,
2807
2807
source : Some ( id) ,
2808
2808
} ;
2809
2809
self . smart_resolve_path_fragment ( id, qself, & resolve_path, path. span , source)
@@ -2816,7 +2816,7 @@ impl<'a> Resolver<'a> {
2816
2816
span : Span ,
2817
2817
source : PathSource )
2818
2818
-> PathResolution {
2819
- let ident_span = path. ident . last ( ) . map_or ( span, |ident| ident. span ) ;
2819
+ let ident_span = path. segments . last ( ) . map_or ( span, |ident| ident. span ) ;
2820
2820
let ns = source. namespace ( ) ;
2821
2821
let is_expected = & |def| source. is_expected ( def) ;
2822
2822
let is_enum_variant = & |def| if let Def :: Variant ( ..) = def { true } else { false } ;
@@ -2825,31 +2825,31 @@ impl<'a> Resolver<'a> {
2825
2825
let report_errors = |this : & mut Self , def : Option < Def > | {
2826
2826
// Make the base error.
2827
2827
let expected = source. descr_expected ( ) ;
2828
- let path_str = names_to_string ( path. ident ) ;
2828
+ let path_str = names_to_string ( path. segments ) ;
2829
2829
let code = source. error_code ( def. is_some ( ) ) ;
2830
2830
let ( base_msg, fallback_label, base_span) = if let Some ( def) = def {
2831
2831
( format ! ( "expected {}, found {} `{}`" , expected, def. kind_name( ) , path_str) ,
2832
2832
format ! ( "not a {}" , expected) ,
2833
2833
span)
2834
2834
} else {
2835
- let item_str = path. ident [ path. ident . len ( ) - 1 ] ;
2836
- let item_span = path. ident [ path. ident . len ( ) - 1 ] . span ;
2837
- let ( mod_prefix, mod_str) = if path. ident . len ( ) == 1 {
2835
+ let item_str = path. segments [ path. segments . len ( ) - 1 ] ;
2836
+ let item_span = path. segments [ path. segments . len ( ) - 1 ] . span ;
2837
+ let ( mod_prefix, mod_str) = if path. segments . len ( ) == 1 {
2838
2838
( format ! ( "" ) , format ! ( "this scope" ) )
2839
- } else if path. ident . len ( ) == 2 &&
2840
- path. ident [ 0 ] . name == keywords:: CrateRoot . name ( ) {
2839
+ } else if path. segments . len ( ) == 2 &&
2840
+ path. segments [ 0 ] . name == keywords:: CrateRoot . name ( ) {
2841
2841
( format ! ( "" ) , format ! ( "the crate root" ) )
2842
2842
} else {
2843
2843
let mod_path = ResolvePath {
2844
- ident : & path. ident [ ..path. ident . len ( ) - 1 ] ,
2844
+ segments : & path. segments [ ..path. segments . len ( ) - 1 ] ,
2845
2845
source : Some ( id) ,
2846
2846
} ;
2847
2847
let mod_prefix = match this. resolve_path ( & mod_path, Some ( TypeNS ) ,
2848
2848
false , span) {
2849
2849
PathResult :: Module ( module) => module. def ( ) ,
2850
2850
_ => None ,
2851
2851
} . map_or ( format ! ( "" ) , |def| format ! ( "{} " , def. kind_name( ) ) ) ;
2852
- ( mod_prefix, format ! ( "`{}`" , names_to_string( mod_path. ident ) ) )
2852
+ ( mod_prefix, format ! ( "`{}`" , names_to_string( mod_path. segments ) ) )
2853
2853
} ;
2854
2854
( format ! ( "cannot find {} `{}` in {}{}" , expected, item_str, mod_prefix, mod_str) ,
2855
2855
format ! ( "not found in {}" , mod_str) ,
@@ -2859,13 +2859,13 @@ impl<'a> Resolver<'a> {
2859
2859
let mut err = this. session . struct_span_err_with_code ( base_span, & base_msg, code) ;
2860
2860
2861
2861
// Emit special messages for unresolved `Self` and `self`.
2862
- if is_self_type ( path. ident , ns) {
2862
+ if is_self_type ( path. segments , ns) {
2863
2863
__diagnostic_used ! ( E0411 ) ;
2864
2864
err. code ( DiagnosticId :: Error ( "E0411" . into ( ) ) ) ;
2865
2865
err. span_label ( span, "`Self` is only available in traits and impls" ) ;
2866
2866
return ( err, Vec :: new ( ) ) ;
2867
2867
}
2868
- if is_self_value ( path. ident , ns) {
2868
+ if is_self_value ( path. segments , ns) {
2869
2869
__diagnostic_used ! ( E0424 ) ;
2870
2870
err. code ( DiagnosticId :: Error ( "E0424" . into ( ) ) ) ;
2871
2871
err. span_label ( span, format ! ( "`self` value is only available in \
@@ -2874,7 +2874,7 @@ impl<'a> Resolver<'a> {
2874
2874
}
2875
2875
2876
2876
// Try to lookup the name in more relaxed fashion for better error reporting.
2877
- let ident = * path. ident . last ( ) . unwrap ( ) ;
2877
+ let ident = * path. segments . last ( ) . unwrap ( ) ;
2878
2878
let candidates = this. lookup_import_candidates ( ident. name , ns, is_expected) ;
2879
2879
if candidates. is_empty ( ) && is_expected ( Def :: Enum ( DefId :: local ( CRATE_DEF_INDEX ) ) ) {
2880
2880
let enum_candidates =
@@ -2895,9 +2895,10 @@ impl<'a> Resolver<'a> {
2895
2895
}
2896
2896
}
2897
2897
}
2898
- if path. ident . len ( ) == 1 && this. self_type_is_available ( span) {
2898
+ if path. segments . len ( ) == 1 && this. self_type_is_available ( span) {
2899
2899
if let Some ( candidate) = this. lookup_assoc_candidate ( ident, ns, is_expected) {
2900
- let self_is_available = this. self_value_is_available ( path. ident [ 0 ] . span , span) ;
2900
+ let self_is_available = this. self_value_is_available ( path. segments [ 0 ] . span ,
2901
+ span) ;
2901
2902
match candidate {
2902
2903
AssocSuggestion :: Field => {
2903
2904
err. span_suggestion ( span, "try" ,
@@ -2923,7 +2924,8 @@ impl<'a> Resolver<'a> {
2923
2924
let mut levenshtein_worked = false ;
2924
2925
2925
2926
// Try Levenshtein.
2926
- if let Some ( candidate) = this. lookup_typo_candidate ( path. ident , ns, is_expected, span) {
2927
+ if let Some ( candidate) = this. lookup_typo_candidate ( path. segments , ns, is_expected,
2928
+ span) {
2927
2929
err. span_label ( ident_span, format ! ( "did you mean `{}`?" , candidate) ) ;
2928
2930
levenshtein_worked = true ;
2929
2931
}
@@ -3051,7 +3053,7 @@ impl<'a> Resolver<'a> {
3051
3053
// or `<T>::A::B`. If `B` should be resolved in value namespace then
3052
3054
// it needs to be added to the trait map.
3053
3055
if ns == ValueNS {
3054
- let item_name = * path. ident . last ( ) . unwrap ( ) ;
3056
+ let item_name = * path. segments . last ( ) . unwrap ( ) ;
3055
3057
let traits = self . get_traits_containing_item ( item_name, ns) ;
3056
3058
self . trait_map . insert ( id, traits) ;
3057
3059
}
@@ -3138,10 +3140,10 @@ impl<'a> Resolver<'a> {
3138
3140
} ;
3139
3141
}
3140
3142
}
3141
- let is_global = self . global_macros . get ( & path. ident [ 0 ] . name ) . cloned ( )
3143
+ let is_global = self . global_macros . get ( & path. segments [ 0 ] . name ) . cloned ( )
3142
3144
. map ( |binding| binding. get_macro ( self ) . kind ( ) == MacroKind :: Bang ) . unwrap_or ( false ) ;
3143
3145
if primary_ns != MacroNS && ( is_global ||
3144
- self . macro_names . contains ( & path. ident [ 0 ] . modern ( ) ) ) {
3146
+ self . macro_names . contains ( & path. segments [ 0 ] . modern ( ) ) ) {
3145
3147
// Return some dummy definition, it's enough for error reporting.
3146
3148
return Some (
3147
3149
PathResolution :: new ( Def :: Macro ( DefId :: local ( CRATE_DEF_INDEX ) , MacroKind :: Bang ) )
@@ -3163,19 +3165,19 @@ impl<'a> Resolver<'a> {
3163
3165
if qself. position == 0 {
3164
3166
// FIXME: Create some fake resolution that can't possibly be a type.
3165
3167
return Some ( PathResolution :: with_unresolved_segments (
3166
- Def :: Mod ( DefId :: local ( CRATE_DEF_INDEX ) ) , path. ident . len ( )
3168
+ Def :: Mod ( DefId :: local ( CRATE_DEF_INDEX ) ) , path. segments . len ( )
3167
3169
) ) ;
3168
3170
}
3169
3171
// Make sure `A::B` in `<T as A>::B::C` is a trait item.
3170
- let ns = if qself. position + 1 == path. ident . len ( ) { ns } else { TypeNS } ;
3172
+ let ns = if qself. position + 1 == path. segments . len ( ) { ns } else { TypeNS } ;
3171
3173
let path = ResolvePath {
3172
- ident : & path. ident [ ..qself. position + 1 ] ,
3174
+ segments : & path. segments [ ..qself. position + 1 ] ,
3173
3175
source : Some ( id) ,
3174
3176
} ;
3175
3177
let res = self . smart_resolve_path_fragment ( id, None , & path,
3176
3178
span, PathSource :: TraitItem ( ns) ) ;
3177
3179
return Some ( PathResolution :: with_unresolved_segments (
3178
- res. base_def ( ) , res. unresolved_segments ( ) + path. ident . len ( ) - qself. position - 1
3180
+ res. base_def ( ) , res. unresolved_segments ( ) + path. segments . len ( ) - qself. position - 1
3179
3181
) ) ;
3180
3182
}
3181
3183
@@ -3197,11 +3199,11 @@ impl<'a> Resolver<'a> {
3197
3199
// Such behavior is required for backward compatibility.
3198
3200
// The same fallback is used when `a` resolves to nothing.
3199
3201
PathResult :: Module ( ..) | PathResult :: Failed ( ..)
3200
- if ( ns == TypeNS || path. ident . len ( ) > 1 ) &&
3202
+ if ( ns == TypeNS || path. segments . len ( ) > 1 ) &&
3201
3203
self . primitive_type_table . primitive_types
3202
- . contains_key ( & path. ident [ 0 ] . name ) => {
3203
- let prim = self . primitive_type_table . primitive_types [ & path. ident [ 0 ] . name ] ;
3204
- PathResolution :: with_unresolved_segments ( Def :: PrimTy ( prim) , path. ident . len ( ) - 1 )
3204
+ . contains_key ( & path. segments [ 0 ] . name ) => {
3205
+ let prim = self . primitive_type_table . primitive_types [ & path. segments [ 0 ] . name ] ;
3206
+ PathResolution :: with_unresolved_segments ( Def :: PrimTy ( prim) , path. segments . len ( ) - 1 )
3205
3207
}
3206
3208
PathResult :: Module ( module) => PathResolution :: new ( module. def ( ) . unwrap ( ) ) ,
3207
3209
PathResult :: Failed ( span, msg, false ) => {
@@ -3212,12 +3214,12 @@ impl<'a> Resolver<'a> {
3212
3214
PathResult :: Indeterminate => bug ! ( "indetermined path result in resolve_qpath" ) ,
3213
3215
} ;
3214
3216
3215
- if path. ident . len ( ) > 1 && !global_by_default && result. base_def ( ) != Def :: Err &&
3216
- path. ident [ 0 ] . name != keywords:: CrateRoot . name ( ) &&
3217
- path. ident [ 0 ] . name != keywords:: DollarCrate . name ( ) {
3217
+ if path. segments . len ( ) > 1 && !global_by_default && result. base_def ( ) != Def :: Err &&
3218
+ path. segments [ 0 ] . name != keywords:: CrateRoot . name ( ) &&
3219
+ path. segments [ 0 ] . name != keywords:: DollarCrate . name ( ) {
3218
3220
let unqualified_result = {
3219
3221
let path = ResolvePath {
3220
- ident : & [ * path. ident . last ( ) . unwrap ( ) ] ,
3222
+ segments : & [ * path. segments . last ( ) . unwrap ( ) ] ,
3221
3223
source : None ,
3222
3224
} ;
3223
3225
match self . resolve_path ( & path, Some ( ns) , false , span) {
@@ -3243,9 +3245,9 @@ impl<'a> Resolver<'a> {
3243
3245
let mut module = None ;
3244
3246
let mut allow_super = true ;
3245
3247
3246
- for ( i, & ident) in path. ident . iter ( ) . enumerate ( ) {
3248
+ for ( i, & ident) in path. segments . iter ( ) . enumerate ( ) {
3247
3249
debug ! ( "resolve_path ident {} {:?}" , i, ident) ;
3248
- let is_last = i == path. ident . len ( ) - 1 ;
3250
+ let is_last = i == path. segments . len ( ) - 1 ;
3249
3251
let ns = if is_last { opt_ns. unwrap_or ( TypeNS ) } else { TypeNS } ;
3250
3252
let name = ident. name ;
3251
3253
@@ -3275,7 +3277,7 @@ impl<'a> Resolver<'a> {
3275
3277
if ( i == 0 && name == keywords:: CrateRoot . name ( ) ) ||
3276
3278
( i == 0 && name == keywords:: Crate . name ( ) ) ||
3277
3279
( i == 1 && name == keywords:: Crate . name ( ) &&
3278
- path. ident [ 0 ] . name == keywords:: CrateRoot . name ( ) ) {
3280
+ path. segments [ 0 ] . name == keywords:: CrateRoot . name ( ) ) {
3279
3281
// `::a::b` or `::crate::a::b`
3280
3282
module = Some ( self . resolve_crate_root ( ident. span . ctxt ( ) , false ) ) ;
3281
3283
continue
@@ -3284,7 +3286,7 @@ impl<'a> Resolver<'a> {
3284
3286
module = Some ( self . resolve_crate_root ( ident. span . ctxt ( ) , true ) ) ;
3285
3287
continue
3286
3288
} else if i == 1 && !token:: is_path_segment_keyword ( ident) {
3287
- let prev_name = path. ident [ 0 ] . name ;
3289
+ let prev_name = path. segments [ 0 ] . name ;
3288
3290
if prev_name == keywords:: Extern . name ( ) ||
3289
3291
prev_name == keywords:: CrateRoot . name ( ) &&
3290
3292
// Note: When this feature stabilizes, this should
@@ -3310,14 +3312,14 @@ impl<'a> Resolver<'a> {
3310
3312
name == keywords:: Extern . name ( ) && i != 0 ||
3311
3313
// we allow crate::foo and ::crate::foo but nothing else
3312
3314
name == keywords:: Crate . name ( ) && i > 1 &&
3313
- path. ident [ 0 ] . name != keywords:: CrateRoot . name ( ) ||
3314
- name == keywords:: Crate . name ( ) && path. ident . len ( ) == 1 {
3315
+ path. segments [ 0 ] . name != keywords:: CrateRoot . name ( ) ||
3316
+ name == keywords:: Crate . name ( ) && path. segments . len ( ) == 1 {
3315
3317
let name_str = if name == keywords:: CrateRoot . name ( ) {
3316
3318
format ! ( "crate root" )
3317
3319
} else {
3318
3320
format ! ( "`{}`" , name)
3319
3321
} ;
3320
- let msg = if i == 1 && path. ident [ 0 ] . name == keywords:: CrateRoot . name ( ) {
3322
+ let msg = if i == 1 && path. segments [ 0 ] . name == keywords:: CrateRoot . name ( ) {
3321
3323
format ! ( "global paths cannot start with {}" , name_str)
3322
3324
} else {
3323
3325
format ! ( "{} in paths can only be used in start position" , name_str)
@@ -3336,7 +3338,7 @@ impl<'a> Resolver<'a> {
3336
3338
Some ( LexicalScopeBinding :: Def ( def) )
3337
3339
if opt_ns == Some ( TypeNS ) || opt_ns == Some ( ValueNS ) => {
3338
3340
return PathResult :: NonModule ( PathResolution :: with_unresolved_segments (
3339
- def, path. ident . len ( ) - 1
3341
+ def, path. segments . len ( ) - 1
3340
3342
) ) ;
3341
3343
}
3342
3344
_ => Err ( if record_used { Determined } else { Undetermined } ) ,
@@ -3353,7 +3355,7 @@ impl<'a> Resolver<'a> {
3353
3355
return PathResult :: NonModule ( err_path_resolution ( ) ) ;
3354
3356
} else if opt_ns. is_some ( ) && ( is_last || maybe_assoc) {
3355
3357
return PathResult :: NonModule ( PathResolution :: with_unresolved_segments (
3356
- def, path. ident . len ( ) - i - 1
3358
+ def, path. segments . len ( ) - i - 1
3357
3359
) ) ;
3358
3360
} else {
3359
3361
return PathResult :: Failed ( ident. span ,
@@ -3364,7 +3366,7 @@ impl<'a> Resolver<'a> {
3364
3366
if let Some ( id) = path. source {
3365
3367
if i == 1 && self . session . features_untracked ( ) . crate_in_paths
3366
3368
&& !self . session . rust_2018 ( ) {
3367
- let prev_name = path. ident [ 0 ] . name ;
3369
+ let prev_name = path. segments [ 0 ] . name ;
3368
3370
if prev_name == keywords:: Extern . name ( ) ||
3369
3371
prev_name == keywords:: CrateRoot . name ( ) {
3370
3372
let mut is_crate = false ;
@@ -3393,7 +3395,7 @@ impl<'a> Resolver<'a> {
3393
3395
if let Some ( module) = module {
3394
3396
if opt_ns. is_some ( ) && !module. is_normal ( ) {
3395
3397
return PathResult :: NonModule ( PathResolution :: with_unresolved_segments (
3396
- module. def ( ) . unwrap ( ) , path. ident . len ( ) - i
3398
+ module. def ( ) . unwrap ( ) , path. segments . len ( ) - i
3397
3399
) ) ;
3398
3400
}
3399
3401
}
@@ -3412,7 +3414,7 @@ impl<'a> Resolver<'a> {
3412
3414
} else if i == 0 {
3413
3415
format ! ( "Use of undeclared type or module `{}`" , ident)
3414
3416
} else {
3415
- format ! ( "Could not find `{}` in `{}`" , ident, path. ident [ i - 1 ] )
3417
+ format ! ( "Could not find `{}` in `{}`" , ident, path. segments [ i - 1 ] )
3416
3418
} ;
3417
3419
return PathResult :: Failed ( ident. span , msg, is_last) ;
3418
3420
}
@@ -3633,7 +3635,7 @@ impl<'a> Resolver<'a> {
3633
3635
} else {
3634
3636
// Search in module.
3635
3637
let mod_path = ResolvePath {
3636
- ident : & path[ ..path. len ( ) - 1 ] ,
3638
+ segments : & path[ ..path. len ( ) - 1 ] ,
3637
3639
source : None ,
3638
3640
} ;
3639
3641
if let PathResult :: Module ( module) = self . resolve_path ( & mod_path, Some ( TypeNS ) ,
@@ -4057,7 +4059,7 @@ impl<'a> Resolver<'a> {
4057
4059
. collect :: < Vec < _ > > ( ) ;
4058
4060
let span = path. span ;
4059
4061
let path = ResolvePath {
4060
- ident : & segments,
4062
+ segments : & segments,
4061
4063
source : None ,
4062
4064
} ;
4063
4065
let def = self . smart_resolve_path_fragment ( id, None , & path, span,
0 commit comments