8
8
// option. This file may not be copied, modified, or distributed
9
9
// except according to those terms.
10
10
11
- //! Give useful errors and suggestions to users when a method can't be
11
+ //! Give useful errors and suggestions to users when an item can't be
12
12
//! found or is otherwise invalid.
13
13
14
14
use CrateCtxt ;
@@ -27,12 +27,12 @@ use syntax::print::pprust;
27
27
use std:: cell;
28
28
use std:: cmp:: Ordering ;
29
29
30
- use super :: { MethodError , CandidateSource , impl_method , trait_method } ;
30
+ use super :: { MethodError , CandidateSource , impl_item , trait_item } ;
31
31
32
32
pub fn report_error < ' a , ' tcx > ( fcx : & FnCtxt < ' a , ' tcx > ,
33
33
span : Span ,
34
34
rcvr_ty : Ty < ' tcx > ,
35
- method_name : ast:: Name ,
35
+ item_name : ast:: Name ,
36
36
rcvr_expr : Option < & ast:: Expr > ,
37
37
error : MethodError )
38
38
{
@@ -44,26 +44,26 @@ pub fn report_error<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
44
44
match error {
45
45
MethodError :: NoMatch ( static_sources, out_of_scope_traits) => {
46
46
let cx = fcx. tcx ( ) ;
47
- let method_ustring = method_name . user_string ( cx) ;
47
+ let item_ustring = item_name . user_string ( cx) ;
48
48
49
49
fcx. type_error_message (
50
50
span,
51
51
|actual| {
52
52
format ! ( "type `{}` does not implement any \
53
- method in scope named `{}`",
53
+ item in scope named `{}`",
54
54
actual,
55
- method_ustring )
55
+ item_ustring )
56
56
} ,
57
57
rcvr_ty,
58
58
None ) ;
59
59
60
- // If the method has the name of a field, give a help note
60
+ // If the item has the name of a field, give a help note
61
61
if let ( & ty:: ty_struct( did, _) , Some ( _) ) = ( & rcvr_ty. sty , rcvr_expr) {
62
62
let fields = ty:: lookup_struct_fields ( cx, did) ;
63
- if fields. iter ( ) . any ( |f| f. name == method_name ) {
63
+ if fields. iter ( ) . any ( |f| f. name == item_name ) {
64
64
cx. sess . span_note ( span,
65
65
& format ! ( "use `(s.{0})(...)` if you meant to call the \
66
- function stored in the `{0}` field", method_ustring ) ) ;
66
+ function stored in the `{0}` field", item_ustring ) ) ;
67
67
}
68
68
}
69
69
@@ -72,25 +72,25 @@ pub fn report_error<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
72
72
span,
73
73
"found defined static methods, maybe a `self` is missing?" ) ;
74
74
75
- report_candidates ( fcx, span, method_name , static_sources) ;
75
+ report_candidates ( fcx, span, item_name , static_sources) ;
76
76
}
77
77
78
- suggest_traits_to_import ( fcx, span, rcvr_ty, method_name ,
78
+ suggest_traits_to_import ( fcx, span, rcvr_ty, item_name ,
79
79
rcvr_expr, out_of_scope_traits)
80
80
}
81
81
82
82
MethodError :: Ambiguity ( sources) => {
83
83
span_err ! ( fcx. sess( ) , span, E0034 ,
84
- "multiple applicable methods in scope" ) ;
84
+ "multiple applicable items in scope" ) ;
85
85
86
- report_candidates ( fcx, span, method_name , sources) ;
86
+ report_candidates ( fcx, span, item_name , sources) ;
87
87
}
88
88
89
89
MethodError :: ClosureAmbiguity ( trait_def_id) => {
90
90
let msg = format ! ( "the `{}` method from the `{}` trait cannot be explicitly \
91
91
invoked on this closure as we have not yet inferred what \
92
92
kind of closure it is",
93
- method_name . user_string( fcx. tcx( ) ) ,
93
+ item_name . user_string( fcx. tcx( ) ) ,
94
94
ty:: item_path_str( fcx. tcx( ) , trait_def_id) ) ;
95
95
let msg = if let Some ( callee) = rcvr_expr {
96
96
format ! ( "{}; use overloaded call notation instead (e.g., `{}()`)" ,
@@ -104,19 +104,19 @@ pub fn report_error<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
104
104
105
105
fn report_candidates ( fcx : & FnCtxt ,
106
106
span : Span ,
107
- method_name : ast:: Name ,
107
+ item_name : ast:: Name ,
108
108
mut sources : Vec < CandidateSource > ) {
109
109
sources. sort ( ) ;
110
110
sources. dedup ( ) ;
111
111
112
112
for ( idx, source) in sources. iter ( ) . enumerate ( ) {
113
113
match * source {
114
114
CandidateSource :: ImplSource ( impl_did) => {
115
- // Provide the best span we can. Use the method , if local to crate, else
116
- // the impl, if local to crate (method may be defaulted), else the call site.
117
- let method = impl_method ( fcx. tcx ( ) , impl_did, method_name ) . unwrap ( ) ;
115
+ // Provide the best span we can. Use the item , if local to crate, else
116
+ // the impl, if local to crate (item may be defaulted), else the call site.
117
+ let item = impl_item ( fcx. tcx ( ) , impl_did, item_name ) . unwrap ( ) ;
118
118
let impl_span = fcx. tcx ( ) . map . def_id_span ( impl_did, span) ;
119
- let method_span = fcx. tcx ( ) . map . def_id_span ( method . def_id , impl_span) ;
119
+ let item_span = fcx. tcx ( ) . map . def_id_span ( item . def_id ( ) , impl_span) ;
120
120
121
121
let impl_ty = check:: impl_self_ty ( fcx, span, impl_did) . ty ;
122
122
@@ -127,16 +127,16 @@ pub fn report_error<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
127
127
trait_ref. def_id) ) ,
128
128
} ;
129
129
130
- span_note ! ( fcx. sess( ) , method_span ,
130
+ span_note ! ( fcx. sess( ) , item_span ,
131
131
"candidate #{} is defined in an impl{} for the type `{}`" ,
132
132
idx + 1 ,
133
133
insertion,
134
134
impl_ty. user_string( fcx. tcx( ) ) ) ;
135
135
}
136
136
CandidateSource :: TraitSource ( trait_did) => {
137
- let ( _, method ) = trait_method ( fcx. tcx ( ) , trait_did, method_name ) . unwrap ( ) ;
138
- let method_span = fcx. tcx ( ) . map . def_id_span ( method . def_id , span) ;
139
- span_note ! ( fcx. sess( ) , method_span ,
137
+ let ( _, item ) = trait_item ( fcx. tcx ( ) , trait_did, item_name ) . unwrap ( ) ;
138
+ let item_span = fcx. tcx ( ) . map . def_id_span ( item . def_id ( ) , span) ;
139
+ span_note ! ( fcx. sess( ) , item_span ,
140
140
"candidate #{} is defined in the trait `{}`" ,
141
141
idx + 1 ,
142
142
ty:: item_path_str( fcx. tcx( ) , trait_did) ) ;
@@ -152,19 +152,19 @@ pub type AllTraitsVec = Vec<TraitInfo>;
152
152
fn suggest_traits_to_import < ' a , ' tcx > ( fcx : & FnCtxt < ' a , ' tcx > ,
153
153
span : Span ,
154
154
rcvr_ty : Ty < ' tcx > ,
155
- method_name : ast:: Name ,
155
+ item_name : ast:: Name ,
156
156
rcvr_expr : Option < & ast:: Expr > ,
157
157
valid_out_of_scope_traits : Vec < ast:: DefId > )
158
158
{
159
159
let tcx = fcx. tcx ( ) ;
160
- let method_ustring = method_name . user_string ( tcx) ;
160
+ let item_ustring = item_name . user_string ( tcx) ;
161
161
162
162
if !valid_out_of_scope_traits. is_empty ( ) {
163
163
let mut candidates = valid_out_of_scope_traits;
164
164
candidates. sort ( ) ;
165
165
candidates. dedup ( ) ;
166
166
let msg = format ! (
167
- "methods from traits can only be called if the trait is in scope; \
167
+ "items from traits can only be used if the trait is in scope; \
168
168
the following {traits_are} implemented but not in scope, \
169
169
perhaps add a `use` for {one_of_them}:",
170
170
traits_are = if candidates. len( ) == 1 { "trait is" } else { "traits are" } ,
@@ -185,7 +185,7 @@ fn suggest_traits_to_import<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
185
185
let type_is_local = type_derefs_to_local ( fcx, span, rcvr_ty, rcvr_expr) ;
186
186
187
187
// there's no implemented traits, so lets suggest some traits to
188
- // implement, by finding ones that have the method name, and are
188
+ // implement, by finding ones that have the item name, and are
189
189
// legal to implement.
190
190
let mut candidates = all_traits ( fcx. ccx )
191
191
. filter ( |info| {
@@ -196,7 +196,7 @@ fn suggest_traits_to_import<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
196
196
// implementing a trait would be legal but is rejected
197
197
// here).
198
198
( type_is_local || ast_util:: is_local ( info. def_id ) )
199
- && trait_method ( tcx, info. def_id , method_name ) . is_some ( )
199
+ && trait_item ( tcx, info. def_id , item_name ) . is_some ( )
200
200
} )
201
201
. collect :: < Vec < _ > > ( ) ;
202
202
@@ -209,12 +209,12 @@ fn suggest_traits_to_import<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
209
209
// of a type parameter: suggest adding a trait bound rather
210
210
// than implementing.
211
211
let msg = format ! (
212
- "methods from traits can only be called if the trait is implemented and in scope; \
213
- the following {traits_define} a method `{name}`, \
212
+ "items from traits can only be used if the trait is implemented and in scope; \
213
+ the following {traits_define} an item `{name}`, \
214
214
perhaps you need to implement {one_of_them}:",
215
215
traits_define = if candidates. len( ) == 1 { "trait defines" } else { "traits define" } ,
216
216
one_of_them = if candidates. len( ) == 1 { "it" } else { "one of them" } ,
217
- name = method_ustring ) ;
217
+ name = item_ustring ) ;
218
218
219
219
fcx. sess ( ) . fileline_help ( span, & msg[ ..] ) ;
220
220
0 commit comments