mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-12-11 22:02:55 +00:00
2009b58df2
[`len_without_is_empty`]: follow type alias to find inherent `is_empty` method Fixes #11165 When we see an `impl B` and `B` is a type alias to some type `A`, then we need to follow the type alias to look for an `is_empty` method on the aliased type `A`. Before this PR, it'd get the inherent impls of `B`, which there aren't any and so it would warn that there isn't an `is_empty` method even if there was one. Passing the type alias `DefId` to `TyCtxt::type_of` gives us the aliased `DefId` (or simply return the type itself if it wasn't a type alias) so we can just use that changelog: [`len_without_is_empty`]: follow type alias to find inherent `is_empty` method
151 lines
5 KiB
Text
151 lines
5 KiB
Text
error: struct `PubOne` has a public `len` method, but no `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:7:5
|
|
|
|
|
LL | pub fn len(&self) -> isize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: `-D clippy::len-without-is-empty` implied by `-D warnings`
|
|
= help: to override `-D warnings` add `#[allow(clippy::len_without_is_empty)]`
|
|
|
|
error: trait `PubTraitsToo` has a `len` method but no (possibly inherited) `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:57:1
|
|
|
|
|
LL | / pub trait PubTraitsToo {
|
|
LL | |
|
|
LL | | fn len(&self) -> isize;
|
|
LL | | }
|
|
| |_^
|
|
|
|
error: struct `HasIsEmpty` has a public `len` method, but a private `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:71:5
|
|
|
|
|
LL | pub fn len(&self) -> isize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
note: `is_empty` defined here
|
|
--> $DIR/len_without_is_empty.rs:76:5
|
|
|
|
|
LL | fn is_empty(&self) -> bool {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
error: struct `HasWrongIsEmpty` has a public `len` method, but the `is_empty` method has an unexpected signature
|
|
--> $DIR/len_without_is_empty.rs:84:5
|
|
|
|
|
LL | pub fn len(&self) -> isize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
note: `is_empty` defined here
|
|
--> $DIR/len_without_is_empty.rs:89:5
|
|
|
|
|
LL | pub fn is_empty(&self, x: u32) -> bool {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
= note: expected signature: `(&self) -> bool`
|
|
|
|
error: struct `MismatchedSelf` has a public `len` method, but the `is_empty` method has an unexpected signature
|
|
--> $DIR/len_without_is_empty.rs:97:5
|
|
|
|
|
LL | pub fn len(self) -> isize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
note: `is_empty` defined here
|
|
--> $DIR/len_without_is_empty.rs:102:5
|
|
|
|
|
LL | pub fn is_empty(&self) -> bool {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
= note: expected signature: `(self) -> bool`
|
|
|
|
error: trait `DependsOnFoo` has a `len` method but no (possibly inherited) `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:177:1
|
|
|
|
|
LL | / pub trait DependsOnFoo: Foo {
|
|
LL | |
|
|
LL | | fn len(&mut self) -> usize;
|
|
LL | | }
|
|
| |_^
|
|
|
|
error: struct `OptionalLen3` has a public `len` method, but the `is_empty` method has an unexpected signature
|
|
--> $DIR/len_without_is_empty.rs:223:5
|
|
|
|
|
LL | pub fn len(&self) -> usize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
note: `is_empty` defined here
|
|
--> $DIR/len_without_is_empty.rs:229:5
|
|
|
|
|
LL | pub fn is_empty(&self) -> Option<bool> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
= note: expected signature: `(&self) -> bool`
|
|
|
|
error: struct `ResultLen` has a public `len` method, but the `is_empty` method has an unexpected signature
|
|
--> $DIR/len_without_is_empty.rs:236:5
|
|
|
|
|
LL | pub fn len(&self) -> Result<usize, ()> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
note: `is_empty` defined here
|
|
--> $DIR/len_without_is_empty.rs:243:5
|
|
|
|
|
LL | pub fn is_empty(&self) -> Option<bool> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
= note: expected signature: `(&self) -> bool` or `(&self) -> Result<bool>
|
|
|
|
error: this returns a `Result<_, ()>`
|
|
--> $DIR/len_without_is_empty.rs:236:5
|
|
|
|
|
LL | pub fn len(&self) -> Result<usize, ()> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
= help: use a custom `Error` type instead
|
|
= note: `-D clippy::result-unit-err` implied by `-D warnings`
|
|
= help: to override `-D warnings` add `#[allow(clippy::result_unit_err)]`
|
|
|
|
error: this returns a `Result<_, ()>`
|
|
--> $DIR/len_without_is_empty.rs:250:5
|
|
|
|
|
LL | pub fn len(&self) -> Result<usize, ()> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
= help: use a custom `Error` type instead
|
|
|
|
error: this returns a `Result<_, ()>`
|
|
--> $DIR/len_without_is_empty.rs:255:5
|
|
|
|
|
LL | pub fn is_empty(&self) -> Result<bool, ()> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
= help: use a custom `Error` type instead
|
|
|
|
error: this returns a `Result<_, ()>`
|
|
--> $DIR/len_without_is_empty.rs:263:5
|
|
|
|
|
LL | pub fn len(&self) -> Result<usize, ()> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
= help: use a custom `Error` type instead
|
|
|
|
error: struct `AsyncLenWithoutIsEmpty` has a public `len` method, but no `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:305:5
|
|
|
|
|
LL | pub async fn len(&self) -> usize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
error: struct `AsyncOptionLenWithoutIsEmpty` has a public `len` method, but no `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:318:5
|
|
|
|
|
LL | pub async fn len(&self) -> Option<usize> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
error: struct `AsyncResultLenWithoutIsEmpty` has a public `len` method, but no `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:340:5
|
|
|
|
|
LL | pub async fn len(&self) -> Result<usize, ()> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
error: type `Alias2` has a public `len` method, but no `is_empty` method
|
|
--> $DIR/len_without_is_empty.rs:456:5
|
|
|
|
|
LL | pub fn len(&self) -> usize {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
error: aborting due to 16 previous errors
|
|
|