Auto merge of #4463 - flip1995:rollup-240kr2c, r=flip1995

Rollup of 2 pull requests

Successful merges:

 - #4459 (Add note to avoid confusing)
 - #4460 (Fix `inherent_to_string` false positive)

Failed merges:

r? @ghost

changelog: none
This commit is contained in:
bors 2019-08-28 11:11:43 +00:00
commit a939d61cf7
4 changed files with 17 additions and 2 deletions

View file

@ -104,6 +104,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for InherentToString {
if impl_item.ident.name.as_str() == "to_string"; if impl_item.ident.name.as_str() == "to_string";
let decl = &signature.decl; let decl = &signature.decl;
if decl.implicit_self.has_implicit_self(); if decl.implicit_self.has_implicit_self();
if decl.inputs.len() == 1;
// Check if return type is String // Check if return type is String
if match_type(cx, return_ty(cx, impl_item.hir_id), &paths::STRING); if match_type(cx, return_ty(cx, impl_item.hir_id), &paths::STRING);

View file

@ -86,6 +86,8 @@ test. That allows us to check if the output is turning into what we want.
Once we are satisfied with the output, we need to run Once we are satisfied with the output, we need to run
`tests/ui/update-all-references.sh` to update the `.stderr` file for our lint. `tests/ui/update-all-references.sh` to update the `.stderr` file for our lint.
Please note that, we should run `TESTNAME=ui/foo_functions cargo uitest`
every time before running `tests/ui/update-all-references.sh`.
Running `TESTNAME=ui/foo_functions cargo uitest` should pass then. When we Running `TESTNAME=ui/foo_functions cargo uitest` should pass then. When we
commit our lint, we need to commit the generated `.stderr` files, too. commit our lint, we need to commit the generated `.stderr` files, too.

View file

@ -1,5 +1,6 @@
#![warn(clippy::inherent_to_string)] #![warn(clippy::inherent_to_string)]
#![deny(clippy::inherent_to_string_shadow_display)] #![deny(clippy::inherent_to_string_shadow_display)]
#![allow(clippy::many_single_char_names)]
use std::fmt; use std::fmt;
@ -12,6 +13,7 @@ struct B;
struct C; struct C;
struct D; struct D;
struct E; struct E;
struct F;
impl A { impl A {
// Should be detected; emit warning // Should be detected; emit warning
@ -64,6 +66,13 @@ impl E {
} }
} }
impl F {
// Should not be detected, as it does not match the function signature
fn to_string(&self, _i: i32) -> String {
"F.to_string()".to_string()
}
}
fn main() { fn main() {
let a = A; let a = A;
a.to_string(); a.to_string();
@ -81,4 +90,7 @@ fn main() {
d.to_string(); d.to_string();
E::to_string(); E::to_string();
let f = F;
f.to_string(1);
} }

View file

@ -1,5 +1,5 @@
error: implementation of inherent method `to_string(&self) -> String` for type `A` error: implementation of inherent method `to_string(&self) -> String` for type `A`
--> $DIR/inherent_to_string.rs:18:5 --> $DIR/inherent_to_string.rs:20:5
| |
LL | / fn to_string(&self) -> String { LL | / fn to_string(&self) -> String {
LL | | "A.to_string()".to_string() LL | | "A.to_string()".to_string()
@ -10,7 +10,7 @@ LL | | }
= help: implement trait `Display` for type `A` instead = help: implement trait `Display` for type `A` instead
error: type `C` implements inherent method `to_string(&self) -> String` which shadows the implementation of `Display` error: type `C` implements inherent method `to_string(&self) -> String` which shadows the implementation of `Display`
--> $DIR/inherent_to_string.rs:42:5 --> $DIR/inherent_to_string.rs:44:5
| |
LL | / fn to_string(&self) -> String { LL | / fn to_string(&self) -> String {
LL | | "C.to_string()".to_string() LL | | "C.to_string()".to_string()