diff options
| author | llogiq <bogusandre@gmail.com> | 2016-01-16 00:02:08 +0100 |
|---|---|---|
| committer | llogiq <bogusandre@gmail.com> | 2016-01-16 00:02:08 +0100 |
| commit | da8a788b778ef0fcfdb3ff36ed3b9ce487e276dc (patch) | |
| tree | 33f02ef9b0ee224f087a53f5bed0e153e8fdff7b /src | |
| parent | 604be945d27c37f3415b52a3c249984a860a2f56 (diff) | |
| parent | 7499f3c7a945f7dc32c3b9a7fd553874a2adff43 (diff) | |
| download | rust-da8a788b778ef0fcfdb3ff36ed3b9ce487e276dc.tar.gz rust-da8a788b778ef0fcfdb3ff36ed3b9ce487e276dc.zip | |
Merge pull request #551 from fhartwig/unused-lifetimes-fix
Consider lifetime in self parameter in unused_lifetime lint
Diffstat (limited to 'src')
| -rw-r--r-- | src/lifetimes.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/lifetimes.rs b/src/lifetimes.rs index 2de916cfebc..1edd75a45aa 100644 --- a/src/lifetimes.rs +++ b/src/lifetimes.rs @@ -77,7 +77,7 @@ fn check_fn_inner(cx: &LateContext, decl: &FnDecl, slf: Option<&ExplicitSelf>, g span, "explicit lifetimes given in parameter types where they could be elided"); } - report_extra_lifetimes(cx, decl, &generics); + report_extra_lifetimes(cx, decl, &generics, slf); } fn could_use_elision(cx: &LateContext, func: &FnDecl, slf: Option<&ExplicitSelf>, named_lts: &[LifetimeDef]) -> bool { @@ -303,14 +303,25 @@ impl<'v> Visitor<'v> for LifetimeChecker { } } -fn report_extra_lifetimes(cx: &LateContext, func: &FnDecl, generics: &Generics) { +fn report_extra_lifetimes(cx: &LateContext, func: &FnDecl, + generics: &Generics, slf: Option<&ExplicitSelf>) { let hs = generics.lifetimes .iter() .map(|lt| (lt.lifetime.name, lt.lifetime.span)) .collect(); let mut checker = LifetimeChecker(hs); + walk_generics(&mut checker, generics); walk_fn_decl(&mut checker, func); + + if let Some(slf) = slf { + match slf.node { + SelfRegion(Some(ref lt), _, _) => checker.visit_lifetime(lt), + SelfExplicit(ref t, _) => walk_ty(&mut checker, t), + _ => {} + } + } + for (_, v) in checker.0 { span_lint(cx, UNUSED_LIFETIMES, v, "this lifetime isn't used in the function definition"); } |
