]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/len_zero.rs
Auto merge of #4478 - tsurai:master, r=flip1995
[rust.git] / tests / ui / len_zero.rs
index b640c6db3a3ceb4cdfece7f834d26308021b33fb..7fba971cfd8876ebb0e2713cdd09e492586b473c 100644 (file)
@@ -1,45 +1,14 @@
-#![feature(plugin)]
-#![plugin(clippy)]
+// run-rustfix
 
-#![deny(len_without_is_empty, len_zero)]
-#![allow(dead_code, unused)]
+#![warn(clippy::len_zero)]
+#![allow(dead_code, unused, clippy::len_without_is_empty)]
 
-pub struct PubOne;
-
-impl PubOne {
-    pub fn len(self: &Self) -> isize { //~ERROR item `PubOne` has a public `len` method but no corresponding `is_empty`
-        1
-    }
-}
-
-struct NotPubOne;
-
-impl NotPubOne {
-    pub fn len(self: &Self) -> isize { // no error, len is pub but `NotPubOne` is not exported anyway
-        1
-    }
-}
-
-struct One;
-
-impl One {
-    fn len(self: &Self) -> isize { // no error, len is private, see #1085
-        1
-    }
-}
-
-pub trait PubTraitsToo {
-    fn len(self: &Self) -> isize; //~ERROR trait `PubTraitsToo` has a `len` method but no `is_empty`
-}
-
-impl PubTraitsToo for One {
-    fn len(self: &Self) -> isize {
-        0
-    }
-}
+pub struct One;
+struct Wither;
 
 trait TraitsToo {
-    fn len(self: &Self) -> isize; // no error, len is private, see #1085
+    fn len(self: &Self) -> isize;
+    // No error; `len` is private; see issue #1085.
 }
 
 impl TraitsToo for One {
@@ -48,9 +17,9 @@ fn len(self: &Self) -> isize {
     }
 }
 
-struct HasPrivateIsEmpty;
+pub struct HasIsEmpty;
 
-impl HasPrivateIsEmpty {
+impl HasIsEmpty {
     pub fn len(self: &Self) -> isize {
         1
     }
@@ -60,20 +29,18 @@ fn is_empty(self: &Self) -> bool {
     }
 }
 
-pub struct HasIsEmpty;
+pub struct HasWrongIsEmpty;
 
-impl HasIsEmpty {
-    pub fn len(self: &Self) -> isize { //~ERROR item `HasIsEmpty` has a public `len` method but a private `is_empty`
+impl HasWrongIsEmpty {
+    pub fn len(self: &Self) -> isize {
         1
     }
 
-    fn is_empty(self: &Self) -> bool {
+    pub fn is_empty(self: &Self, x: u32) -> bool {
         false
     }
 }
 
-struct Wither;
-
 pub trait WithIsEmpty {
     fn len(self: &Self) -> isize;
     fn is_empty(self: &Self) -> bool;
@@ -89,75 +56,88 @@ fn is_empty(self: &Self) -> bool {
     }
 }
 
-pub struct HasWrongIsEmpty;
-
-impl HasWrongIsEmpty {
-    pub fn len(self: &Self) -> isize { //~ERROR item `HasWrongIsEmpty` has a public `len` method but no corresponding `is_empty`
-        1
-    }
-
-    pub fn is_empty(self: &Self, x : u32) -> bool {
-        false
-    }
-}
-
 fn main() {
     let x = [1, 2];
     if x.len() == 0 {
-        //~^ERROR length comparison to zero
-        //~|HELP consider using `is_empty`
-        //~|SUGGESTION x.is_empty()
         println!("This should not happen!");
     }
 
-    if "".len() == 0 {
-        //~^ERROR length comparison to zero
-        //~|HELP consider using `is_empty`
-        //~|SUGGESTION "".is_empty()
-    }
+    if "".len() == 0 {}
 
     let y = One;
-    if y.len()  == 0 { //no error because One does not have .is_empty()
+    if y.len() == 0 {
+        // No error; `One` does not have `.is_empty()`.
         println!("This should not happen either!");
     }
 
-    let z : &TraitsToo = &y;
-    if z.len() > 0 { //no error, because TraitsToo has no .is_empty() method
+    let z: &dyn TraitsToo = &y;
+    if z.len() > 0 {
+        // No error; `TraitsToo` has no `.is_empty()` method.
         println!("Nor should this!");
     }
 
     let has_is_empty = HasIsEmpty;
     if has_is_empty.len() == 0 {
-        //~^ERROR length comparison to zero
-        //~|HELP consider using `is_empty`
-        //~|SUGGESTION has_is_empty.is_empty()
         println!("Or this!");
     }
     if has_is_empty.len() != 0 {
-        //~^ERROR length comparison to zero
-        //~|HELP consider using `is_empty`
-        //~|SUGGESTION !has_is_empty.is_empty()
         println!("Or this!");
     }
     if has_is_empty.len() > 0 {
-        //~^ERROR length comparison to zero
-        //~|HELP consider using `is_empty`
-        //~|SUGGESTION !has_is_empty.is_empty()
         println!("Or this!");
     }
+    if has_is_empty.len() < 1 {
+        println!("Or this!");
+    }
+    if has_is_empty.len() >= 1 {
+        println!("Or this!");
+    }
+    if has_is_empty.len() > 1 {
+        // No error.
+        println!("This can happen.");
+    }
+    if has_is_empty.len() <= 1 {
+        // No error.
+        println!("This can happen.");
+    }
+    if 0 == has_is_empty.len() {
+        println!("Or this!");
+    }
+    if 0 != has_is_empty.len() {
+        println!("Or this!");
+    }
+    if 0 < has_is_empty.len() {
+        println!("Or this!");
+    }
+    if 1 <= has_is_empty.len() {
+        println!("Or this!");
+    }
+    if 1 > has_is_empty.len() {
+        println!("Or this!");
+    }
+    if 1 < has_is_empty.len() {
+        // No error.
+        println!("This can happen.");
+    }
+    if 1 >= has_is_empty.len() {
+        // No error.
+        println!("This can happen.");
+    }
     assert!(!has_is_empty.is_empty());
 
-    let with_is_empty: &WithIsEmpty = &Wither;
+    let with_is_empty: &dyn WithIsEmpty = &Wither;
     if with_is_empty.len() == 0 {
-        //~^ERROR length comparison to zero
-        //~|HELP consider using `is_empty`
-        //~|SUGGESTION with_is_empty.is_empty()
         println!("Or this!");
     }
     assert!(!with_is_empty.is_empty());
 
     let has_wrong_is_empty = HasWrongIsEmpty;
-    if has_wrong_is_empty.len() == 0 { //no error as HasWrongIsEmpty does not have .is_empty()
+    if has_wrong_is_empty.len() == 0 {
+        // No error; `HasWrongIsEmpty` does not have `.is_empty()`.
         println!("Or this!");
     }
 }
+
+fn test_slice(b: &[u8]) {
+    if b.len() != 0 {}
+}