Auto merge of #12122 - andrewbanchich:tostring-impl, r=llogiq
add to_string_trait_impl lint closes #12076 changelog: [`to_string_trait_impl`]: add lint for direct `ToString` implementations
This commit is contained in:
commit
79f10cf364
@ -5623,6 +5623,7 @@ Released 2018-09-13
|
||||
[`to_digit_is_some`]: https://rust-lang.github.io/rust-clippy/master/index.html#to_digit_is_some
|
||||
[`to_string_in_display`]: https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_display
|
||||
[`to_string_in_format_args`]: https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args
|
||||
[`to_string_trait_impl`]: https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl
|
||||
[`todo`]: https://rust-lang.github.io/rust-clippy/master/index.html#todo
|
||||
[`too_many_arguments`]: https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments
|
||||
[`too_many_lines`]: https://rust-lang.github.io/rust-clippy/master/index.html#too_many_lines
|
||||
|
@ -657,6 +657,7 @@
|
||||
crate::tests_outside_test_module::TESTS_OUTSIDE_TEST_MODULE_INFO,
|
||||
crate::thread_local_initializer_can_be_made_const::THREAD_LOCAL_INITIALIZER_CAN_BE_MADE_CONST_INFO,
|
||||
crate::to_digit_is_some::TO_DIGIT_IS_SOME_INFO,
|
||||
crate::to_string_trait_impl::TO_STRING_TRAIT_IMPL_INFO,
|
||||
crate::trailing_empty_array::TRAILING_EMPTY_ARRAY_INFO,
|
||||
crate::trait_bounds::TRAIT_DUPLICATION_IN_BOUNDS_INFO,
|
||||
crate::trait_bounds::TYPE_REPETITION_IN_BOUNDS_INFO,
|
||||
|
@ -327,6 +327,7 @@
|
||||
mod tests_outside_test_module;
|
||||
mod thread_local_initializer_can_be_made_const;
|
||||
mod to_digit_is_some;
|
||||
mod to_string_trait_impl;
|
||||
mod trailing_empty_array;
|
||||
mod trait_bounds;
|
||||
mod transmute;
|
||||
@ -1103,6 +1104,7 @@ pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf) {
|
||||
Box::new(thread_local_initializer_can_be_made_const::ThreadLocalInitializerCanBeMadeConst::new(msrv()))
|
||||
});
|
||||
store.register_late_pass(move |_| Box::new(incompatible_msrv::IncompatibleMsrv::new(msrv())));
|
||||
store.register_late_pass(|_| Box::new(to_string_trait_impl::ToStringTraitImpl));
|
||||
// add lints here, do not remove this comment, it's used in `new_lint`
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
use rustc_span::def_id::LocalDefId;
|
||||
use rustc_span::{BytePos, Pos, Span};
|
||||
use std::borrow::Cow;
|
||||
use std::fmt::Display;
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// ### What it does
|
||||
@ -146,14 +147,14 @@ fn applicability(&self) -> Applicability {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> ToString for RetReplacement<'tcx> {
|
||||
fn to_string(&self) -> String {
|
||||
impl<'tcx> Display for RetReplacement<'tcx> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::Empty => String::new(),
|
||||
Self::Block => "{}".to_string(),
|
||||
Self::Unit => "()".to_string(),
|
||||
Self::IfSequence(inner, _) => format!("({inner})"),
|
||||
Self::Expr(inner, _) => inner.to_string(),
|
||||
Self::Empty => write!(f, ""),
|
||||
Self::Block => write!(f, "{{}}"),
|
||||
Self::Unit => write!(f, "()"),
|
||||
Self::IfSequence(inner, _) => write!(f, "({inner})"),
|
||||
Self::Expr(inner, _) => write!(f, "{inner}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
67
clippy_lints/src/to_string_trait_impl.rs
Normal file
67
clippy_lints/src/to_string_trait_impl.rs
Normal file
@ -0,0 +1,67 @@
|
||||
use clippy_utils::diagnostics::span_lint_and_help;
|
||||
use rustc_hir::{Impl, Item, ItemKind};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_session::declare_lint_pass;
|
||||
use rustc_span::sym;
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// ### What it does
|
||||
/// Checks for direct implementations of `ToString`.
|
||||
/// ### Why is this bad?
|
||||
/// This trait is automatically implemented for any type which implements the `Display` trait.
|
||||
/// As such, `ToString` shouldn’t be implemented directly: `Display` should be implemented instead,
|
||||
/// and you get the `ToString` implementation for free.
|
||||
/// ### Example
|
||||
/// ```no_run
|
||||
/// struct Point {
|
||||
/// x: usize,
|
||||
/// y: usize,
|
||||
/// }
|
||||
///
|
||||
/// impl ToString for Point {
|
||||
/// fn to_string(&self) -> String {
|
||||
/// format!("({}, {})", self.x, self.y)
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
/// Use instead:
|
||||
/// ```no_run
|
||||
/// struct Point {
|
||||
/// x: usize,
|
||||
/// y: usize,
|
||||
/// }
|
||||
///
|
||||
/// impl std::fmt::Display for Point {
|
||||
/// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
/// write!(f, "({}, {})", self.x, self.y)
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
#[clippy::version = "1.77.0"]
|
||||
pub TO_STRING_TRAIT_IMPL,
|
||||
style,
|
||||
"check for direct implementations of `ToString`"
|
||||
}
|
||||
|
||||
declare_lint_pass!(ToStringTraitImpl => [TO_STRING_TRAIT_IMPL]);
|
||||
|
||||
impl<'tcx> LateLintPass<'tcx> for ToStringTraitImpl {
|
||||
fn check_item(&mut self, cx: &LateContext<'tcx>, it: &'tcx Item<'tcx>) {
|
||||
if let ItemKind::Impl(Impl {
|
||||
of_trait: Some(trait_ref),
|
||||
..
|
||||
}) = it.kind
|
||||
&& let Some(trait_did) = trait_ref.trait_def_id()
|
||||
&& cx.tcx.is_diagnostic_item(sym::ToString, trait_did)
|
||||
{
|
||||
span_lint_and_help(
|
||||
cx,
|
||||
TO_STRING_TRAIT_IMPL,
|
||||
it.span,
|
||||
"direct implementation of `ToString`",
|
||||
None,
|
||||
"prefer implementing `Display` instead",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -14,6 +14,7 @@ use std::panic::Location;
|
||||
|
||||
struct Somewhere;
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Somewhere {
|
||||
fn to_string(&self) -> String {
|
||||
String::from("somewhere")
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
struct Somewhere;
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Somewhere {
|
||||
fn to_string(&self) -> String {
|
||||
String::from("somewhere")
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: `to_string` applied to a type that implements `Display` in `format!` args
|
||||
--> $DIR/format_args.rs:76:72
|
||||
--> $DIR/format_args.rs:77:72
|
||||
|
|
||||
LL | let _ = format!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
@ -8,145 +8,145 @@ LL | let _ = format!("error: something failed at {}", Location::caller().to_
|
||||
= help: to override `-D warnings` add `#[allow(clippy::to_string_in_format_args)]`
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `write!` args
|
||||
--> $DIR/format_args.rs:80:27
|
||||
--> $DIR/format_args.rs:81:27
|
||||
|
|
||||
LL | Location::caller().to_string()
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `writeln!` args
|
||||
--> $DIR/format_args.rs:85:27
|
||||
--> $DIR/format_args.rs:86:27
|
||||
|
|
||||
LL | Location::caller().to_string()
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `print!` args
|
||||
--> $DIR/format_args.rs:87:63
|
||||
--> $DIR/format_args.rs:88:63
|
||||
|
|
||||
LL | print!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:88:65
|
||||
--> $DIR/format_args.rs:89:65
|
||||
|
|
||||
LL | println!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `eprint!` args
|
||||
--> $DIR/format_args.rs:89:64
|
||||
--> $DIR/format_args.rs:90:64
|
||||
|
|
||||
LL | eprint!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `eprintln!` args
|
||||
--> $DIR/format_args.rs:90:66
|
||||
--> $DIR/format_args.rs:91:66
|
||||
|
|
||||
LL | eprintln!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `format_args!` args
|
||||
--> $DIR/format_args.rs:91:77
|
||||
--> $DIR/format_args.rs:92:77
|
||||
|
|
||||
LL | let _ = format_args!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `assert!` args
|
||||
--> $DIR/format_args.rs:92:70
|
||||
--> $DIR/format_args.rs:93:70
|
||||
|
|
||||
LL | assert!(true, "error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `assert_eq!` args
|
||||
--> $DIR/format_args.rs:93:73
|
||||
--> $DIR/format_args.rs:94:73
|
||||
|
|
||||
LL | assert_eq!(0, 0, "error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `assert_ne!` args
|
||||
--> $DIR/format_args.rs:94:73
|
||||
--> $DIR/format_args.rs:95:73
|
||||
|
|
||||
LL | assert_ne!(0, 0, "error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `panic!` args
|
||||
--> $DIR/format_args.rs:95:63
|
||||
--> $DIR/format_args.rs:96:63
|
||||
|
|
||||
LL | panic!("error: something failed at {}", Location::caller().to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:96:20
|
||||
--> $DIR/format_args.rs:97:20
|
||||
|
|
||||
LL | println!("{}", X(1).to_string());
|
||||
| ^^^^^^^^^^^^^^^^ help: use this: `*X(1)`
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:97:20
|
||||
--> $DIR/format_args.rs:98:20
|
||||
|
|
||||
LL | println!("{}", Y(&X(1)).to_string());
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use this: `***Y(&X(1))`
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:98:24
|
||||
--> $DIR/format_args.rs:99:24
|
||||
|
|
||||
LL | println!("{}", Z(1).to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:99:20
|
||||
--> $DIR/format_args.rs:100:20
|
||||
|
|
||||
LL | println!("{}", x.to_string());
|
||||
| ^^^^^^^^^^^^^ help: use this: `**x`
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:100:20
|
||||
--> $DIR/format_args.rs:101:20
|
||||
|
|
||||
LL | println!("{}", x_ref.to_string());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use this: `***x_ref`
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:102:39
|
||||
--> $DIR/format_args.rs:103:39
|
||||
|
|
||||
LL | println!("{foo}{bar}", foo = "foo".to_string(), bar = "bar");
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:103:52
|
||||
--> $DIR/format_args.rs:104:52
|
||||
|
|
||||
LL | println!("{foo}{bar}", foo = "foo", bar = "bar".to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:104:39
|
||||
--> $DIR/format_args.rs:105:39
|
||||
|
|
||||
LL | println!("{foo}{bar}", bar = "bar".to_string(), foo = "foo");
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:105:52
|
||||
--> $DIR/format_args.rs:106:52
|
||||
|
|
||||
LL | println!("{foo}{bar}", bar = "bar", foo = "foo".to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `print!` args
|
||||
--> $DIR/format_args.rs:117:37
|
||||
--> $DIR/format_args.rs:118:37
|
||||
|
|
||||
LL | print!("{}", (Location::caller().to_string()));
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `print!` args
|
||||
--> $DIR/format_args.rs:118:39
|
||||
--> $DIR/format_args.rs:119:39
|
||||
|
|
||||
LL | print!("{}", ((Location::caller()).to_string()));
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `format!` args
|
||||
--> $DIR/format_args.rs:146:38
|
||||
--> $DIR/format_args.rs:147:38
|
||||
|
|
||||
LL | let x = format!("{} {}", a, b.to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: `to_string` applied to a type that implements `Display` in `println!` args
|
||||
--> $DIR/format_args.rs:160:24
|
||||
--> $DIR/format_args.rs:161:24
|
||||
|
|
||||
LL | println!("{}", original[..10].to_string());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this: `&original[..10]`
|
||||
|
31
tests/ui/to_string_trait_impl.rs
Normal file
31
tests/ui/to_string_trait_impl.rs
Normal file
@ -0,0 +1,31 @@
|
||||
#![warn(clippy::to_string_trait_impl)]
|
||||
|
||||
use std::fmt::{self, Display};
|
||||
|
||||
struct Point {
|
||||
x: usize,
|
||||
y: usize,
|
||||
}
|
||||
|
||||
impl ToString for Point {
|
||||
fn to_string(&self) -> String {
|
||||
format!("({}, {})", self.x, self.y)
|
||||
}
|
||||
}
|
||||
|
||||
struct Foo;
|
||||
|
||||
impl Display for Foo {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "Foo")
|
||||
}
|
||||
}
|
||||
|
||||
struct Bar;
|
||||
|
||||
impl Bar {
|
||||
#[allow(clippy::inherent_to_string)]
|
||||
fn to_string(&self) -> String {
|
||||
String::from("Bar")
|
||||
}
|
||||
}
|
16
tests/ui/to_string_trait_impl.stderr
Normal file
16
tests/ui/to_string_trait_impl.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error: direct implementation of `ToString`
|
||||
--> $DIR/to_string_trait_impl.rs:10:1
|
||||
|
|
||||
LL | / impl ToString for Point {
|
||||
LL | | fn to_string(&self) -> String {
|
||||
LL | | format!("({}, {})", self.x, self.y)
|
||||
LL | | }
|
||||
LL | | }
|
||||
| |_^
|
||||
|
|
||||
= help: prefer implementing `Display` instead
|
||||
= note: `-D clippy::to-string-trait-impl` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::to_string_trait_impl)]`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
@ -206,6 +206,7 @@ fn eq(&self, other: &Self) -> bool {
|
||||
|
||||
struct S9;
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl std::string::ToString for S9 {
|
||||
fn to_string(&self) -> String {
|
||||
//~^ ERROR: function cannot return without recursing
|
||||
@ -215,6 +216,7 @@ fn to_string(&self) -> String {
|
||||
|
||||
struct S10;
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl std::string::ToString for S10 {
|
||||
fn to_string(&self) -> String {
|
||||
//~^ ERROR: function cannot return without recursing
|
||||
@ -225,6 +227,7 @@ fn to_string(&self) -> String {
|
||||
|
||||
struct S11;
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl std::string::ToString for S11 {
|
||||
fn to_string(&self) -> String {
|
||||
//~^ ERROR: function cannot return without recursing
|
||||
|
@ -23,7 +23,7 @@ LL | self.eq(other)
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
||||
error: function cannot return without recursing
|
||||
--> $DIR/unconditional_recursion.rs:210:5
|
||||
--> $DIR/unconditional_recursion.rs:211:5
|
||||
|
|
||||
LL | fn to_string(&self) -> String {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
|
||||
@ -34,7 +34,7 @@ LL | self.to_string()
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
||||
error: function cannot return without recursing
|
||||
--> $DIR/unconditional_recursion.rs:219:5
|
||||
--> $DIR/unconditional_recursion.rs:221:5
|
||||
|
|
||||
LL | fn to_string(&self) -> String {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
|
||||
@ -45,7 +45,7 @@ LL | x.to_string()
|
||||
= help: a `loop` may express intention better if this is on purpose
|
||||
|
||||
error: function cannot return without recursing
|
||||
--> $DIR/unconditional_recursion.rs:229:5
|
||||
--> $DIR/unconditional_recursion.rs:232:5
|
||||
|
|
||||
LL | fn to_string(&self) -> String {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
|
||||
@ -326,7 +326,7 @@ LL | mine == theirs
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: function cannot return without recursing
|
||||
--> $DIR/unconditional_recursion.rs:244:5
|
||||
--> $DIR/unconditional_recursion.rs:247:5
|
||||
|
|
||||
LL | / fn new() -> Self {
|
||||
LL | |
|
||||
@ -335,13 +335,13 @@ LL | | }
|
||||
| |_____^
|
||||
|
|
||||
note: recursive call site
|
||||
--> $DIR/unconditional_recursion.rs:246:9
|
||||
--> $DIR/unconditional_recursion.rs:249:9
|
||||
|
|
||||
LL | Self::default()
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: function cannot return without recursing
|
||||
--> $DIR/unconditional_recursion.rs:283:5
|
||||
--> $DIR/unconditional_recursion.rs:286:5
|
||||
|
|
||||
LL | / fn eq(&self, other: &Self) -> bool {
|
||||
LL | |
|
||||
@ -352,7 +352,7 @@ LL | | }
|
||||
| |_____^
|
||||
|
|
||||
note: recursive call site
|
||||
--> $DIR/unconditional_recursion.rs:287:9
|
||||
--> $DIR/unconditional_recursion.rs:290:9
|
||||
|
|
||||
LL | mine.eq(theirs)
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
@ -27,6 +27,7 @@ impl AsRef<str> for X {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for X {
|
||||
fn to_string(&self) -> String {
|
||||
self.0.to_string()
|
||||
@ -265,6 +266,7 @@ mod issue_8507 {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Y {
|
||||
fn to_string(&self) -> String {
|
||||
self.0.to_string()
|
||||
@ -338,6 +340,7 @@ mod issue_9317 {
|
||||
|
||||
struct Bytes {}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Bytes {
|
||||
fn to_string(&self) -> String {
|
||||
"123".to_string()
|
||||
|
@ -27,6 +27,7 @@ fn as_ref(&self) -> &str {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for X {
|
||||
fn to_string(&self) -> String {
|
||||
self.0.to_string()
|
||||
@ -265,6 +266,7 @@ fn as_ref(&self) -> &str {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Y {
|
||||
fn to_string(&self) -> String {
|
||||
self.0.to_string()
|
||||
@ -338,6 +340,7 @@ mod issue_9317 {
|
||||
|
||||
struct Bytes {}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Bytes {
|
||||
fn to_string(&self) -> String {
|
||||
"123".to_string()
|
||||
|
@ -1,11 +1,11 @@
|
||||
error: redundant clone
|
||||
--> $DIR/unnecessary_to_owned.rs:154:64
|
||||
--> $DIR/unnecessary_to_owned.rs:155:64
|
||||
|
|
||||
LL | require_c_str(&CString::from_vec_with_nul(vec![0]).unwrap().to_owned());
|
||||
| ^^^^^^^^^^^ help: remove this
|
||||
|
|
||||
note: this value is dropped without further use
|
||||
--> $DIR/unnecessary_to_owned.rs:154:20
|
||||
--> $DIR/unnecessary_to_owned.rs:155:20
|
||||
|
|
||||
LL | require_c_str(&CString::from_vec_with_nul(vec![0]).unwrap().to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -13,55 +13,55 @@ LL | require_c_str(&CString::from_vec_with_nul(vec![0]).unwrap().to_owned())
|
||||
= help: to override `-D warnings` add `#[allow(clippy::redundant_clone)]`
|
||||
|
||||
error: redundant clone
|
||||
--> $DIR/unnecessary_to_owned.rs:155:40
|
||||
--> $DIR/unnecessary_to_owned.rs:156:40
|
||||
|
|
||||
LL | require_os_str(&OsString::from("x").to_os_string());
|
||||
| ^^^^^^^^^^^^^^^ help: remove this
|
||||
|
|
||||
note: this value is dropped without further use
|
||||
--> $DIR/unnecessary_to_owned.rs:155:21
|
||||
--> $DIR/unnecessary_to_owned.rs:156:21
|
||||
|
|
||||
LL | require_os_str(&OsString::from("x").to_os_string());
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: redundant clone
|
||||
--> $DIR/unnecessary_to_owned.rs:156:48
|
||||
--> $DIR/unnecessary_to_owned.rs:157:48
|
||||
|
|
||||
LL | require_path(&std::path::PathBuf::from("x").to_path_buf());
|
||||
| ^^^^^^^^^^^^^^ help: remove this
|
||||
|
|
||||
note: this value is dropped without further use
|
||||
--> $DIR/unnecessary_to_owned.rs:156:19
|
||||
--> $DIR/unnecessary_to_owned.rs:157:19
|
||||
|
|
||||
LL | require_path(&std::path::PathBuf::from("x").to_path_buf());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: redundant clone
|
||||
--> $DIR/unnecessary_to_owned.rs:157:35
|
||||
--> $DIR/unnecessary_to_owned.rs:158:35
|
||||
|
|
||||
LL | require_str(&String::from("x").to_string());
|
||||
| ^^^^^^^^^^^^ help: remove this
|
||||
|
|
||||
note: this value is dropped without further use
|
||||
--> $DIR/unnecessary_to_owned.rs:157:18
|
||||
--> $DIR/unnecessary_to_owned.rs:158:18
|
||||
|
|
||||
LL | require_str(&String::from("x").to_string());
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: redundant clone
|
||||
--> $DIR/unnecessary_to_owned.rs:158:39
|
||||
--> $DIR/unnecessary_to_owned.rs:159:39
|
||||
|
|
||||
LL | require_slice(&[String::from("x")].to_owned());
|
||||
| ^^^^^^^^^^^ help: remove this
|
||||
|
|
||||
note: this value is dropped without further use
|
||||
--> $DIR/unnecessary_to_owned.rs:158:20
|
||||
--> $DIR/unnecessary_to_owned.rs:159:20
|
||||
|
|
||||
LL | require_slice(&[String::from("x")].to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unnecessary use of `into_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:63:36
|
||||
--> $DIR/unnecessary_to_owned.rs:64:36
|
||||
|
|
||||
LL | require_c_str(&Cow::from(c_str).into_owned());
|
||||
| ^^^^^^^^^^^^^ help: remove this
|
||||
@ -70,415 +70,415 @@ LL | require_c_str(&Cow::from(c_str).into_owned());
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_to_owned)]`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:64:19
|
||||
--> $DIR/unnecessary_to_owned.rs:65:19
|
||||
|
|
||||
LL | require_c_str(&c_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `c_str`
|
||||
|
||||
error: unnecessary use of `to_os_string`
|
||||
--> $DIR/unnecessary_to_owned.rs:66:20
|
||||
--> $DIR/unnecessary_to_owned.rs:67:20
|
||||
|
|
||||
LL | require_os_str(&os_str.to_os_string());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: use: `os_str`
|
||||
|
||||
error: unnecessary use of `into_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:67:38
|
||||
--> $DIR/unnecessary_to_owned.rs:68:38
|
||||
|
|
||||
LL | require_os_str(&Cow::from(os_str).into_owned());
|
||||
| ^^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:68:20
|
||||
--> $DIR/unnecessary_to_owned.rs:69:20
|
||||
|
|
||||
LL | require_os_str(&os_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use: `os_str`
|
||||
|
||||
error: unnecessary use of `to_path_buf`
|
||||
--> $DIR/unnecessary_to_owned.rs:70:18
|
||||
--> $DIR/unnecessary_to_owned.rs:71:18
|
||||
|
|
||||
LL | require_path(&path.to_path_buf());
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use: `path`
|
||||
|
||||
error: unnecessary use of `into_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:71:34
|
||||
--> $DIR/unnecessary_to_owned.rs:72:34
|
||||
|
|
||||
LL | require_path(&Cow::from(path).into_owned());
|
||||
| ^^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:72:18
|
||||
--> $DIR/unnecessary_to_owned.rs:73:18
|
||||
|
|
||||
LL | require_path(&path.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `path`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned.rs:74:17
|
||||
--> $DIR/unnecessary_to_owned.rs:75:17
|
||||
|
|
||||
LL | require_str(&s.to_string());
|
||||
| ^^^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `into_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:75:30
|
||||
--> $DIR/unnecessary_to_owned.rs:76:30
|
||||
|
|
||||
LL | require_str(&Cow::from(s).into_owned());
|
||||
| ^^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:76:17
|
||||
--> $DIR/unnecessary_to_owned.rs:77:17
|
||||
|
|
||||
LL | require_str(&s.to_owned());
|
||||
| ^^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned.rs:77:17
|
||||
--> $DIR/unnecessary_to_owned.rs:78:17
|
||||
|
|
||||
LL | require_str(&x_ref.to_string());
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use: `x_ref.as_ref()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:79:19
|
||||
--> $DIR/unnecessary_to_owned.rs:80:19
|
||||
|
|
||||
LL | require_slice(&slice.to_vec());
|
||||
| ^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `into_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:80:36
|
||||
--> $DIR/unnecessary_to_owned.rs:81:36
|
||||
|
|
||||
LL | require_slice(&Cow::from(slice).into_owned());
|
||||
| ^^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:81:19
|
||||
--> $DIR/unnecessary_to_owned.rs:82:19
|
||||
|
|
||||
LL | require_slice(&array.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `array.as_ref()`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:82:19
|
||||
--> $DIR/unnecessary_to_owned.rs:83:19
|
||||
|
|
||||
LL | require_slice(&array_ref.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: use: `array_ref.as_ref()`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:83:19
|
||||
--> $DIR/unnecessary_to_owned.rs:84:19
|
||||
|
|
||||
LL | require_slice(&slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `into_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:86:42
|
||||
--> $DIR/unnecessary_to_owned.rs:87:42
|
||||
|
|
||||
LL | require_x(&Cow::<X>::Owned(x.clone()).into_owned());
|
||||
| ^^^^^^^^^^^^^ help: remove this
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:89:25
|
||||
--> $DIR/unnecessary_to_owned.rs:90:25
|
||||
|
|
||||
LL | require_deref_c_str(c_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `c_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:90:26
|
||||
--> $DIR/unnecessary_to_owned.rs:91:26
|
||||
|
|
||||
LL | require_deref_os_str(os_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `os_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:91:24
|
||||
--> $DIR/unnecessary_to_owned.rs:92:24
|
||||
|
|
||||
LL | require_deref_path(path.to_owned());
|
||||
| ^^^^^^^^^^^^^^^ help: use: `path`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:92:23
|
||||
--> $DIR/unnecessary_to_owned.rs:93:23
|
||||
|
|
||||
LL | require_deref_str(s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:93:25
|
||||
--> $DIR/unnecessary_to_owned.rs:94:25
|
||||
|
|
||||
LL | require_deref_slice(slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:95:30
|
||||
--> $DIR/unnecessary_to_owned.rs:96:30
|
||||
|
|
||||
LL | require_impl_deref_c_str(c_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `c_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:96:31
|
||||
--> $DIR/unnecessary_to_owned.rs:97:31
|
||||
|
|
||||
LL | require_impl_deref_os_str(os_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `os_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:97:29
|
||||
--> $DIR/unnecessary_to_owned.rs:98:29
|
||||
|
|
||||
LL | require_impl_deref_path(path.to_owned());
|
||||
| ^^^^^^^^^^^^^^^ help: use: `path`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:98:28
|
||||
--> $DIR/unnecessary_to_owned.rs:99:28
|
||||
|
|
||||
LL | require_impl_deref_str(s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:99:30
|
||||
--> $DIR/unnecessary_to_owned.rs:100:30
|
||||
|
|
||||
LL | require_impl_deref_slice(slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:101:29
|
||||
--> $DIR/unnecessary_to_owned.rs:102:29
|
||||
|
|
||||
LL | require_deref_str_slice(s.to_owned(), slice.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:101:43
|
||||
--> $DIR/unnecessary_to_owned.rs:102:43
|
||||
|
|
||||
LL | require_deref_str_slice(s.to_owned(), slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:102:29
|
||||
--> $DIR/unnecessary_to_owned.rs:103:29
|
||||
|
|
||||
LL | require_deref_slice_str(slice.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:102:47
|
||||
--> $DIR/unnecessary_to_owned.rs:103:47
|
||||
|
|
||||
LL | require_deref_slice_str(slice.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:104:26
|
||||
--> $DIR/unnecessary_to_owned.rs:105:26
|
||||
|
|
||||
LL | require_as_ref_c_str(c_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `c_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:105:27
|
||||
--> $DIR/unnecessary_to_owned.rs:106:27
|
||||
|
|
||||
LL | require_as_ref_os_str(os_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `os_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:106:25
|
||||
--> $DIR/unnecessary_to_owned.rs:107:25
|
||||
|
|
||||
LL | require_as_ref_path(path.to_owned());
|
||||
| ^^^^^^^^^^^^^^^ help: use: `path`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:107:24
|
||||
--> $DIR/unnecessary_to_owned.rs:108:24
|
||||
|
|
||||
LL | require_as_ref_str(s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:108:24
|
||||
--> $DIR/unnecessary_to_owned.rs:109:24
|
||||
|
|
||||
LL | require_as_ref_str(x.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `&x`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:109:26
|
||||
--> $DIR/unnecessary_to_owned.rs:110:26
|
||||
|
|
||||
LL | require_as_ref_slice(array.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `array`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:110:26
|
||||
--> $DIR/unnecessary_to_owned.rs:111:26
|
||||
|
|
||||
LL | require_as_ref_slice(array_ref.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use: `array_ref`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:111:26
|
||||
--> $DIR/unnecessary_to_owned.rs:112:26
|
||||
|
|
||||
LL | require_as_ref_slice(slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:113:31
|
||||
--> $DIR/unnecessary_to_owned.rs:114:31
|
||||
|
|
||||
LL | require_impl_as_ref_c_str(c_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `c_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:114:32
|
||||
--> $DIR/unnecessary_to_owned.rs:115:32
|
||||
|
|
||||
LL | require_impl_as_ref_os_str(os_str.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `os_str`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:115:30
|
||||
--> $DIR/unnecessary_to_owned.rs:116:30
|
||||
|
|
||||
LL | require_impl_as_ref_path(path.to_owned());
|
||||
| ^^^^^^^^^^^^^^^ help: use: `path`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:116:29
|
||||
--> $DIR/unnecessary_to_owned.rs:117:29
|
||||
|
|
||||
LL | require_impl_as_ref_str(s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:117:29
|
||||
--> $DIR/unnecessary_to_owned.rs:118:29
|
||||
|
|
||||
LL | require_impl_as_ref_str(x.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `&x`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:118:31
|
||||
--> $DIR/unnecessary_to_owned.rs:119:31
|
||||
|
|
||||
LL | require_impl_as_ref_slice(array.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `array`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:119:31
|
||||
--> $DIR/unnecessary_to_owned.rs:120:31
|
||||
|
|
||||
LL | require_impl_as_ref_slice(array_ref.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use: `array_ref`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:120:31
|
||||
--> $DIR/unnecessary_to_owned.rs:121:31
|
||||
|
|
||||
LL | require_impl_as_ref_slice(slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:122:30
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:122:44
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `array`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:123:30
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array_ref.to_owned());
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:123:44
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array_ref.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use: `array_ref`
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `array`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:124:30
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), slice.to_owned());
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array_ref.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:124:44
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), array_ref.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use: `array_ref`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:125:30
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), slice.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:125:44
|
||||
|
|
||||
LL | require_as_ref_str_slice(s.to_owned(), slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:125:30
|
||||
--> $DIR/unnecessary_to_owned.rs:126:30
|
||||
|
|
||||
LL | require_as_ref_slice_str(array.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `array`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:125:48
|
||||
--> $DIR/unnecessary_to_owned.rs:126:48
|
||||
|
|
||||
LL | require_as_ref_slice_str(array.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:126:30
|
||||
--> $DIR/unnecessary_to_owned.rs:127:30
|
||||
|
|
||||
LL | require_as_ref_slice_str(array_ref.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use: `array_ref`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:126:52
|
||||
--> $DIR/unnecessary_to_owned.rs:127:52
|
||||
|
|
||||
LL | require_as_ref_slice_str(array_ref.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:127:30
|
||||
--> $DIR/unnecessary_to_owned.rs:128:30
|
||||
|
|
||||
LL | require_as_ref_slice_str(slice.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^ help: use: `slice`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:127:48
|
||||
--> $DIR/unnecessary_to_owned.rs:128:48
|
||||
|
|
||||
LL | require_as_ref_slice_str(slice.to_owned(), s.to_owned());
|
||||
| ^^^^^^^^^^^^ help: use: `s`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned.rs:129:20
|
||||
--> $DIR/unnecessary_to_owned.rs:130:20
|
||||
|
|
||||
LL | let _ = x.join(&x_ref.to_string());
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use: `x_ref`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:131:13
|
||||
--> $DIR/unnecessary_to_owned.rs:132:13
|
||||
|
|
||||
LL | let _ = slice.to_vec().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `slice.iter().copied()`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:132:13
|
||||
--> $DIR/unnecessary_to_owned.rs:133:13
|
||||
|
|
||||
LL | let _ = slice.to_owned().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `slice.iter().copied()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:133:13
|
||||
--> $DIR/unnecessary_to_owned.rs:134:13
|
||||
|
|
||||
LL | let _ = [std::path::PathBuf::new()][..].to_vec().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[std::path::PathBuf::new()][..].iter().cloned()`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:134:13
|
||||
--> $DIR/unnecessary_to_owned.rs:135:13
|
||||
|
|
||||
LL | let _ = [std::path::PathBuf::new()][..].to_owned().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[std::path::PathBuf::new()][..].iter().cloned()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:136:13
|
||||
--> $DIR/unnecessary_to_owned.rs:137:13
|
||||
|
|
||||
LL | let _ = IntoIterator::into_iter(slice.to_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `slice.iter().copied()`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:137:13
|
||||
--> $DIR/unnecessary_to_owned.rs:138:13
|
||||
|
|
||||
LL | let _ = IntoIterator::into_iter(slice.to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `slice.iter().copied()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:138:13
|
||||
--> $DIR/unnecessary_to_owned.rs:139:13
|
||||
|
|
||||
LL | let _ = IntoIterator::into_iter([std::path::PathBuf::new()][..].to_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[std::path::PathBuf::new()][..].iter().cloned()`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned.rs:139:13
|
||||
--> $DIR/unnecessary_to_owned.rs:140:13
|
||||
|
|
||||
LL | let _ = IntoIterator::into_iter([std::path::PathBuf::new()][..].to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[std::path::PathBuf::new()][..].iter().cloned()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:201:14
|
||||
--> $DIR/unnecessary_to_owned.rs:202:14
|
||||
|
|
||||
LL | for t in file_types.to_vec() {
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
@ -494,31 +494,31 @@ LL + let path = match get_file_path(t) {
|
||||
|
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:224:14
|
||||
--> $DIR/unnecessary_to_owned.rs:225:14
|
||||
|
|
||||
LL | let _ = &["x"][..].to_vec().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `["x"][..].iter().cloned()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:229:14
|
||||
--> $DIR/unnecessary_to_owned.rs:230:14
|
||||
|
|
||||
LL | let _ = &["x"][..].to_vec().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `["x"][..].iter().copied()`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned.rs:276:24
|
||||
--> $DIR/unnecessary_to_owned.rs:278:24
|
||||
|
|
||||
LL | Box::new(build(y.to_string()))
|
||||
| ^^^^^^^^^^^^^ help: use: `y`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned.rs:384:12
|
||||
--> $DIR/unnecessary_to_owned.rs:387:12
|
||||
|
|
||||
LL | id("abc".to_string())
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `"abc"`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned.rs:527:37
|
||||
--> $DIR/unnecessary_to_owned.rs:530:37
|
||||
|
|
||||
LL | IntoFuture::into_future(foo([].to_vec(), &0));
|
||||
| ^^^^^^^^^^^ help: use: `[]`
|
||||
|
@ -8,6 +8,7 @@ impl AsRef<str> for Issue12068 {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Issue12068 {
|
||||
fn to_string(&self) -> String {
|
||||
String::new()
|
||||
|
@ -8,6 +8,7 @@ fn as_ref(&self) -> &str {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::to_string_trait_impl)]
|
||||
impl ToString for Issue12068 {
|
||||
fn to_string(&self) -> String {
|
||||
String::new()
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:18:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:19:13
|
||||
|
|
||||
LL | let _ = "a".to_string().split('a').next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `"a".split('a')`
|
||||
@ -8,49 +8,49 @@ LL | let _ = "a".to_string().split('a').next().unwrap();
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_to_owned)]`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:20:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:21:13
|
||||
|
|
||||
LL | let _ = "a".to_string().split("a").next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `"a".split("a")`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:22:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:23:13
|
||||
|
|
||||
LL | let _ = "a".to_owned().split('a').next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `"a".split('a')`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:24:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:25:13
|
||||
|
|
||||
LL | let _ = "a".to_owned().split("a").next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `"a".split("a")`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:26:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:27:13
|
||||
|
|
||||
LL | let _ = Issue12068.to_string().split('a').next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `Issue12068.as_ref().split('a')`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:29:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:30:13
|
||||
|
|
||||
LL | let _ = [1].to_vec().split(|x| *x == 2).next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[1].split(|x| *x == 2)`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:31:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:32:13
|
||||
|
|
||||
LL | let _ = [1].to_vec().split(|x| *x == 2).next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[1].split(|x| *x == 2)`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:33:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:34:13
|
||||
|
|
||||
LL | let _ = [1].to_owned().split(|x| *x == 2).next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[1].split(|x| *x == 2)`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:35:13
|
||||
--> $DIR/unnecessary_to_owned_on_split.rs:36:13
|
||||
|
|
||||
LL | let _ = [1].to_owned().split(|x| *x == 2).next().unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[1].split(|x| *x == 2)`
|
||||
|
Loading…
Reference in New Issue
Block a user