2022-06-16 15:39:06 +00:00
|
|
|
#![feature(lint_reasons)]
|
2021-09-28 17:03:12 +00:00
|
|
|
#![warn(clippy::same_name_method)]
|
|
|
|
#![allow(dead_code, non_camel_case_types)]
|
|
|
|
|
|
|
|
trait T1 {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
trait T2 {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
mod should_lint {
|
|
|
|
|
|
|
|
mod test_basic_case {
|
|
|
|
use crate::T1;
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
fn foo() {}
|
2023-08-24 19:32:12 +00:00
|
|
|
//~^ ERROR: method's name is the same as an existing method in a trait
|
2021-09-28 17:03:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl T1 for S {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mod test_derive {
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
fn clone() {}
|
2023-08-24 19:32:12 +00:00
|
|
|
//~^ ERROR: method's name is the same as an existing method in a trait
|
2021-09-28 17:03:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mod with_generic {
|
|
|
|
use crate::T1;
|
|
|
|
|
|
|
|
struct S<U>(U);
|
|
|
|
|
|
|
|
impl<U> S<U> {
|
|
|
|
fn foo() {}
|
2023-08-24 19:32:12 +00:00
|
|
|
//~^ ERROR: method's name is the same as an existing method in a trait
|
2021-09-28 17:03:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<U: Copy> T1 for S<U> {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mod default_method {
|
|
|
|
use crate::T1;
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
fn foo() {}
|
2023-08-24 19:32:12 +00:00
|
|
|
//~^ ERROR: method's name is the same as an existing method in a trait
|
2021-09-28 17:03:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl T1 for S {}
|
|
|
|
}
|
|
|
|
|
2023-05-05 15:45:49 +00:00
|
|
|
mod multiple_conflicting_traits {
|
2021-09-28 17:03:12 +00:00
|
|
|
use crate::{T1, T2};
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
fn foo() {}
|
2023-08-24 19:32:12 +00:00
|
|
|
//~^ ERROR: method's name is the same as an existing method in a trait
|
2024-01-30 05:57:29 +00:00
|
|
|
//~| ERROR: method's name is the same as an existing method in a trait
|
2021-09-28 17:03:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl T1 for S {}
|
|
|
|
|
|
|
|
impl T2 for S {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mod should_not_lint {
|
|
|
|
|
|
|
|
mod not_lint_two_trait_method {
|
|
|
|
use crate::{T1, T2};
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl T1 for S {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl T2 for S {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mod only_lint_on_method {
|
|
|
|
trait T3 {
|
|
|
|
type foo;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
impl T3 for S {
|
|
|
|
type foo = usize;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-16 15:39:06 +00:00
|
|
|
mod check_expect_suppression {
|
|
|
|
use crate::T1;
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
#[expect(clippy::same_name_method)]
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl T1 for S {
|
|
|
|
fn foo() {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-28 17:03:12 +00:00
|
|
|
fn main() {}
|