Clippy lints / Complexity
Clippy lint · Complexity · checked with Clippy 0.1.99
clippy::needless_as_bytes: needless call to `as_bytes`
What it meansIt detects useless calls to str::as_bytes() before calling len() or is_empty(). It is in the complexity group and warns by default.
What you see
warning: needless call to `as_bytes` --> main.rs:3:11 | 3 | let len = "some string".as_bytes().len(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: `len()` can be called directly on strings: `"some string".len()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#needless_as_bytes = note: `#[warn(clippy::needless_as_bytes)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
The len() and is_empty() methods are also directly available on strings, and they return identical results. In particular, len() on a string returns the number of bytes.
Code that does something simple in a complicated way. Warns by default.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
let len = "some string".as_bytes().len();
let b = "some string".as_bytes().is_empty();
Write this instead
let len = "some string".len();
let b = "some string".is_empty();
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::needless_as_bytes)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
needless_as_bytes = "allow"One run
cargo clippy -- -A clippy::needless-as-bytesThe [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
It detects useless calls to str::as_bytes() before calling len() or is_empty().
Why is this bad?
The len() and is_empty() methods are also directly available on strings, and they
return identical results. In particular, len() on a string returns the number of
bytes.
Example
let len = "some string".as_bytes().len();
let b = "some string".as_bytes().is_empty();
Use instead:
let len = "some string".len();
let b = "some string".is_empty();
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_argumentsChecks for functions with too many parameters
- clone_on_copyusing `clone` on type `u64` which implements the `Copy` trait
- type_complexityChecks for types used in structs, parameters and let declarations above a certain complexity threshold
- match_as_refmanual implementation of `Option::as_ref`
- match_single_bindingChecks for useless match that binds to only one value
- needless_arbitrary_self_typethe type of the `self` parameter does not need to be arbitrary
- needless_boolChecks for expressions of the form if c { true } else { false } (or vice versa) and suggests using the condition directly
- needless_bool_assignChecks for expressions of the form if c { x = true } else { x = false } (or vice versa) and suggest assigning the variable directly from the condition
- needless_borrowed_referencethis pattern takes a reference on something that is being dereferenced
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_argumentsChecks for functions with too many parametersRead it next →Did this answer your question?