Add missing diagnostic item Symbols
This commit is contained in:
parent
3da2dd3eae
commit
4a6e67ead7
@ -592,6 +592,8 @@ symbols! {
|
|||||||
gt,
|
gt,
|
||||||
half_open_range_patterns,
|
half_open_range_patterns,
|
||||||
hash,
|
hash,
|
||||||
|
hashmap_type,
|
||||||
|
hashset_type,
|
||||||
hexagon_target_feature,
|
hexagon_target_feature,
|
||||||
hidden,
|
hidden,
|
||||||
homogeneous_aggregate,
|
homogeneous_aggregate,
|
||||||
|
@ -9,6 +9,7 @@ use rustc_lint::{LateContext, LateLintPass};
|
|||||||
use rustc_middle::hir::map::Map;
|
use rustc_middle::hir::map::Map;
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::source_map::Span;
|
use rustc_span::source_map::Span;
|
||||||
|
use rustc_span::sym;
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// **What it does:** Checks for uses of `contains_key` + `insert` on `HashMap`
|
/// **What it does:** Checks for uses of `contains_key` + `insert` on `HashMap`
|
||||||
@ -111,7 +112,7 @@ fn check_cond<'a>(cx: &LateContext<'_>, check: &'a Expr<'a>) -> Option<(&'static
|
|||||||
return if match_type(cx, obj_ty, &paths::BTREEMAP) {
|
return if match_type(cx, obj_ty, &paths::BTREEMAP) {
|
||||||
Some(("BTreeMap", map, key))
|
Some(("BTreeMap", map, key))
|
||||||
}
|
}
|
||||||
else if is_type_diagnostic_item(cx, obj_ty, sym!(hashmap_type)) {
|
else if is_type_diagnostic_item(cx, obj_ty, sym::hashmap_type) {
|
||||||
Some(("HashMap", map, key))
|
Some(("HashMap", map, key))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1010,7 +1010,7 @@ fn is_slice_like<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'_>) -> bool {
|
|||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
is_slice || is_type_diagnostic_item(cx, ty, sym::vec_type) || is_type_diagnostic_item(cx, ty, sym!(vecdeque_type))
|
is_slice || is_type_diagnostic_item(cx, ty, sym::vec_type) || is_type_diagnostic_item(cx, ty, sym::vecdeque_type)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fetch_cloned_expr<'tcx>(expr: &'tcx Expr<'tcx>) -> &'tcx Expr<'tcx> {
|
fn fetch_cloned_expr<'tcx>(expr: &'tcx Expr<'tcx>) -> &'tcx Expr<'tcx> {
|
||||||
@ -1908,7 +1908,7 @@ fn check_for_loop_over_map_kv<'tcx>(
|
|||||||
_ => arg,
|
_ => arg,
|
||||||
};
|
};
|
||||||
|
|
||||||
if is_type_diagnostic_item(cx, ty, sym!(hashmap_type)) || match_type(cx, ty, &paths::BTREEMAP) {
|
if is_type_diagnostic_item(cx, ty, sym::hashmap_type) || match_type(cx, ty, &paths::BTREEMAP) {
|
||||||
span_lint_and_then(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
FOR_KV_MAP,
|
FOR_KV_MAP,
|
||||||
@ -2386,9 +2386,9 @@ fn is_ref_iterable_type(cx: &LateContext<'_>, e: &Expr<'_>) -> bool {
|
|||||||
is_iterable_array(ty, cx) ||
|
is_iterable_array(ty, cx) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
||||||
match_type(cx, ty, &paths::LINKED_LIST) ||
|
match_type(cx, ty, &paths::LINKED_LIST) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym!(hashmap_type)) ||
|
is_type_diagnostic_item(cx, ty, sym::hashmap_type) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym!(hashset_type)) ||
|
is_type_diagnostic_item(cx, ty, sym::hashset_type) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym!(vecdeque_type)) ||
|
is_type_diagnostic_item(cx, ty, sym::vecdeque_type) ||
|
||||||
match_type(cx, ty, &paths::BINARY_HEAP) ||
|
match_type(cx, ty, &paths::BINARY_HEAP) ||
|
||||||
match_type(cx, ty, &paths::BTREEMAP) ||
|
match_type(cx, ty, &paths::BTREEMAP) ||
|
||||||
match_type(cx, ty, &paths::BTREESET)
|
match_type(cx, ty, &paths::BTREESET)
|
||||||
@ -2922,9 +2922,9 @@ fn check_needless_collect_direct_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCont
|
|||||||
then {
|
then {
|
||||||
let ty = cx.typeck_results().node_type(ty.hir_id);
|
let ty = cx.typeck_results().node_type(ty.hir_id);
|
||||||
if is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
if is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym!(vecdeque_type)) ||
|
is_type_diagnostic_item(cx, ty, sym::vecdeque_type) ||
|
||||||
match_type(cx, ty, &paths::BTREEMAP) ||
|
match_type(cx, ty, &paths::BTREEMAP) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym!(hashmap_type)) {
|
is_type_diagnostic_item(cx, ty, sym::hashmap_type) {
|
||||||
if method.ident.name == sym!(len) {
|
if method.ident.name == sym!(len) {
|
||||||
let span = shorten_needless_collect_span(expr);
|
let span = shorten_needless_collect_span(expr);
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
@ -2992,7 +2992,7 @@ fn check_needless_collect_indirect_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCo
|
|||||||
if let Some(GenericArg::Type(ref ty)) = generic_args.args.get(0);
|
if let Some(GenericArg::Type(ref ty)) = generic_args.args.get(0);
|
||||||
if let ty = cx.typeck_results().node_type(ty.hir_id);
|
if let ty = cx.typeck_results().node_type(ty.hir_id);
|
||||||
if is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
if is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym!(vecdeque_type)) ||
|
is_type_diagnostic_item(cx, ty, sym::vecdeque_type) ||
|
||||||
match_type(cx, ty, &paths::LINKED_LIST);
|
match_type(cx, ty, &paths::LINKED_LIST);
|
||||||
if let Some(iter_calls) = detect_iter_and_into_iters(block, *ident);
|
if let Some(iter_calls) = detect_iter_and_into_iters(block, *ident);
|
||||||
if iter_calls.len() == 1;
|
if iter_calls.len() == 1;
|
||||||
|
@ -2598,7 +2598,7 @@ fn lint_iter_nth<'tcx>(
|
|||||||
"slice"
|
"slice"
|
||||||
} else if is_type_diagnostic_item(cx, cx.typeck_results().expr_ty(&iter_args[0]), sym::vec_type) {
|
} else if is_type_diagnostic_item(cx, cx.typeck_results().expr_ty(&iter_args[0]), sym::vec_type) {
|
||||||
"Vec"
|
"Vec"
|
||||||
} else if is_type_diagnostic_item(cx, cx.typeck_results().expr_ty(&iter_args[0]), sym!(vecdeque_type)) {
|
} else if is_type_diagnostic_item(cx, cx.typeck_results().expr_ty(&iter_args[0]), sym::vecdeque_type) {
|
||||||
"VecDeque"
|
"VecDeque"
|
||||||
} else {
|
} else {
|
||||||
let nth_args = nth_and_iter_args[0];
|
let nth_args = nth_and_iter_args[0];
|
||||||
@ -2652,10 +2652,10 @@ fn lint_get_unwrap<'tcx>(cx: &LateContext<'tcx>, expr: &hir::Expr<'_>, get_args:
|
|||||||
} else if is_type_diagnostic_item(cx, expr_ty, sym::vec_type) {
|
} else if is_type_diagnostic_item(cx, expr_ty, sym::vec_type) {
|
||||||
needs_ref = get_args_str.parse::<usize>().is_ok();
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"Vec"
|
"Vec"
|
||||||
} else if is_type_diagnostic_item(cx, expr_ty, sym!(vecdeque_type)) {
|
} else if is_type_diagnostic_item(cx, expr_ty, sym::vecdeque_type) {
|
||||||
needs_ref = get_args_str.parse::<usize>().is_ok();
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"VecDeque"
|
"VecDeque"
|
||||||
} else if !is_mut && is_type_diagnostic_item(cx, expr_ty, sym!(hashmap_type)) {
|
} else if !is_mut && is_type_diagnostic_item(cx, expr_ty, sym::hashmap_type) {
|
||||||
needs_ref = true;
|
needs_ref = true;
|
||||||
"HashMap"
|
"HashMap"
|
||||||
} else if !is_mut && match_type(cx, expr_ty, &paths::BTREEMAP) {
|
} else if !is_mut && match_type(cx, expr_ty, &paths::BTREEMAP) {
|
||||||
|
@ -199,7 +199,7 @@ fn check_for_slice<'a>(cx: &LateContext<'_>, lhs1: &'a Expr<'_>, lhs2: &'a Expr<
|
|||||||
if matches!(ty.kind(), ty::Slice(_))
|
if matches!(ty.kind(), ty::Slice(_))
|
||||||
|| matches!(ty.kind(), ty::Array(_, _))
|
|| matches!(ty.kind(), ty::Array(_, _))
|
||||||
|| is_type_diagnostic_item(cx, ty, sym::vec_type)
|
|| is_type_diagnostic_item(cx, ty, sym::vec_type)
|
||||||
|| is_type_diagnostic_item(cx, ty, sym!(vecdeque_type))
|
|| is_type_diagnostic_item(cx, ty, sym::vecdeque_type)
|
||||||
{
|
{
|
||||||
return Slice::Swappable(lhs1, idx1, idx2);
|
return Slice::Swappable(lhs1, idx1, idx2);
|
||||||
}
|
}
|
||||||
|
@ -2680,14 +2680,14 @@ impl<'tcx> ImplicitHasherType<'tcx> {
|
|||||||
|
|
||||||
let ty = hir_ty_to_ty(cx.tcx, hir_ty);
|
let ty = hir_ty_to_ty(cx.tcx, hir_ty);
|
||||||
|
|
||||||
if is_type_diagnostic_item(cx, ty, sym!(hashmap_type)) && params_len == 2 {
|
if is_type_diagnostic_item(cx, ty, sym::hashmap_type) && params_len == 2 {
|
||||||
Some(ImplicitHasherType::HashMap(
|
Some(ImplicitHasherType::HashMap(
|
||||||
hir_ty.span,
|
hir_ty.span,
|
||||||
ty,
|
ty,
|
||||||
snippet(cx, params[0].span, "K"),
|
snippet(cx, params[0].span, "K"),
|
||||||
snippet(cx, params[1].span, "V"),
|
snippet(cx, params[1].span, "V"),
|
||||||
))
|
))
|
||||||
} else if is_type_diagnostic_item(cx, ty, sym!(hashset_type)) && params_len == 1 {
|
} else if is_type_diagnostic_item(cx, ty, sym::hashset_type) && params_len == 1 {
|
||||||
Some(ImplicitHasherType::HashSet(
|
Some(ImplicitHasherType::HashSet(
|
||||||
hir_ty.span,
|
hir_ty.span,
|
||||||
ty,
|
ty,
|
||||||
|
@ -5,6 +5,7 @@ use rustc_middle::ty::{Adt, Ty};
|
|||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_target::abi::LayoutOf as _;
|
use rustc_target::abi::LayoutOf as _;
|
||||||
use rustc_typeck::hir_ty_to_ty;
|
use rustc_typeck::hir_ty_to_ty;
|
||||||
|
use rustc_span::sym;
|
||||||
|
|
||||||
use crate::utils::{is_normalizable, is_type_diagnostic_item, match_type, paths, span_lint_and_help};
|
use crate::utils::{is_normalizable, is_type_diagnostic_item, match_type, paths, span_lint_and_help};
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ impl LateLintPass<'_> for ZeroSizedMapValues {
|
|||||||
if !hir_ty.span.from_expansion();
|
if !hir_ty.span.from_expansion();
|
||||||
if !in_trait_impl(cx, hir_ty.hir_id);
|
if !in_trait_impl(cx, hir_ty.hir_id);
|
||||||
let ty = ty_from_hir_ty(cx, hir_ty);
|
let ty = ty_from_hir_ty(cx, hir_ty);
|
||||||
if is_type_diagnostic_item(cx, ty, sym!(hashmap_type)) || match_type(cx, ty, &paths::BTREEMAP);
|
if is_type_diagnostic_item(cx, ty, sym::hashmap_type) || match_type(cx, ty, &paths::BTREEMAP);
|
||||||
if let Adt(_, ref substs) = ty.kind();
|
if let Adt(_, ref substs) = ty.kind();
|
||||||
let ty = substs.type_at(1);
|
let ty = substs.type_at(1);
|
||||||
// Do this to prevent `layout_of` crashing, being unable to fully normalize `ty`.
|
// Do this to prevent `layout_of` crashing, being unable to fully normalize `ty`.
|
||||||
|
@ -18,6 +18,7 @@ use rustc_hir::intravisit::{NestedVisitorMap, Visitor};
|
|||||||
use rustc_hir::{Block, Expr, ExprKind, Path, QPath};
|
use rustc_hir::{Block, Expr, ExprKind, Path, QPath};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
use rustc_middle::hir::map::Map;
|
use rustc_middle::hir::map::Map;
|
||||||
|
use rustc_span::sym;
|
||||||
|
|
||||||
/// Is the expr pure (is it free from side-effects)?
|
/// Is the expr pure (is it free from side-effects)?
|
||||||
/// This function is named so to stress that it isn't exhaustive and returns FNs.
|
/// This function is named so to stress that it isn't exhaustive and returns FNs.
|
||||||
@ -99,7 +100,7 @@ fn identify_some_potentially_expensive_patterns<'tcx>(cx: &LateContext<'tcx>, ex
|
|||||||
ExprKind::Call(..) => !is_ctor_or_promotable_const_function(self.cx, expr),
|
ExprKind::Call(..) => !is_ctor_or_promotable_const_function(self.cx, expr),
|
||||||
ExprKind::Index(obj, _) => {
|
ExprKind::Index(obj, _) => {
|
||||||
let ty = self.cx.typeck_results().expr_ty(obj);
|
let ty = self.cx.typeck_results().expr_ty(obj);
|
||||||
is_type_diagnostic_item(self.cx, ty, sym!(hashmap_type))
|
is_type_diagnostic_item(self.cx, ty, sym::hashmap_type)
|
||||||
|| match_type(self.cx, ty, &paths::BTREEMAP)
|
|| match_type(self.cx, ty, &paths::BTREEMAP)
|
||||||
},
|
},
|
||||||
ExprKind::MethodCall(..) => true,
|
ExprKind::MethodCall(..) => true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user