Remove useless smallvec dependency in rustc_lint::non_local_def

This commit is contained in:
Urgau 2024-02-29 20:59:09 +01:00
parent 5c87ca2d1f
commit 20200f65ca
3 changed files with 18 additions and 14 deletions

View File

@ -4133,7 +4133,6 @@ dependencies = [
"rustc_target", "rustc_target",
"rustc_trait_selection", "rustc_trait_selection",
"rustc_type_ir", "rustc_type_ir",
"smallvec",
"tracing", "tracing",
"unicode-security", "unicode-security",
] ]

View File

@ -23,7 +23,6 @@ rustc_span = { path = "../rustc_span" }
rustc_target = { path = "../rustc_target" } rustc_target = { path = "../rustc_target" }
rustc_trait_selection = { path = "../rustc_trait_selection" } rustc_trait_selection = { path = "../rustc_trait_selection" }
rustc_type_ir = { path = "../rustc_type_ir" } rustc_type_ir = { path = "../rustc_type_ir" }
smallvec = { version = "1.8.1", features = ["union", "may_dangle"] }
tracing = "0.1" tracing = "0.1"
unicode-security = "0.1.0" unicode-security = "0.1.0"
# tidy-alphabetical-end # tidy-alphabetical-end

View File

@ -2,8 +2,6 @@
use rustc_span::def_id::{DefId, LOCAL_CRATE}; use rustc_span::def_id::{DefId, LOCAL_CRATE};
use rustc_span::{sym, symbol::kw, ExpnKind, MacroKind}; use rustc_span::{sym, symbol::kw, ExpnKind, MacroKind};
use smallvec::{smallvec, SmallVec};
use crate::lints::{NonLocalDefinitionsCargoUpdateNote, NonLocalDefinitionsDiag}; use crate::lints::{NonLocalDefinitionsCargoUpdateNote, NonLocalDefinitionsDiag};
use crate::{LateContext, LateLintPass, LintContext}; use crate::{LateContext, LateLintPass, LintContext};
@ -114,25 +112,25 @@ fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx Item<'tcx>) {
// is using local items and so we don't lint on it. // is using local items and so we don't lint on it.
// We also ignore anon-const in item by including the anon-const // We also ignore anon-const in item by including the anon-const
// parent as well; and since it's quite uncommon, we use smallvec // parent as well.
// to avoid unnecessary heap allocations. let parent_parent = if parent_def_kind == DefKind::Const
let local_parents: SmallVec<[DefId; 1]> = if parent_def_kind == DefKind::Const
&& parent_opt_item_name == Some(kw::Underscore) && parent_opt_item_name == Some(kw::Underscore)
{ {
smallvec![parent, cx.tcx.parent(parent)] Some(cx.tcx.parent(parent))
} else { } else {
smallvec![parent] None
}; };
let self_ty_has_local_parent = match impl_.self_ty.kind { let self_ty_has_local_parent = match impl_.self_ty.kind {
TyKind::Path(QPath::Resolved(_, ty_path)) => { TyKind::Path(QPath::Resolved(_, ty_path)) => {
path_has_local_parent(ty_path, cx, &*local_parents) path_has_local_parent(ty_path, cx, parent, parent_parent)
} }
TyKind::TraitObject([principle_poly_trait_ref, ..], _, _) => { TyKind::TraitObject([principle_poly_trait_ref, ..], _, _) => {
path_has_local_parent( path_has_local_parent(
principle_poly_trait_ref.trait_ref.path, principle_poly_trait_ref.trait_ref.path,
cx, cx,
&*local_parents, parent,
parent_parent,
) )
} }
TyKind::TraitObject([], _, _) TyKind::TraitObject([], _, _)
@ -154,7 +152,7 @@ fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx Item<'tcx>) {
let of_trait_has_local_parent = impl_ let of_trait_has_local_parent = impl_
.of_trait .of_trait
.map(|of_trait| path_has_local_parent(of_trait.path, cx, &*local_parents)) .map(|of_trait| path_has_local_parent(of_trait.path, cx, parent, parent_parent))
.unwrap_or(false); .unwrap_or(false);
// If none of them have a local parent (LOGICAL NOR) this means that // If none of them have a local parent (LOGICAL NOR) this means that
@ -218,6 +216,14 @@ fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx Item<'tcx>) {
/// std::convert::PartialEq<Foo<Bar>> /// std::convert::PartialEq<Foo<Bar>>
/// ^^^^^^^^^^^^^^^^^^^^^^^ /// ^^^^^^^^^^^^^^^^^^^^^^^
/// ``` /// ```
fn path_has_local_parent(path: &Path<'_>, cx: &LateContext<'_>, local_parents: &[DefId]) -> bool { fn path_has_local_parent(
path.res.opt_def_id().is_some_and(|did| local_parents.contains(&cx.tcx.parent(did))) path: &Path<'_>,
cx: &LateContext<'_>,
impl_parent: DefId,
impl_parent_parent: Option<DefId>,
) -> bool {
path.res.opt_def_id().is_some_and(|did| {
let res_parent = cx.tcx.parent(did);
res_parent == impl_parent || Some(res_parent) == impl_parent_parent
})
} }