]> git.lizzy.rs Git - rust.git/commitdiff
Rustup to rustc 1.16.0-nightly (468227129 2017-01-03): Eliminate has_self util
authorManish Goregaokar <manishsmail@gmail.com>
Wed, 4 Jan 2017 21:06:38 +0000 (13:06 -0800)
committerManish Goregaokar <manishsmail@gmail.com>
Wed, 4 Jan 2017 23:50:37 +0000 (15:50 -0800)
clippy_lints/src/len_zero.rs
clippy_lints/src/utils/mod.rs

index 42ba0ebfc402598393d09dc0d5f72eea07c5a8c6..9cd47a8f0566c1d335bf315b76b3af00dc2b7a14 100644 (file)
@@ -4,8 +4,7 @@
 use rustc::hir::*;
 use syntax::ast::{Lit, LitKind, Name};
 use syntax::codemap::{Span, Spanned};
-use utils::{get_item_name, in_macro, snippet, span_lint, span_lint_and_then, walk_ptrs_ty,
-    is_self, has_self};
+use utils::{get_item_name, in_macro, snippet, span_lint, span_lint_and_then, walk_ptrs_ty};
 
 /// **What it does:** Checks for getting the length of something via `.len()`
 /// just to compare to zero, and suggests using `.is_empty()` where applicable.
@@ -88,16 +87,23 @@ fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
     }
 }
 
-fn check_trait_items(cx: &LateContext, item: &Item, trait_items: &[TraitItem]) {
-    fn is_named_self(item: &TraitItem, name: &str) -> bool {
-        if let TraitItemKind::Method(ref sig, _) = item.node {
-            return has_self(&*sig.decl) && &*item.name.as_str() == name && sig.decl.inputs.len() == 1;
+fn check_trait_items(cx: &LateContext, item: &Item, trait_items: &[TraitItemRef]) {
+    fn is_named_self(cx: &LateContext, item: &TraitItemRef, name: &str) -> bool {
+        &*item.name.as_str() == name &&
+        if let AssociatedItemKind::Method { has_self } = item.kind {
+            has_self &&
+            {
+                let did = cx.tcx.map.local_def_id(item.id.node_id);
+                let impl_ty = cx.tcx.item_type(did);
+                impl_ty.fn_args().skip_binder().len() == 1
+            }
+        } else {
+            false
         }
-        false
     }
 
-    if !trait_items.iter().any(|i| is_named_self(i, "is_empty")) {
-        if let Some(i) = trait_items.iter().find(|i| is_named_self(i, "len")) {
+    if !trait_items.iter().any(|i| is_named_self(cx, i, "is_empty")) {
+        if let Some(i) = trait_items.iter().find(|i| is_named_self(cx, i, "len")) {
             if cx.access_levels.is_exported(i.id) {
                 span_lint(cx,
                           LEN_WITHOUT_IS_EMPTY,
index 102074ca15a0bbfc03aba9a16250461bab4e946f..5f6b1777c1290dd65714ff5b03ecd986c450bd91 100644 (file)
@@ -906,6 +906,3 @@ pub fn is_self(slf: &Arg) -> bool {
     }
 }
 
-pub fn has_self(slf: &FnDecl) -> bool {
-    slf.inputs.get(0).map(|arg| is_self(&arg)).unwrap_or(false)
-}