mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-12-29 22:43:41 +00:00
bae7d29dbe
* Extracts len_without_is_empty into separate file * Adds `// run-rustfix` to `tests/ui/len_zero.rs`
145 lines
2.4 KiB
Rust
145 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() {}
|