Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::suspicious_to_owned: Checks for the usage of _.to_owned(), on a Cow<'_, _>
What it meansChecks for the usage of _.to_owned(), on a Cow<'_, _>. It is in the suspicious group and warns by default.
Does it matter?
Calling to_owned() on a Cow creates a clone of the Cow itself, without taking ownership of the Cow contents (i.e. it’s equivalent to calling Cow::clone). The similarly named into_owned method, on the other hand, clones the Cow contents, effectively turning any Cow::Borrowed into a Cow::Owned. Given the potential ambiguity, consider replacing to_owned with clone for better readability or, if getting a Cow::Owned was the original intent, using into_owned instead.
Code that is most likely wrong or useless. Warns by default.
How to fix it
Clippy does not fix this one automatically (its suggestion may change behaviour, so it only shows it). Change the code by hand:
Flagged
let s = "Hello world!";
let cow = Cow::Borrowed(s);
let data = cow.to_owned();
assert!(matches!(data, Cow::Borrowed(_)))
Write this instead
let s = "Hello world!";
let cow = Cow::Borrowed(s);
let data = cow.clone();
assert!(matches!(data, Cow::Borrowed(_)))
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::suspicious_to_owned)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
suspicious_to_owned = "allow"One run
cargo clippy -- -A clippy::suspicious-to-ownedThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for the usage of _.to_owned(), on a Cow<'_, _>.
Why is this bad?
Calling to_owned() on a Cow creates a clone of the Cow
itself, without taking ownership of the Cow contents (i.e.
it’s equivalent to calling Cow::clone).
The similarly named into_owned method, on the other hand,
clones the Cow contents, effectively turning any Cow::Borrowed
into a Cow::Owned.
Given the potential ambiguity, consider replacing to_owned
with clone for better readability or, if getting a Cow::Owned
was the original intent, using into_owned instead.
Example
let s = "Hello world!";
let cow = Cow::Borrowed(s);
let data = cow.to_owned();
assert!(matches!(data, Cow::Borrowed(_)))
Use instead:
let s = "Hello world!";
let cow = Cow::Borrowed(s);
let data = cow.clone();
assert!(matches!(data, Cow::Borrowed(_)))
or
let s = "Hello world!";
let cow = Cow::Borrowed(s);
let _data: String = cow.into_owned();
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- suspicious_mapthis call to `map()` won't have an effect on the call to `count()`
- suspicious_op_assign_implLints for suspicious operations in impls of OpAssign, e.g. subtracting elements in an AddAssign impl
- suspicious_open_optionsChecks for the suspicious use of OpenOptions::create() without an explicit OpenOptions::truncate()
- suspicious_unary_op_formattingby not having a space between `&&` and `!` it looks like `&&!` is a single operator
- swap_ptr_to_refcall to `core::mem::swap` with a parameter derived from a raw pointer
- test_attr_in_doctestunit tests in doctest are not executed
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::suspicious_mapthis call to `map()` won't have an effect on the call to `count()`Read it next →Did this answer your question?