Resolve through local re-exports in lookup_path (#14772)
Fixes https://github.com/rust-lang/rust-clippy/issues/14767 A long standing issue revealed by https://github.com/rust-lang/rust-clippy/pull/14397 changelog: none
This commit is contained in:
commit
f60807dfee
4 changed files with 53 additions and 19 deletions
|
|
@ -8,9 +8,9 @@ use crate::{MaybePath, path_def_id, sym};
|
|||
use rustc_ast::Mutability;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_hir::def::Namespace::{MacroNS, TypeNS, ValueNS};
|
||||
use rustc_hir::def::{DefKind, Namespace};
|
||||
use rustc_hir::def::{DefKind, Namespace, Res};
|
||||
use rustc_hir::def_id::{DefId, LOCAL_CRATE, LocalDefId};
|
||||
use rustc_hir::{ImplItemRef, ItemKind, Node, OwnerId, TraitItemRef};
|
||||
use rustc_hir::{ImplItemRef, ItemKind, Node, OwnerId, TraitItemRef, UseKind};
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty::fast_reject::SimplifiedType;
|
||||
use rustc_middle::ty::{FloatTy, IntTy, Ty, TyCtxt, UintTy};
|
||||
|
|
@ -302,8 +302,19 @@ fn local_item_child_by_name(tcx: TyCtxt<'_>, local_id: LocalDefId, ns: PathNS, n
|
|||
|
||||
match item_kind {
|
||||
ItemKind::Mod(_, r#mod) => r#mod.item_ids.iter().find_map(|&item_id| {
|
||||
let ident = tcx.hir_item(item_id).kind.ident()?;
|
||||
res(ident, item_id.owner_id)
|
||||
let item = tcx.hir_item(item_id);
|
||||
if let ItemKind::Use(path, UseKind::Single(ident)) = item.kind {
|
||||
if ident.name == name {
|
||||
path.res
|
||||
.iter()
|
||||
.find(|res| ns.matches(res.ns()))
|
||||
.and_then(Res::opt_def_id)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
res(item.kind.ident()?, item_id.owner_id)
|
||||
}
|
||||
}),
|
||||
ItemKind::Impl(r#impl) => r#impl
|
||||
.items
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue