2019-04-16 14:46:07 -05:00
|
|
|
#![warn(clippy::len_without_is_empty)]
|
|
|
|
#![allow(dead_code, unused)]
|
|
|
|
|
|
|
|
pub struct PubOne;
|
|
|
|
|
|
|
|
impl PubOne {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl PubOne {
|
|
|
|
// A second impl for this struct -- the error span shouldn't mention this.
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn irrelevant(&self) -> bool {
|
2019-04-16 14:46:07 -05:00
|
|
|
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 {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// No `allow` attribute on this impl block, but that doesn't matter -- we only require one on the
|
|
|
|
// impl containing `len`.
|
|
|
|
impl PubAllowed {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn irrelevant(&self) -> bool {
|
2019-04-16 14:46:07 -05:00
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait PubTraitsToo {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize;
|
2019-04-16 14:46:07 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
impl PubTraitsToo for One {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct HasIsEmpty;
|
|
|
|
|
|
|
|
impl HasIsEmpty {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
|
2020-08-04 20:37:29 -05:00
|
|
|
fn is_empty(&self) -> bool {
|
2019-04-16 14:46:07 -05:00
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct HasWrongIsEmpty;
|
|
|
|
|
|
|
|
impl HasWrongIsEmpty {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn is_empty(&self, x: u32) -> bool {
|
2019-04-16 14:46:07 -05:00
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct NotPubOne;
|
|
|
|
|
|
|
|
impl NotPubOne {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
// No error; `len` is pub but `NotPubOne` is not exported anyway.
|
|
|
|
1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct One;
|
|
|
|
|
|
|
|
impl One {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
// No error; `len` is private; see issue #1085.
|
|
|
|
1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
trait TraitsToo {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize;
|
2019-04-16 14:46:07 -05:00
|
|
|
// No error; `len` is private; see issue #1085.
|
|
|
|
}
|
|
|
|
|
|
|
|
impl TraitsToo for One {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct HasPrivateIsEmpty;
|
|
|
|
|
|
|
|
impl HasPrivateIsEmpty {
|
2020-08-04 20:37:29 -05:00
|
|
|
pub fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
|
2020-08-04 20:37:29 -05:00
|
|
|
fn is_empty(&self) -> bool {
|
2019-04-16 14:46:07 -05:00
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Wither;
|
|
|
|
|
|
|
|
pub trait WithIsEmpty {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize;
|
|
|
|
fn is_empty(&self) -> bool;
|
2019-04-16 14:46:07 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
impl WithIsEmpty for Wither {
|
2020-08-04 20:37:29 -05:00
|
|
|
fn len(&self) -> isize {
|
2019-04-16 14:46:07 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
|
2020-08-04 20:37:29 -05:00
|
|
|
fn is_empty(&self) -> bool {
|
2019-04-16 14:46:07 -05:00
|
|
|
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() {}
|