@@ -80,7 +80,6 @@ use rustc_middle::lint::in_external_macro;
80
80
use rustc_middle:: ty:: { self , TraitRef , Ty , TyS } ;
81
81
use rustc_semver:: RustcVersion ;
82
82
use rustc_session:: { declare_tool_lint, impl_lint_pass} ;
83
- use rustc_span:: symbol:: Symbol ;
84
83
use rustc_span:: { sym, Span } ;
85
84
use rustc_typeck:: hir_ty_to_ty;
86
85
@@ -1997,24 +1996,16 @@ impl_lint_pass!(Methods => [
1997
1996
] ) ;
1998
1997
1999
1998
/// Extracts a method call name, args, and `Span` of the method name.
2000
- fn method_call < ' tcx > ( recv : & ' tcx hir:: Expr < ' tcx > ) -> Option < ( Symbol , & ' tcx [ hir:: Expr < ' tcx > ] , Span ) > {
1999
+ fn method_call < ' tcx > ( recv : & ' tcx hir:: Expr < ' tcx > ) -> Option < ( & ' tcx str , & ' tcx [ hir:: Expr < ' tcx > ] , Span ) > {
2001
2000
if let ExprKind :: MethodCall ( path, span, args, _) = recv. kind {
2002
2001
if !args. iter ( ) . any ( |e| e. span . from_expansion ( ) ) {
2003
- return Some ( ( path. ident . name , args, span) ) ;
2002
+ let name = path. ident . name . as_str ( ) ;
2003
+ return Some ( ( name, args, span) ) ;
2004
2004
}
2005
2005
}
2006
2006
None
2007
2007
}
2008
2008
2009
- /// Same as `method_call` but the `Symbol` is dereferenced into a temporary `&str`
2010
- macro_rules! method_call {
2011
- ( $expr: expr) => {
2012
- method_call( $expr)
2013
- . as_ref( )
2014
- . map( |& ( ref name, args, span) | ( name. as_str( ) , args, span) )
2015
- } ;
2016
- }
2017
-
2018
2009
impl < ' tcx > LateLintPass < ' tcx > for Methods {
2019
2010
fn check_expr ( & mut self , cx : & LateContext < ' tcx > , expr : & ' tcx hir:: Expr < ' _ > ) {
2020
2011
if expr. span . from_expansion ( ) {
@@ -2217,7 +2208,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
2217
2208
2218
2209
#[ allow( clippy:: too_many_lines) ]
2219
2210
fn check_methods < ' tcx > ( cx : & LateContext < ' tcx > , expr : & ' tcx Expr < ' _ > , msrv : Option < & RustcVersion > ) {
2220
- if let Some ( ( name, [ recv, args @ ..] , span) ) = method_call ! ( expr) {
2211
+ if let Some ( ( name, [ recv, args @ ..] , span) ) = method_call ( expr) {
2221
2212
match ( name, args) {
2222
2213
( "add" | "offset" | "sub" | "wrapping_offset" | "wrapping_add" | "wrapping_sub" , [ _arg] ) => {
2223
2214
zst_offset:: check ( cx, expr, recv) ;
@@ -2233,7 +2224,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2233
2224
( "as_ref" , [ ] ) => useless_asref:: check ( cx, expr, "as_ref" , recv) ,
2234
2225
( "assume_init" , [ ] ) => uninit_assumed_init:: check ( cx, expr, recv) ,
2235
2226
( "cloned" , [ ] ) => cloned_instead_of_copied:: check ( cx, expr, recv, span, msrv) ,
2236
- ( "collect" , [ ] ) => match method_call ! ( recv) {
2227
+ ( "collect" , [ ] ) => match method_call ( recv) {
2237
2228
Some ( ( name @ ( "cloned" | "copied" ) , [ recv2] , _) ) => {
2238
2229
iter_cloned_collect:: check ( cx, name, expr, recv2) ;
2239
2230
} ,
@@ -2247,14 +2238,14 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2247
2238
} ,
2248
2239
_ => { } ,
2249
2240
} ,
2250
- ( "count" , [ ] ) => match method_call ! ( recv) {
2241
+ ( "count" , [ ] ) => match method_call ( recv) {
2251
2242
Some ( ( name @ ( "into_iter" | "iter" | "iter_mut" ) , [ recv2] , _) ) => {
2252
2243
iter_count:: check ( cx, expr, recv2, name) ;
2253
2244
} ,
2254
2245
Some ( ( "map" , [ _, arg] , _) ) => suspicious_map:: check ( cx, expr, recv, arg) ,
2255
2246
_ => { } ,
2256
2247
} ,
2257
- ( "expect" , [ _] ) => match method_call ! ( recv) {
2248
+ ( "expect" , [ _] ) => match method_call ( recv) {
2258
2249
Some ( ( "ok" , [ recv] , _) ) => ok_expect:: check ( cx, expr, recv) ,
2259
2250
_ => expect_used:: check ( cx, expr, recv) ,
2260
2251
} ,
@@ -2271,13 +2262,13 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2271
2262
flat_map_option:: check ( cx, expr, arg, span) ;
2272
2263
} ,
2273
2264
( "flatten" , [ ] ) => {
2274
- if let Some ( ( "map" , [ recv, map_arg] , _) ) = method_call ! ( recv) {
2265
+ if let Some ( ( "map" , [ recv, map_arg] , _) ) = method_call ( recv) {
2275
2266
map_flatten:: check ( cx, expr, recv, map_arg) ;
2276
2267
}
2277
2268
} ,
2278
2269
( "fold" , [ init, acc] ) => unnecessary_fold:: check ( cx, expr, init, acc, span) ,
2279
2270
( "for_each" , [ _] ) => {
2280
- if let Some ( ( "inspect" , [ _, _] , span2) ) = method_call ! ( recv) {
2271
+ if let Some ( ( "inspect" , [ _, _] , span2) ) = method_call ( recv) {
2281
2272
inspect_for_each:: check ( cx, expr, span2) ;
2282
2273
}
2283
2274
} ,
@@ -2286,7 +2277,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2286
2277
( "is_none" , [ ] ) => check_is_some_is_none ( cx, expr, recv, false ) ,
2287
2278
( "is_some" , [ ] ) => check_is_some_is_none ( cx, expr, recv, true ) ,
2288
2279
( "map" , [ m_arg] ) => {
2289
- if let Some ( ( name, [ recv2, args @ ..] , span2) ) = method_call ! ( recv) {
2280
+ if let Some ( ( name, [ recv2, args @ ..] , span2) ) = method_call ( recv) {
2290
2281
match ( name, args) {
2291
2282
( "as_mut" , [ ] ) => option_as_ref_deref:: check ( cx, expr, recv2, m_arg, true , msrv) ,
2292
2283
( "as_ref" , [ ] ) => option_as_ref_deref:: check ( cx, expr, recv2, m_arg, false , msrv) ,
@@ -2301,7 +2292,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2301
2292
} ,
2302
2293
( "map_or" , [ def, map] ) => option_map_or_none:: check ( cx, expr, recv, def, map) ,
2303
2294
( "next" , [ ] ) => {
2304
- if let Some ( ( name, [ recv, args @ ..] , _) ) = method_call ! ( recv) {
2295
+ if let Some ( ( name, [ recv, args @ ..] , _) ) = method_call ( recv) {
2305
2296
match ( name, args) {
2306
2297
( "filter" , [ arg] ) => filter_next:: check ( cx, expr, recv, arg) ,
2307
2298
( "filter_map" , [ arg] ) => filter_map_next:: check ( cx, expr, recv, arg, msrv) ,
@@ -2312,7 +2303,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2312
2303
}
2313
2304
}
2314
2305
} ,
2315
- ( "nth" , [ n_arg] ) => match method_call ! ( recv) {
2306
+ ( "nth" , [ n_arg] ) => match method_call ( recv) {
2316
2307
Some ( ( "bytes" , [ recv2] , _) ) => bytes_nth:: check ( cx, expr, recv2, n_arg) ,
2317
2308
Some ( ( "iter" , [ recv2] , _) ) => iter_nth:: check ( cx, expr, recv2, recv, n_arg, false ) ,
2318
2309
Some ( ( "iter_mut" , [ recv2] , _) ) => iter_nth:: check ( cx, expr, recv2, recv, n_arg, true ) ,
@@ -2344,12 +2335,12 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2344
2335
( "to_os_string" | "to_owned" | "to_path_buf" | "to_vec" , [ ] ) => {
2345
2336
implicit_clone:: check ( cx, name, expr, recv, span) ;
2346
2337
} ,
2347
- ( "unwrap" , [ ] ) => match method_call ! ( recv) {
2338
+ ( "unwrap" , [ ] ) => match method_call ( recv) {
2348
2339
Some ( ( "get" , [ recv, get_arg] , _) ) => get_unwrap:: check ( cx, expr, recv, get_arg, false ) ,
2349
2340
Some ( ( "get_mut" , [ recv, get_arg] , _) ) => get_unwrap:: check ( cx, expr, recv, get_arg, true ) ,
2350
2341
_ => unwrap_used:: check ( cx, expr, recv) ,
2351
2342
} ,
2352
- ( "unwrap_or" , [ u_arg] ) => match method_call ! ( recv) {
2343
+ ( "unwrap_or" , [ u_arg] ) => match method_call ( recv) {
2353
2344
Some ( ( arith @ ( "checked_add" | "checked_sub" | "checked_mul" ) , [ lhs, rhs] , _) ) => {
2354
2345
manual_saturating_arithmetic:: check ( cx, expr, lhs, rhs, u_arg, & arith[ "checked_" . len ( ) ..] ) ;
2355
2346
} ,
@@ -2358,7 +2349,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2358
2349
} ,
2359
2350
_ => { } ,
2360
2351
} ,
2361
- ( "unwrap_or_else" , [ u_arg] ) => match method_call ! ( recv) {
2352
+ ( "unwrap_or_else" , [ u_arg] ) => match method_call ( recv) {
2362
2353
Some ( ( "map" , [ recv, map_arg] , _) ) if map_unwrap_or:: check ( cx, expr, recv, map_arg, u_arg, msrv) => { } ,
2363
2354
_ => {
2364
2355
unwrap_or_else_default:: check ( cx, expr, recv, u_arg) ;
@@ -2371,7 +2362,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2371
2362
}
2372
2363
2373
2364
fn check_is_some_is_none ( cx : & LateContext < ' _ > , expr : & Expr < ' _ > , recv : & Expr < ' _ > , is_some : bool ) {
2374
- if let Some ( ( name @ ( "find" | "position" | "rposition" ) , [ f_recv, arg] , span) ) = method_call ! ( recv) {
2365
+ if let Some ( ( name @ ( "find" | "position" | "rposition" ) , [ f_recv, arg] , span) ) = method_call ( recv) {
2375
2366
search_is_some:: check ( cx, expr, name, is_some, f_recv, arg, recv, span) ;
2376
2367
}
2377
2368
}
0 commit comments