@@ -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
@@ -2002,24 +2001,16 @@ impl_lint_pass!(Methods => [
2002
2001
] ) ;
2003
2002
2004
2003
/// Extracts a method call name, args, and `Span` of the method name.
2005
- fn method_call < ' tcx > ( recv : & ' tcx hir:: Expr < ' tcx > ) -> Option < ( Symbol , & ' tcx [ hir:: Expr < ' tcx > ] , Span ) > {
2004
+ fn method_call < ' tcx > ( recv : & ' tcx hir:: Expr < ' tcx > ) -> Option < ( & ' tcx str , & ' tcx [ hir:: Expr < ' tcx > ] , Span ) > {
2006
2005
if let ExprKind :: MethodCall ( path, span, args, _) = recv. kind {
2007
2006
if !args. iter ( ) . any ( |e| e. span . from_expansion ( ) ) {
2008
- return Some ( ( path. ident . name , args, span) ) ;
2007
+ let name = path. ident . name . as_str ( ) ;
2008
+ return Some ( ( name, args, span) ) ;
2009
2009
}
2010
2010
}
2011
2011
None
2012
2012
}
2013
2013
2014
- /// Same as `method_call` but the `Symbol` is dereferenced into a temporary `&str`
2015
- macro_rules! method_call {
2016
- ( $expr: expr) => {
2017
- method_call( $expr)
2018
- . as_ref( )
2019
- . map( |& ( ref name, args, span) | ( name. as_str( ) , args, span) )
2020
- } ;
2021
- }
2022
-
2023
2014
impl < ' tcx > LateLintPass < ' tcx > for Methods {
2024
2015
fn check_expr ( & mut self , cx : & LateContext < ' tcx > , expr : & ' tcx hir:: Expr < ' _ > ) {
2025
2016
if expr. span . from_expansion ( ) {
@@ -2222,7 +2213,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
2222
2213
2223
2214
#[ allow( clippy:: too_many_lines) ]
2224
2215
fn check_methods < ' tcx > ( cx : & LateContext < ' tcx > , expr : & ' tcx Expr < ' _ > , msrv : Option < & RustcVersion > ) {
2225
- if let Some ( ( name, [ recv, args @ ..] , span) ) = method_call ! ( expr) {
2216
+ if let Some ( ( name, [ recv, args @ ..] , span) ) = method_call ( expr) {
2226
2217
match ( name, args) {
2227
2218
( "add" | "offset" | "sub" | "wrapping_offset" | "wrapping_add" | "wrapping_sub" , [ _arg] ) => {
2228
2219
zst_offset:: check ( cx, expr, recv) ;
@@ -2238,7 +2229,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2238
2229
( "as_ref" , [ ] ) => useless_asref:: check ( cx, expr, "as_ref" , recv) ,
2239
2230
( "assume_init" , [ ] ) => uninit_assumed_init:: check ( cx, expr, recv) ,
2240
2231
( "cloned" , [ ] ) => cloned_instead_of_copied:: check ( cx, expr, recv, span, msrv) ,
2241
- ( "collect" , [ ] ) => match method_call ! ( recv) {
2232
+ ( "collect" , [ ] ) => match method_call ( recv) {
2242
2233
Some ( ( name @ ( "cloned" | "copied" ) , [ recv2] , _) ) => {
2243
2234
iter_cloned_collect:: check ( cx, name, expr, recv2) ;
2244
2235
} ,
@@ -2252,14 +2243,14 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2252
2243
} ,
2253
2244
_ => { } ,
2254
2245
} ,
2255
- ( "count" , [ ] ) => match method_call ! ( recv) {
2246
+ ( "count" , [ ] ) => match method_call ( recv) {
2256
2247
Some ( ( name @ ( "into_iter" | "iter" | "iter_mut" ) , [ recv2] , _) ) => {
2257
2248
iter_count:: check ( cx, expr, recv2, name) ;
2258
2249
} ,
2259
2250
Some ( ( "map" , [ _, arg] , _) ) => suspicious_map:: check ( cx, expr, recv, arg) ,
2260
2251
_ => { } ,
2261
2252
} ,
2262
- ( "expect" , [ _] ) => match method_call ! ( recv) {
2253
+ ( "expect" , [ _] ) => match method_call ( recv) {
2263
2254
Some ( ( "ok" , [ recv] , _) ) => ok_expect:: check ( cx, expr, recv) ,
2264
2255
_ => expect_used:: check ( cx, expr, recv) ,
2265
2256
} ,
@@ -2276,13 +2267,13 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2276
2267
flat_map_option:: check ( cx, expr, arg, span) ;
2277
2268
} ,
2278
2269
( "flatten" , [ ] ) => {
2279
- if let Some ( ( "map" , [ recv, map_arg] , _) ) = method_call ! ( recv) {
2270
+ if let Some ( ( "map" , [ recv, map_arg] , _) ) = method_call ( recv) {
2280
2271
map_flatten:: check ( cx, expr, recv, map_arg) ;
2281
2272
}
2282
2273
} ,
2283
2274
( "fold" , [ init, acc] ) => unnecessary_fold:: check ( cx, expr, init, acc, span) ,
2284
2275
( "for_each" , [ _] ) => {
2285
- if let Some ( ( "inspect" , [ _, _] , span2) ) = method_call ! ( recv) {
2276
+ if let Some ( ( "inspect" , [ _, _] , span2) ) = method_call ( recv) {
2286
2277
inspect_for_each:: check ( cx, expr, span2) ;
2287
2278
}
2288
2279
} ,
@@ -2291,7 +2282,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2291
2282
( "is_none" , [ ] ) => check_is_some_is_none ( cx, expr, recv, false ) ,
2292
2283
( "is_some" , [ ] ) => check_is_some_is_none ( cx, expr, recv, true ) ,
2293
2284
( "map" , [ m_arg] ) => {
2294
- if let Some ( ( name, [ recv2, args @ ..] , span2) ) = method_call ! ( recv) {
2285
+ if let Some ( ( name, [ recv2, args @ ..] , span2) ) = method_call ( recv) {
2295
2286
match ( name, args) {
2296
2287
( "as_mut" , [ ] ) => option_as_ref_deref:: check ( cx, expr, recv2, m_arg, true , msrv) ,
2297
2288
( "as_ref" , [ ] ) => option_as_ref_deref:: check ( cx, expr, recv2, m_arg, false , msrv) ,
@@ -2306,7 +2297,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2306
2297
} ,
2307
2298
( "map_or" , [ def, map] ) => option_map_or_none:: check ( cx, expr, recv, def, map) ,
2308
2299
( "next" , [ ] ) => {
2309
- if let Some ( ( name, [ recv, args @ ..] , _) ) = method_call ! ( recv) {
2300
+ if let Some ( ( name, [ recv, args @ ..] , _) ) = method_call ( recv) {
2310
2301
match ( name, args) {
2311
2302
( "filter" , [ arg] ) => filter_next:: check ( cx, expr, recv, arg) ,
2312
2303
( "filter_map" , [ arg] ) => filter_map_next:: check ( cx, expr, recv, arg, msrv) ,
@@ -2317,7 +2308,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2317
2308
}
2318
2309
}
2319
2310
} ,
2320
- ( "nth" , [ n_arg] ) => match method_call ! ( recv) {
2311
+ ( "nth" , [ n_arg] ) => match method_call ( recv) {
2321
2312
Some ( ( "bytes" , [ recv2] , _) ) => bytes_nth:: check ( cx, expr, recv2, n_arg) ,
2322
2313
Some ( ( "iter" , [ recv2] , _) ) => iter_nth:: check ( cx, expr, recv2, recv, n_arg, false ) ,
2323
2314
Some ( ( "iter_mut" , [ recv2] , _) ) => iter_nth:: check ( cx, expr, recv2, recv, n_arg, true ) ,
@@ -2349,12 +2340,12 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2349
2340
( "to_os_string" | "to_owned" | "to_path_buf" | "to_vec" , [ ] ) => {
2350
2341
implicit_clone:: check ( cx, name, expr, recv, span) ;
2351
2342
} ,
2352
- ( "unwrap" , [ ] ) => match method_call ! ( recv) {
2343
+ ( "unwrap" , [ ] ) => match method_call ( recv) {
2353
2344
Some ( ( "get" , [ recv, get_arg] , _) ) => get_unwrap:: check ( cx, expr, recv, get_arg, false ) ,
2354
2345
Some ( ( "get_mut" , [ recv, get_arg] , _) ) => get_unwrap:: check ( cx, expr, recv, get_arg, true ) ,
2355
2346
_ => unwrap_used:: check ( cx, expr, recv) ,
2356
2347
} ,
2357
- ( "unwrap_or" , [ u_arg] ) => match method_call ! ( recv) {
2348
+ ( "unwrap_or" , [ u_arg] ) => match method_call ( recv) {
2358
2349
Some ( ( arith @ ( "checked_add" | "checked_sub" | "checked_mul" ) , [ lhs, rhs] , _) ) => {
2359
2350
manual_saturating_arithmetic:: check ( cx, expr, lhs, rhs, u_arg, & arith[ "checked_" . len ( ) ..] ) ;
2360
2351
} ,
@@ -2363,7 +2354,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2363
2354
} ,
2364
2355
_ => { } ,
2365
2356
} ,
2366
- ( "unwrap_or_else" , [ u_arg] ) => match method_call ! ( recv) {
2357
+ ( "unwrap_or_else" , [ u_arg] ) => match method_call ( recv) {
2367
2358
Some ( ( "map" , [ recv, map_arg] , _) ) if map_unwrap_or:: check ( cx, expr, recv, map_arg, u_arg, msrv) => { } ,
2368
2359
_ => {
2369
2360
unwrap_or_else_default:: check ( cx, expr, recv, u_arg) ;
@@ -2376,7 +2367,7 @@ fn check_methods<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, msrv: Optio
2376
2367
}
2377
2368
2378
2369
fn check_is_some_is_none ( cx : & LateContext < ' _ > , expr : & Expr < ' _ > , recv : & Expr < ' _ > , is_some : bool ) {
2379
- if let Some ( ( name @ ( "find" | "position" | "rposition" ) , [ f_recv, arg] , span) ) = method_call ! ( recv) {
2370
+ if let Some ( ( name @ ( "find" | "position" | "rposition" ) , [ f_recv, arg] , span) ) = method_call ( recv) {
2380
2371
search_is_some:: check ( cx, expr, name, is_some, f_recv, arg, recv, span) ;
2381
2372
}
2382
2373
}
0 commit comments