2024-11-07 22:31:20 +01:00
|
|
|
#![warn(clippy::needless_as_bytes)]
|
|
|
|
|
#![allow(clippy::const_is_empty)]
|
2025-01-28 19:22:55 +01:00
|
|
|
#![feature(exact_size_is_empty)]
|
2024-11-07 22:31:20 +01:00
|
|
|
|
|
|
|
|
struct S;
|
|
|
|
|
|
|
|
|
|
impl S {
|
|
|
|
|
fn as_bytes(&self) -> &[u8] {
|
|
|
|
|
&[]
|
|
|
|
|
}
|
2025-01-28 19:22:55 +01:00
|
|
|
fn bytes(&self) -> &[u8] {
|
|
|
|
|
&[]
|
|
|
|
|
}
|
2024-11-07 22:31:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
if "some string".is_empty() {
|
|
|
|
|
//~^ needless_as_bytes
|
2025-02-28 23:20:48 +01:00
|
|
|
|
2024-11-07 22:31:20 +01:00
|
|
|
println!("len = {}", "some string".len());
|
|
|
|
|
//~^ needless_as_bytes
|
|
|
|
|
}
|
2025-01-28 19:22:55 +01:00
|
|
|
if "some string".is_empty() {
|
|
|
|
|
//~^ needless_as_bytes
|
2025-02-28 23:20:48 +01:00
|
|
|
|
2025-01-28 19:22:55 +01:00
|
|
|
println!("len = {}", "some string".len());
|
|
|
|
|
//~^ needless_as_bytes
|
|
|
|
|
}
|
2024-11-07 22:31:20 +01:00
|
|
|
|
|
|
|
|
let s = String::from("yet another string");
|
|
|
|
|
if s.is_empty() {
|
|
|
|
|
//~^ needless_as_bytes
|
2025-02-28 23:20:48 +01:00
|
|
|
|
2024-11-07 22:31:20 +01:00
|
|
|
println!("len = {}", s.len());
|
|
|
|
|
//~^ needless_as_bytes
|
|
|
|
|
}
|
2025-01-28 19:22:55 +01:00
|
|
|
if s.is_empty() {
|
|
|
|
|
//~^ needless_as_bytes
|
2025-02-28 23:20:48 +01:00
|
|
|
|
2025-01-28 19:22:55 +01:00
|
|
|
println!("len = {}", s.len());
|
|
|
|
|
//~^ needless_as_bytes
|
|
|
|
|
}
|
2024-11-07 22:31:20 +01:00
|
|
|
|
|
|
|
|
// Do not lint
|
|
|
|
|
let _ = S.as_bytes().is_empty();
|
|
|
|
|
let _ = S.as_bytes().len();
|
|
|
|
|
let _ = (&String::new() as &dyn AsBytes).as_bytes().len();
|
|
|
|
|
macro_rules! m {
|
|
|
|
|
(1) => {
|
|
|
|
|
""
|
|
|
|
|
};
|
|
|
|
|
(2) => {
|
|
|
|
|
"".as_bytes()
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
m!(1).as_bytes().len();
|
2025-01-28 19:22:55 +01:00
|
|
|
let _ = S.bytes().is_empty();
|
|
|
|
|
let _ = S.bytes().len();
|
|
|
|
|
let _ = (&String::new() as &dyn Bytes).bytes().len();
|
|
|
|
|
macro_rules! m {
|
|
|
|
|
(1) => {
|
|
|
|
|
""
|
|
|
|
|
};
|
|
|
|
|
(2) => {
|
|
|
|
|
"".bytes()
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
m!(1).bytes().len();
|
2024-11-07 22:31:20 +01:00
|
|
|
m!(2).len();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub trait AsBytes {
|
|
|
|
|
fn as_bytes(&self) -> &[u8];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl AsBytes for String {
|
|
|
|
|
fn as_bytes(&self) -> &[u8] {
|
|
|
|
|
&[]
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-28 19:22:55 +01:00
|
|
|
|
|
|
|
|
pub trait Bytes {
|
|
|
|
|
fn bytes(&self) -> &[u8];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Bytes for String {
|
|
|
|
|
fn bytes(&self) -> &[u8] {
|
|
|
|
|
&[]
|
|
|
|
|
}
|
|
|
|
|
}
|