Clippy lints / Style
Clippy lint · Style · checked with Clippy 0.1.99
clippy::ptr_arg: This lint checks for function arguments of type &String, &Vec, &PathBuf, and Cow<_>
What it meansThis lint checks for function arguments of type &String, &Vec, &PathBuf, and Cow<_>. It will also suggest you replace .clone() calls with the appropriate .to_owned()/to_string() calls. It is in the style group and warns by default.
Does it matter?
Requiring the argument to be of the specific type makes the function less useful for no benefit; slices in the form of &[T] or &str usually suffice and can be obtained from other types, too.
Code that works but is not idiomatic Rust. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
fn foo(&Vec<u32>) { .. }
Write this instead
fn foo(&[u32]) { .. }
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::ptr_arg)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
ptr_arg = "allow"One run
cargo clippy -- -A clippy::ptr-argThe [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
This lint checks for function arguments of type &String, &Vec,
&PathBuf, and Cow<_>. It will also suggest you replace .clone() calls
with the appropriate .to_owned()/to_string() calls.
Why is this bad?
Requiring the argument to be of the specific type
makes the function less useful for no benefit; slices in the form of &[T]
or &str usually suffice and can be obtained from other types, too.
Known problems
There may be fn(&Vec)-typed references pointing to your function.
If you have them, you will get a compiler error after applying this lint’s
suggestions. You then have the choice to undo your changes or change the
type of the reference.
Note that if the function is part of your public interface, there may be other crates referencing it, of which you may not be aware. Carefully deprecate the function before applying the lint suggestions in this case.
Example
fn foo(&Vec<u32>) { .. }
Use instead:
fn foo(&[u32]) { .. }
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- needless_returnunneeded `return` statement
- new_without_defaultChecks for public types with a pub fn new() -> Self method and no implementation of Default
- len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicable
- print_literalliteral with an empty format string
- print_with_newlineThis lint warns when you use print!() with a format string that ends in a newline
- println_empty_stringempty string literal in `println!`
- ptr_equse `std::ptr::eq` when comparing raw pointers
- question_markChecks for expressions that could be replaced by the ? operator
- redundant_closureChecks for closures which just call another function where the function can be called directly
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::needless_returnunneeded `return` statementRead it next →Did this answer your question?