about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorllogiq <bogusandre@gmail.com>2016-01-16 00:02:08 +0100
committerllogiq <bogusandre@gmail.com>2016-01-16 00:02:08 +0100
commitda8a788b778ef0fcfdb3ff36ed3b9ce487e276dc (patch)
tree33f02ef9b0ee224f087a53f5bed0e153e8fdff7b /src
parent604be945d27c37f3415b52a3c249984a860a2f56 (diff)
parent7499f3c7a945f7dc32c3b9a7fd553874a2adff43 (diff)
downloadrust-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.rs15
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");
     }