mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-31 17:12:53 +00:00
Auto merge of #6117 - dtolnay:string_lit_as_bytes, r=ebroto
Downgrade string_lit_as_bytes to nursery Between #1402 (regarding `to_owned`) and #4494 (regarding `impl Read`), as well as other confusion I've seen hit in my work codebase involving string_lit_as_bytes (`"...".as_bytes().into()`), I don't think this lint is at a quality to be enabled by default. I would consider re-enabling this lint after it is updated to understand when the surrounding type information is sufficient to unsize `b"..."` to &\[u8\] without causing a type error. As currently implemented, this lint is pushing people to write `&b"_"[..]` which is not an improvement over `"_".as_bytes()` as far as I am concerned. --- changelog: Remove string_lit_as_bytes from default set of enabled lints
This commit is contained in:
commit
265e4841b7
@ -1477,7 +1477,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
||||
LintId::of(&single_component_path_imports::SINGLE_COMPONENT_PATH_IMPORTS),
|
||||
LintId::of(&slow_vector_initialization::SLOW_VECTOR_INITIALIZATION),
|
||||
LintId::of(&stable_sort_primitive::STABLE_SORT_PRIMITIVE),
|
||||
LintId::of(&strings::STRING_LIT_AS_BYTES),
|
||||
LintId::of(&suspicious_trait_impl::SUSPICIOUS_ARITHMETIC_IMPL),
|
||||
LintId::of(&suspicious_trait_impl::SUSPICIOUS_OP_ASSIGN_IMPL),
|
||||
LintId::of(&swap::ALMOST_SWAPPED),
|
||||
@ -1619,7 +1618,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
||||
LintId::of(&returns::LET_AND_RETURN),
|
||||
LintId::of(&returns::NEEDLESS_RETURN),
|
||||
LintId::of(&single_component_path_imports::SINGLE_COMPONENT_PATH_IMPORTS),
|
||||
LintId::of(&strings::STRING_LIT_AS_BYTES),
|
||||
LintId::of(&tabs_in_doc_comments::TABS_IN_DOC_COMMENTS),
|
||||
LintId::of(&to_digit_is_some::TO_DIGIT_IS_SOME),
|
||||
LintId::of(&try_err::TRY_ERR),
|
||||
@ -1831,6 +1829,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
||||
LintId::of(&needless_borrow::NEEDLESS_BORROW),
|
||||
LintId::of(&path_buf_push_overwrite::PATH_BUF_PUSH_OVERWRITE),
|
||||
LintId::of(&redundant_pub_crate::REDUNDANT_PUB_CRATE),
|
||||
LintId::of(&strings::STRING_LIT_AS_BYTES),
|
||||
LintId::of(&transmute::USELESS_TRANSMUTE),
|
||||
LintId::of(&use_self::USE_SELF),
|
||||
]);
|
||||
|
@ -69,7 +69,27 @@ declare_clippy_lint! {
|
||||
/// **Why is this bad?** Byte string literals (e.g., `b"foo"`) can be used
|
||||
/// instead. They are shorter but less discoverable than `as_bytes()`.
|
||||
///
|
||||
/// **Known Problems:** None.
|
||||
/// **Known Problems:**
|
||||
/// `"str".as_bytes()` and the suggested replacement of `b"str"` are not
|
||||
/// equivalent because they have different types. The former is `&[u8]`
|
||||
/// while the latter is `&[u8; 3]`. That means in general they will have a
|
||||
/// different set of methods and different trait implementations.
|
||||
///
|
||||
/// ```compile_fail
|
||||
/// fn f(v: Vec<u8>) {}
|
||||
///
|
||||
/// f("...".as_bytes().to_owned()); // works
|
||||
/// f(b"...".to_owned()); // does not work, because arg is [u8; 3] not Vec<u8>
|
||||
///
|
||||
/// fn g(r: impl std::io::Read) {}
|
||||
///
|
||||
/// g("...".as_bytes()); // works
|
||||
/// g(b"..."); // does not work
|
||||
/// ```
|
||||
///
|
||||
/// The actual equivalent of `"str".as_bytes()` with the same type is not
|
||||
/// `b"str"` but `&b"str"[..]`, which is a great deal of punctuation and not
|
||||
/// more readable than a function call.
|
||||
///
|
||||
/// **Example:**
|
||||
/// ```rust
|
||||
@ -80,7 +100,7 @@ declare_clippy_lint! {
|
||||
/// let bs = b"a byte string";
|
||||
/// ```
|
||||
pub STRING_LIT_AS_BYTES,
|
||||
style,
|
||||
nursery,
|
||||
"calling `as_bytes` on a string literal instead of using a byte string literal"
|
||||
}
|
||||
|
||||
|
@ -2161,7 +2161,7 @@ pub static ref ALL_LINTS: Vec<Lint> = vec![
|
||||
},
|
||||
Lint {
|
||||
name: "string_lit_as_bytes",
|
||||
group: "style",
|
||||
group: "nursery",
|
||||
desc: "calling `as_bytes` on a string literal instead of using a byte string literal",
|
||||
deprecation: None,
|
||||
module: "strings",
|
||||
|
Loading…
Reference in New Issue
Block a user