clippy: replace path uses by diagnostic items
This commit is contained in:
parent
6a9f223f00
commit
07338a40de
7 changed files with 16 additions and 24 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::source::SpanRangeExt;
|
||||
use clippy_utils::{expr_or_init, path_def_id, paths, std_or_core};
|
||||
use clippy_utils::{expr_or_init, is_path_diagnostic_item, std_or_core, sym};
|
||||
use rustc_ast::LitKind;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Expr, ExprKind, GenericArg, Mutability, QPath, Ty, TyKind};
|
||||
|
|
@ -53,8 +53,7 @@ fn is_expr_const_aligned(cx: &LateContext<'_>, expr: &Expr<'_>, to: &Ty<'_>) ->
|
|||
|
||||
fn is_align_of_call(cx: &LateContext<'_>, fun: &Expr<'_>, to: &Ty<'_>) -> bool {
|
||||
if let ExprKind::Path(QPath::Resolved(_, path)) = fun.kind
|
||||
&& let Some(fun_id) = path_def_id(cx, fun)
|
||||
&& paths::ALIGN_OF.matches(cx, fun_id)
|
||||
&& is_path_diagnostic_item(cx, fun, sym::mem_align_of)
|
||||
&& let Some(args) = path.segments.last().and_then(|seg| seg.args)
|
||||
&& let [GenericArg::Type(generic_ty)] = args.args
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use clippy_config::Conf;
|
||||
use clippy_utils::diagnostics::{span_lint, span_lint_and_sugg};
|
||||
use clippy_utils::msrvs::Msrv;
|
||||
use clippy_utils::{is_none_arm, msrvs, paths, peel_hir_expr_refs, sym};
|
||||
use clippy_utils::{is_none_arm, msrvs, peel_hir_expr_refs, sym};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::{Arm, Expr, ExprKind, LangItem, Pat, PatKind, QPath, is_range_literal};
|
||||
|
|
@ -220,5 +220,5 @@ fn is_empty_slice(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
|
|||
}
|
||||
|
||||
fn is_slice_from_ref(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
|
||||
paths::SLICE_FROM_REF.matches_path(cx, expr)
|
||||
clippy_utils::is_path_diagnostic_item(cx, expr, sym::slice_from_ref)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_then;
|
||||
use clippy_utils::msrvs::{self, Msrv};
|
||||
use clippy_utils::{expr_or_init, paths};
|
||||
use clippy_utils::{expr_or_init, is_path_diagnostic_item, sym};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Expr, ExprKind, QPath};
|
||||
use rustc_lint::LateContext;
|
||||
|
|
@ -10,8 +10,11 @@ pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, path: &Expr<'_>, args
|
|||
&& !expr.span.from_expansion()
|
||||
&& !error_kind.span.from_expansion()
|
||||
&& let ExprKind::Path(QPath::TypeRelative(_, new_segment)) = path.kind
|
||||
&& paths::IO_ERROR_NEW.matches_path(cx, path)
|
||||
&& paths::IO_ERRORKIND_OTHER_CTOR.matches_path(cx, expr_or_init(cx, error_kind))
|
||||
&& is_path_diagnostic_item(cx, path, sym::io_error_new)
|
||||
&& let ExprKind::Path(QPath::Resolved(_, init_path)) = &expr_or_init(cx, error_kind).kind
|
||||
&& let [.., error_kind_ty, error_kind_variant] = init_path.segments
|
||||
&& cx.tcx.is_diagnostic_item(sym::io_errorkind, error_kind_ty.res.def_id())
|
||||
&& error_kind_variant.ident.name == sym::Other
|
||||
&& msrv.meets(cx, msrvs::IO_ERROR_OTHER)
|
||||
{
|
||||
span_lint_and_then(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use clippy_utils::higher::VecArgs;
|
|||
use clippy_utils::macros::root_macro_call_first_node;
|
||||
use clippy_utils::source::SpanRangeExt;
|
||||
use clippy_utils::ty::implements_trait;
|
||||
use clippy_utils::{is_no_std_crate, paths};
|
||||
use clippy_utils::{is_no_std_crate, sym};
|
||||
use rustc_ast::{LitIntType, LitKind, UintTy};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Expr, ExprKind, LangItem, QPath, StructTailExpr};
|
||||
|
|
@ -100,7 +100,7 @@ impl LateLintPass<'_> for SingleRangeInVecInit {
|
|||
&& let Some(start_snippet) = start.span.get_source_text(cx)
|
||||
&& let Some(end_snippet) = end.span.get_source_text(cx)
|
||||
{
|
||||
let should_emit_every_value = if let Some(step_def_id) = paths::ITER_STEP.only(cx)
|
||||
let should_emit_every_value = if let Some(step_def_id) = cx.tcx.get_diagnostic_item(sym::range_step)
|
||||
&& implements_trait(cx, ty, step_def_id, &[])
|
||||
{
|
||||
true
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use clippy_config::Conf;
|
|||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::msrvs::{self, Msrv};
|
||||
use clippy_utils::source::snippet_with_applicability;
|
||||
use clippy_utils::{is_in_const_context, paths, sym};
|
||||
use clippy_utils::{is_in_const_context, is_path_diagnostic_item, sym};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
|
|
@ -62,7 +62,7 @@ impl<'tcx> LateLintPass<'tcx> for ToDigitIsSome {
|
|||
}
|
||||
},
|
||||
hir::ExprKind::Call(to_digits_call, [char_arg, radix_arg]) => {
|
||||
if paths::CHAR_TO_DIGIT.matches_path(cx, to_digits_call) {
|
||||
if is_path_diagnostic_item(cx, to_digits_call, sym::char_to_digit) {
|
||||
Some((false, char_arg, radix_arg))
|
||||
} else {
|
||||
None
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::macros::macro_backtrace;
|
||||
use clippy_utils::paths::CONCAT;
|
||||
use clippy_utils::source::snippet_opt;
|
||||
use clippy_utils::tokenize_with_text;
|
||||
use clippy_utils::{sym, tokenize_with_text};
|
||||
use rustc_ast::LitKind;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Expr, ExprKind};
|
||||
|
|
@ -43,7 +42,7 @@ impl LateLintPass<'_> for UselessConcat {
|
|||
// Get the direct parent of the expression.
|
||||
&& let Some(macro_call) = macro_backtrace(expr.span).next()
|
||||
// Check if the `concat` macro from the `core` library.
|
||||
&& CONCAT.matches(cx, macro_call.def_id)
|
||||
&& cx.tcx.is_diagnostic_item(sym::macro_concat, macro_call.def_id)
|
||||
// We get the original code to parse it.
|
||||
&& let Some(original_code) = snippet_opt(cx, macro_call.span)
|
||||
// This check allows us to ensure that the code snippet:
|
||||
|
|
|
|||
|
|
@ -126,15 +126,6 @@ path_macros! {
|
|||
macro_path: PathNS::Macro,
|
||||
}
|
||||
|
||||
// Paths in `core`/`alloc`/`std`. This should be avoided and cleaned up by adding diagnostic items.
|
||||
pub static ALIGN_OF: PathLookup = value_path!(core::mem::align_of);
|
||||
pub static CHAR_TO_DIGIT: PathLookup = value_path!(char::to_digit);
|
||||
pub static CONCAT: PathLookup = macro_path!(core::concat);
|
||||
pub static IO_ERROR_NEW: PathLookup = value_path!(std::io::Error::new);
|
||||
pub static IO_ERRORKIND_OTHER_CTOR: PathLookup = value_path!(std::io::ErrorKind::Other);
|
||||
pub static ITER_STEP: PathLookup = type_path!(core::iter::Step);
|
||||
pub static SLICE_FROM_REF: PathLookup = value_path!(core::slice::from_ref);
|
||||
|
||||
// Paths in external crates
|
||||
pub static FUTURES_IO_ASYNCREADEXT: PathLookup = type_path!(futures_util::AsyncReadExt);
|
||||
pub static FUTURES_IO_ASYNCWRITEEXT: PathLookup = type_path!(futures_util::AsyncWriteExt);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue