Auto merge of #7215 - ThibsG:WrongSelfFix7179, r=Manishearth
Trigger [`wrong_self_convention`] only if it has implicit self Lint [`wrong_self_convention`] only if the impl or trait has `self` _per sé_. Fixes: #7179 changelog: trigger [`wrong_self_convention`] only if it has implicit self
This commit is contained in:
commit
08ce8bb703
@ -1838,16 +1838,18 @@ fn check_impl_item(&mut self, cx: &LateContext<'tcx>, impl_item: &'tcx hir::Impl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wrong_self_convention::check(
|
if sig.decl.implicit_self.has_implicit_self() {
|
||||||
cx,
|
wrong_self_convention::check(
|
||||||
&name,
|
cx,
|
||||||
item.vis.node.is_pub(),
|
&name,
|
||||||
self_ty,
|
item.vis.node.is_pub(),
|
||||||
first_arg_ty,
|
self_ty,
|
||||||
first_arg.pat.span,
|
first_arg_ty,
|
||||||
implements_trait,
|
first_arg.pat.span,
|
||||||
false
|
implements_trait,
|
||||||
);
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1903,7 +1905,9 @@ fn check_trait_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx TraitItem<'_>
|
|||||||
|
|
||||||
if_chain! {
|
if_chain! {
|
||||||
if let TraitItemKind::Fn(ref sig, _) = item.kind;
|
if let TraitItemKind::Fn(ref sig, _) = item.kind;
|
||||||
|
if sig.decl.implicit_self.has_implicit_self();
|
||||||
if let Some(first_arg_ty) = sig.decl.inputs.iter().next();
|
if let Some(first_arg_ty) = sig.decl.inputs.iter().next();
|
||||||
|
|
||||||
then {
|
then {
|
||||||
let first_arg_span = first_arg_ty.span;
|
let first_arg_span = first_arg_ty.span;
|
||||||
let first_arg_ty = hir_ty_to_ty(cx.tcx, first_arg_ty);
|
let first_arg_ty = hir_ty_to_ty(cx.tcx, first_arg_ty);
|
||||||
|
@ -42,3 +42,26 @@ fn from_usize(x: usize) -> Self {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod issue7179 {
|
||||||
|
pub struct S(i32);
|
||||||
|
|
||||||
|
impl S {
|
||||||
|
// don't trigger (`s` is not `self`)
|
||||||
|
pub fn from_be(s: Self) -> Self {
|
||||||
|
S(i32::from_be(s.0))
|
||||||
|
}
|
||||||
|
|
||||||
|
// lint
|
||||||
|
pub fn from_be_self(self) -> Self {
|
||||||
|
S(i32::from_be(self.0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait T {
|
||||||
|
// don't trigger (`s` is not `self`)
|
||||||
|
fn from_be(s: Self) -> Self;
|
||||||
|
// lint
|
||||||
|
fn from_be_self(self) -> Self;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
19
tests/ui/wrong_self_convention2.stderr
Normal file
19
tests/ui/wrong_self_convention2.stderr
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
error: methods called `from_*` usually take no `self`
|
||||||
|
--> $DIR/wrong_self_convention2.rs:56:29
|
||||||
|
|
|
||||||
|
LL | pub fn from_be_self(self) -> Self {
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: `-D clippy::wrong-self-convention` implied by `-D warnings`
|
||||||
|
= help: consider choosing a less ambiguous name
|
||||||
|
|
||||||
|
error: methods called `from_*` usually take no `self`
|
||||||
|
--> $DIR/wrong_self_convention2.rs:65:25
|
||||||
|
|
|
||||||
|
LL | fn from_be_self(self) -> Self;
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= help: consider choosing a less ambiguous name
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
Loading…
Reference in New Issue
Block a user