]> 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 a8f1e283643c8229d26cb66f4293000dd553e475..7fba971cfd8876ebb0e2713cdd09e492586b473c 100644 (file)
@@ -1,81 +1,14 @@
-// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
+// run-rustfix
 
+#![warn(clippy::len_zero)]
+#![allow(dead_code, unused, clippy::len_without_is_empty)]
 
-#![feature(tool_lints)]
-
-#![warn(clippy::len_without_is_empty, clippy::len_zero)]
-#![allow(dead_code, unused)]
-
-pub struct PubOne;
-
-impl PubOne {
-    pub fn len(self: &Self) -> isize {
-        1
-    }
-}
-
-impl PubOne {
-    // A second impl for this struct - the error span shouldn't mention this
-    pub fn irrelevant(self: &Self) -> bool {
-        false
-    }
-}
-
-// Identical to PubOne, but with an allow attribute on the impl complaining len
-pub struct PubAllowed;
-
-#[allow(clippy::len_without_is_empty)]
-impl PubAllowed {
-    pub fn len(self: &Self) -> isize {
-        1
-    }
-}
-
-// No allow attribute on this impl block, but that doesn't matter - we only require one on the
-// impl containing len.
-impl PubAllowed {
-    pub fn irrelevant(self: &Self) -> bool {
-        false
-    }
-}
-
-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;
-}
-
-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 {
@@ -84,9 +17,9 @@ fn len(self: &Self) -> isize {
     }
 }
 
-struct HasPrivateIsEmpty;
+pub struct HasIsEmpty;
 
-impl HasPrivateIsEmpty {
+impl HasIsEmpty {
     pub fn len(self: &Self) -> isize {
         1
     }
@@ -96,20 +29,18 @@ fn is_empty(self: &Self) -> bool {
     }
 }
 
-pub struct HasIsEmpty;
+pub struct HasWrongIsEmpty;
 
-impl HasIsEmpty {
+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;
@@ -125,27 +56,6 @@ fn is_empty(self: &Self) -> bool {
     }
 }
 
-pub struct HasWrongIsEmpty;
-
-impl HasWrongIsEmpty {
-    pub fn len(self: &Self) -> isize {
-        1
-    }
-
-    pub fn is_empty(self: &Self, x: u32) -> bool {
-        false
-    }
-}
-
-pub trait Empty {
-    fn is_empty(&self) -> bool;
-}
-
-pub trait InheritingEmpty: Empty {
-    //must not trigger LEN_WITHOUT_IS_EMPTY
-    fn len(&self) -> isize;
-}
-
 fn main() {
     let x = [1, 2];
     if x.len() == 0 {
@@ -156,13 +66,13 @@ fn main() {
 
     let y = One;
     if y.len() == 0 {
-        //no error because One does not have .is_empty()
+        // No error; `One` does not have `.is_empty()`.
         println!("This should not happen either!");
     }
 
-    let z: &TraitsToo = &y;
+    let z: &dyn TraitsToo = &y;
     if z.len() > 0 {
-        //no error, because TraitsToo has no .is_empty() method
+        // No error; `TraitsToo` has no `.is_empty()` method.
         println!("Nor should this!");
     }
 
@@ -183,11 +93,11 @@ fn main() {
         println!("Or this!");
     }
     if has_is_empty.len() > 1 {
-        // no error
+        // No error.
         println!("This can happen.");
     }
     if has_is_empty.len() <= 1 {
-        // no error
+        // No error.
         println!("This can happen.");
     }
     if 0 == has_is_empty.len() {
@@ -206,16 +116,16 @@ fn main() {
         println!("Or this!");
     }
     if 1 < has_is_empty.len() {
-        // no error
+        // No error.
         println!("This can happen.");
     }
     if 1 >= has_is_empty.len() {
-        // no error
+        // 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 {
         println!("Or this!");
     }
@@ -223,7 +133,7 @@ fn main() {
 
     let has_wrong_is_empty = HasWrongIsEmpty;
     if has_wrong_is_empty.len() == 0 {
-        //no error as HasWrongIsEmpty does not have .is_empty()
+        // No error; `HasWrongIsEmpty` does not have `.is_empty()`.
         println!("Or this!");
     }
 }
@@ -231,10 +141,3 @@ fn main() {
 fn test_slice(b: &[u8]) {
     if b.len() != 0 {}
 }
-
-// this used to ICE
-pub trait Foo: Sized {}
-
-pub trait DependsOnFoo: Foo {
-    fn len(&mut self) -> usize;
-}