[Clippy] Swap option_as_ref_deref
to use diagnostic items instead of paths
This commit is contained in:
parent
71dbfd55a1
commit
7ffd485be0
@ -2,12 +2,12 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||||
use clippy_utils::source::snippet;
|
use clippy_utils::source::snippet;
|
||||||
use clippy_utils::ty::is_type_diagnostic_item;
|
use clippy_utils::ty::is_type_diagnostic_item;
|
||||||
use clippy_utils::{match_def_path, path_to_local_id, paths, peel_blocks};
|
use clippy_utils::{path_to_local_id, peel_blocks};
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::ty;
|
use rustc_middle::ty;
|
||||||
use rustc_span::sym;
|
use rustc_span::{sym, Symbol};
|
||||||
|
|
||||||
use super::OPTION_AS_REF_DEREF;
|
use super::OPTION_AS_REF_DEREF;
|
||||||
|
|
||||||
@ -31,14 +31,14 @@ pub(super) fn check(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let deref_aliases: [&[&str]; 7] = [
|
let deref_aliases: [Symbol; 7] = [
|
||||||
&paths::CSTRING_AS_C_STR,
|
sym::cstring_as_c_str,
|
||||||
&paths::OS_STRING_AS_OS_STR,
|
sym::os_string_as_os_str,
|
||||||
&paths::PATH_BUF_AS_PATH,
|
sym::pathbuf_as_path,
|
||||||
&paths::STRING_AS_STR,
|
sym::string_as_str,
|
||||||
&paths::STRING_AS_MUT_STR,
|
sym::string_as_mut_str,
|
||||||
&paths::VEC_AS_SLICE,
|
sym::vec_as_slice,
|
||||||
&paths::VEC_AS_MUT_SLICE,
|
sym::vec_as_mut_slice,
|
||||||
];
|
];
|
||||||
|
|
||||||
let is_deref = match map_arg.kind {
|
let is_deref = match map_arg.kind {
|
||||||
@ -48,7 +48,7 @@ pub(super) fn check(
|
|||||||
.map_or(false, |fun_def_id| {
|
.map_or(false, |fun_def_id| {
|
||||||
cx.tcx.is_diagnostic_item(sym::deref_method, fun_def_id)
|
cx.tcx.is_diagnostic_item(sym::deref_method, fun_def_id)
|
||||||
|| cx.tcx.is_diagnostic_item(sym::deref_mut_method, fun_def_id)
|
|| cx.tcx.is_diagnostic_item(sym::deref_mut_method, fun_def_id)
|
||||||
|| deref_aliases.iter().any(|path| match_def_path(cx, fun_def_id, path))
|
|| deref_aliases.iter().any(|&sym| cx.tcx.is_diagnostic_item(sym, fun_def_id))
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
hir::ExprKind::Closure(&hir::Closure { body, .. }) => {
|
hir::ExprKind::Closure(&hir::Closure { body, .. }) => {
|
||||||
@ -69,7 +69,7 @@ pub(super) fn check(
|
|||||||
let method_did = cx.typeck_results().type_dependent_def_id(closure_expr.hir_id).unwrap();
|
let method_did = cx.typeck_results().type_dependent_def_id(closure_expr.hir_id).unwrap();
|
||||||
cx.tcx.is_diagnostic_item(sym::deref_method, method_did)
|
cx.tcx.is_diagnostic_item(sym::deref_method, method_did)
|
||||||
|| cx.tcx.is_diagnostic_item(sym::deref_mut_method, method_did)
|
|| cx.tcx.is_diagnostic_item(sym::deref_mut_method, method_did)
|
||||||
|| deref_aliases.iter().any(|path| match_def_path(cx, method_did, path))
|
|| deref_aliases.iter().any(|&sym| cx.tcx.is_diagnostic_item(sym, method_did))
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
["rustc_lint_defs", "Applicability", "MachineApplicable"],
|
["rustc_lint_defs", "Applicability", "MachineApplicable"],
|
||||||
];
|
];
|
||||||
pub const DIAG: [&str; 2] = ["rustc_errors", "Diag"];
|
pub const DIAG: [&str; 2] = ["rustc_errors", "Diag"];
|
||||||
pub const CSTRING_AS_C_STR: [&str; 5] = ["alloc", "ffi", "c_str", "CString", "as_c_str"];
|
|
||||||
pub const EARLY_CONTEXT: [&str; 2] = ["rustc_lint", "EarlyContext"];
|
pub const EARLY_CONTEXT: [&str; 2] = ["rustc_lint", "EarlyContext"];
|
||||||
pub const EARLY_LINT_PASS: [&str; 3] = ["rustc_lint", "passes", "EarlyLintPass"];
|
pub const EARLY_LINT_PASS: [&str; 3] = ["rustc_lint", "passes", "EarlyLintPass"];
|
||||||
pub const F32_EPSILON: [&str; 4] = ["core", "f32", "<impl f32>", "EPSILON"];
|
pub const F32_EPSILON: [&str; 4] = ["core", "f32", "<impl f32>", "EPSILON"];
|
||||||
@ -40,12 +39,10 @@
|
|||||||
pub const LINT: [&str; 2] = ["rustc_lint_defs", "Lint"];
|
pub const LINT: [&str; 2] = ["rustc_lint_defs", "Lint"];
|
||||||
pub const MSRV: [&str; 3] = ["clippy_config", "msrvs", "Msrv"];
|
pub const MSRV: [&str; 3] = ["clippy_config", "msrvs", "Msrv"];
|
||||||
pub const OPEN_OPTIONS_NEW: [&str; 4] = ["std", "fs", "OpenOptions", "new"];
|
pub const OPEN_OPTIONS_NEW: [&str; 4] = ["std", "fs", "OpenOptions", "new"];
|
||||||
pub const OS_STRING_AS_OS_STR: [&str; 5] = ["std", "ffi", "os_str", "OsString", "as_os_str"];
|
|
||||||
pub const OS_STR_TO_OS_STRING: [&str; 5] = ["std", "ffi", "os_str", "OsStr", "to_os_string"];
|
pub const OS_STR_TO_OS_STRING: [&str; 5] = ["std", "ffi", "os_str", "OsStr", "to_os_string"];
|
||||||
pub const PARKING_LOT_MUTEX_GUARD: [&str; 3] = ["lock_api", "mutex", "MutexGuard"];
|
pub const PARKING_LOT_MUTEX_GUARD: [&str; 3] = ["lock_api", "mutex", "MutexGuard"];
|
||||||
pub const PARKING_LOT_RWLOCK_READ_GUARD: [&str; 3] = ["lock_api", "rwlock", "RwLockReadGuard"];
|
pub const PARKING_LOT_RWLOCK_READ_GUARD: [&str; 3] = ["lock_api", "rwlock", "RwLockReadGuard"];
|
||||||
pub const PARKING_LOT_RWLOCK_WRITE_GUARD: [&str; 3] = ["lock_api", "rwlock", "RwLockWriteGuard"];
|
pub const PARKING_LOT_RWLOCK_WRITE_GUARD: [&str; 3] = ["lock_api", "rwlock", "RwLockWriteGuard"];
|
||||||
pub const PATH_BUF_AS_PATH: [&str; 4] = ["std", "path", "PathBuf", "as_path"];
|
|
||||||
pub const PATH_MAIN_SEPARATOR: [&str; 3] = ["std", "path", "MAIN_SEPARATOR"];
|
pub const PATH_MAIN_SEPARATOR: [&str; 3] = ["std", "path", "MAIN_SEPARATOR"];
|
||||||
pub const PATH_TO_PATH_BUF: [&str; 4] = ["std", "path", "Path", "to_path_buf"];
|
pub const PATH_TO_PATH_BUF: [&str; 4] = ["std", "path", "Path", "to_path_buf"];
|
||||||
#[cfg_attr(not(unix), allow(clippy::invalid_paths))]
|
#[cfg_attr(not(unix), allow(clippy::invalid_paths))]
|
||||||
@ -62,8 +59,6 @@
|
|||||||
pub const SLICE_INTO_VEC: [&str; 4] = ["alloc", "slice", "<impl [T]>", "into_vec"];
|
pub const SLICE_INTO_VEC: [&str; 4] = ["alloc", "slice", "<impl [T]>", "into_vec"];
|
||||||
pub const STD_IO_SEEK_FROM_CURRENT: [&str; 4] = ["std", "io", "SeekFrom", "Current"];
|
pub const STD_IO_SEEK_FROM_CURRENT: [&str; 4] = ["std", "io", "SeekFrom", "Current"];
|
||||||
pub const STD_IO_SEEKFROM_START: [&str; 4] = ["std", "io", "SeekFrom", "Start"];
|
pub const STD_IO_SEEKFROM_START: [&str; 4] = ["std", "io", "SeekFrom", "Start"];
|
||||||
pub const STRING_AS_MUT_STR: [&str; 4] = ["alloc", "string", "String", "as_mut_str"];
|
|
||||||
pub const STRING_AS_STR: [&str; 4] = ["alloc", "string", "String", "as_str"];
|
|
||||||
pub const STRING_NEW: [&str; 4] = ["alloc", "string", "String", "new"];
|
pub const STRING_NEW: [&str; 4] = ["alloc", "string", "String", "new"];
|
||||||
pub const STR_ENDS_WITH: [&str; 4] = ["core", "str", "<impl str>", "ends_with"];
|
pub const STR_ENDS_WITH: [&str; 4] = ["core", "str", "<impl str>", "ends_with"];
|
||||||
pub const STR_LEN: [&str; 4] = ["core", "str", "<impl str>", "len"];
|
pub const STR_LEN: [&str; 4] = ["core", "str", "<impl str>", "len"];
|
||||||
@ -85,8 +80,6 @@
|
|||||||
pub const TOKIO_IO_OPEN_OPTIONS: [&str; 4] = ["tokio", "fs", "open_options", "OpenOptions"];
|
pub const TOKIO_IO_OPEN_OPTIONS: [&str; 4] = ["tokio", "fs", "open_options", "OpenOptions"];
|
||||||
#[expect(clippy::invalid_paths)] // internal lints do not know about all external crates
|
#[expect(clippy::invalid_paths)] // internal lints do not know about all external crates
|
||||||
pub const TOKIO_IO_OPEN_OPTIONS_NEW: [&str; 5] = ["tokio", "fs", "open_options", "OpenOptions", "new"];
|
pub const TOKIO_IO_OPEN_OPTIONS_NEW: [&str; 5] = ["tokio", "fs", "open_options", "OpenOptions", "new"];
|
||||||
pub const VEC_AS_MUT_SLICE: [&str; 4] = ["alloc", "vec", "Vec", "as_mut_slice"];
|
|
||||||
pub const VEC_AS_SLICE: [&str; 4] = ["alloc", "vec", "Vec", "as_slice"];
|
|
||||||
pub const VEC_FROM_ELEM: [&str; 3] = ["alloc", "vec", "from_elem"];
|
pub const VEC_FROM_ELEM: [&str; 3] = ["alloc", "vec", "from_elem"];
|
||||||
pub const VEC_NEW: [&str; 4] = ["alloc", "vec", "Vec", "new"];
|
pub const VEC_NEW: [&str; 4] = ["alloc", "vec", "Vec", "new"];
|
||||||
pub const VEC_WITH_CAPACITY: [&str; 4] = ["alloc", "vec", "Vec", "with_capacity"];
|
pub const VEC_WITH_CAPACITY: [&str; 4] = ["alloc", "vec", "Vec", "with_capacity"];
|
||||||
|
Loading…
Reference in New Issue
Block a user