rust/tests/ui/len_without_is_empty.rs
Philipp Hansch bae7d29dbe
Add run-rustfix for len_zero lint
* Extracts len_without_is_empty into separate file
* Adds `// run-rustfix` to `tests/ui/len_zero.rs`
2019-04-16 21:46:07 +02:00

146 lines
2.4 KiB
Rust

#![warn(clippy::len_without_is_empty)]
#![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
}
}
pub trait PubTraitsToo {
fn len(self: &Self) -> isize;
}
impl PubTraitsToo for One {
fn len(self: &Self) -> isize {
0
}
}
pub struct HasIsEmpty;
impl HasIsEmpty {
pub fn len(self: &Self) -> isize {
1
}
fn is_empty(self: &Self) -> bool {
false
}
}
pub struct HasWrongIsEmpty;
impl HasWrongIsEmpty {
pub fn len(self: &Self) -> isize {
1
}
pub fn is_empty(self: &Self, x: u32) -> 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 issue #1085.
1
}
}
trait TraitsToo {
fn len(self: &Self) -> isize;
// No error; `len` is private; see issue #1085.
}
impl TraitsToo for One {
fn len(self: &Self) -> isize {
0
}
}
struct HasPrivateIsEmpty;
impl HasPrivateIsEmpty {
pub fn len(self: &Self) -> isize {
1
}
fn is_empty(self: &Self) -> bool {
false
}
}
struct Wither;
pub trait WithIsEmpty {
fn len(self: &Self) -> isize;
fn is_empty(self: &Self) -> bool;
}
impl WithIsEmpty for Wither {
fn len(self: &Self) -> isize {
1
}
fn is_empty(self: &Self) -> 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;
}
// This used to ICE.
pub trait Foo: Sized {}
pub trait DependsOnFoo: Foo {
fn len(&mut self) -> usize;
}
fn main() {}