1
Fork 0

separate definitions and HIR owners

fix a ui test

use `into`

fix clippy ui test

fix a run-make-fulldeps test

implement `IntoQueryParam<DefId>` for `OwnerId`

use `OwnerId` for more queries

change the type of `ParentOwnerIterator::Item` to `(OwnerId, OwnerNode)`
This commit is contained in:
Takayuki Maeda 2022-09-20 14:11:23 +09:00
parent bb5a016175
commit 8fe936099a
114 changed files with 659 additions and 518 deletions

View file

@ -345,14 +345,14 @@ impl<'tcx> DumpVisitor<'tcx> {
body: hir::BodyId,
) {
let map = self.tcx.hir();
self.nest_typeck_results(item.def_id, |v| {
self.nest_typeck_results(item.def_id.def_id, |v| {
let body = map.body(body);
if let Some(fn_data) = v.save_ctxt.get_item_data(item) {
down_cast_data!(fn_data, DefData, item.span);
v.process_formals(body.params, &fn_data.qualname);
v.process_generic_params(ty_params, &fn_data.qualname, item.hir_id());
v.dumper.dump_def(&access_from!(v.save_ctxt, item.def_id), fn_data);
v.dumper.dump_def(&access_from!(v.save_ctxt, item.def_id.def_id), fn_data);
}
for arg in decl.inputs {
@ -373,10 +373,10 @@ impl<'tcx> DumpVisitor<'tcx> {
typ: &'tcx hir::Ty<'tcx>,
expr: &'tcx hir::Expr<'tcx>,
) {
self.nest_typeck_results(item.def_id, |v| {
self.nest_typeck_results(item.def_id.def_id, |v| {
if let Some(var_data) = v.save_ctxt.get_item_data(item) {
down_cast_data!(var_data, DefData, item.span);
v.dumper.dump_def(&access_from!(v.save_ctxt, item.def_id), var_data);
v.dumper.dump_def(&access_from!(v.save_ctxt, item.def_id.def_id), var_data);
}
v.visit_ty(&typ);
v.visit_expr(expr);
@ -473,7 +473,7 @@ impl<'tcx> DumpVisitor<'tcx> {
let span = self.span_from_span(item.ident.span);
let attrs = self.tcx.hir().attrs(item.hir_id());
self.dumper.dump_def(
&access_from!(self.save_ctxt, item.def_id),
&access_from!(self.save_ctxt, item.def_id.def_id),
Def {
kind,
id: id_from_def_id(item.def_id.to_def_id()),
@ -491,7 +491,7 @@ impl<'tcx> DumpVisitor<'tcx> {
);
}
self.nest_typeck_results(item.def_id, |v| {
self.nest_typeck_results(item.def_id.def_id, |v| {
for field in def.fields() {
v.process_struct_field_def(field, item.hir_id());
v.visit_ty(&field.ty);
@ -513,7 +513,7 @@ impl<'tcx> DumpVisitor<'tcx> {
};
down_cast_data!(enum_data, DefData, item.span);
let access = access_from!(self.save_ctxt, item.def_id);
let access = access_from!(self.save_ctxt, item.def_id.def_id);
for variant in enum_definition.variants {
let name = variant.ident.name.to_string();
@ -612,7 +612,7 @@ impl<'tcx> DumpVisitor<'tcx> {
}
let map = self.tcx.hir();
self.nest_typeck_results(item.def_id, |v| {
self.nest_typeck_results(item.def_id.def_id, |v| {
v.visit_ty(&impl_.self_ty);
if let Some(trait_ref) = &impl_.of_trait {
v.process_path(trait_ref.hir_ref_id, &hir::QPath::Resolved(None, &trait_ref.path));
@ -648,7 +648,7 @@ impl<'tcx> DumpVisitor<'tcx> {
methods.iter().map(|i| id_from_def_id(i.id.def_id.to_def_id())).collect();
let attrs = self.tcx.hir().attrs(item.hir_id());
self.dumper.dump_def(
&access_from!(self.save_ctxt, item.def_id),
&access_from!(self.save_ctxt, item.def_id.def_id),
Def {
kind: DefKind::Trait,
id,
@ -710,7 +710,7 @@ impl<'tcx> DumpVisitor<'tcx> {
fn process_mod(&mut self, item: &'tcx hir::Item<'tcx>) {
if let Some(mod_data) = self.save_ctxt.get_item_data(item) {
down_cast_data!(mod_data, DefData, item.span);
self.dumper.dump_def(&access_from!(self.save_ctxt, item.def_id), mod_data);
self.dumper.dump_def(&access_from!(self.save_ctxt, item.def_id.def_id), mod_data);
}
}
@ -980,7 +980,7 @@ impl<'tcx> DumpVisitor<'tcx> {
let body = body.map(|b| self.tcx.hir().body(b).value);
let attrs = self.tcx.hir().attrs(trait_item.hir_id());
self.process_assoc_const(
trait_item.def_id,
trait_item.def_id.def_id,
trait_item.ident,
&ty,
body,
@ -994,7 +994,7 @@ impl<'tcx> DumpVisitor<'tcx> {
self.process_method(
sig,
body,
trait_item.def_id,
trait_item.def_id.def_id,
trait_item.ident,
&trait_item.generics,
trait_item.span,
@ -1050,7 +1050,7 @@ impl<'tcx> DumpVisitor<'tcx> {
let body = self.tcx.hir().body(body);
let attrs = self.tcx.hir().attrs(impl_item.hir_id());
self.process_assoc_const(
impl_item.def_id,
impl_item.def_id.def_id,
impl_item.ident,
&ty,
Some(&body.value),
@ -1062,7 +1062,7 @@ impl<'tcx> DumpVisitor<'tcx> {
self.process_method(
sig,
Some(body),
impl_item.def_id,
impl_item.def_id.def_id,
impl_item.ident,
&impl_item.generics,
impl_item.span,
@ -1136,10 +1136,10 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
hir::ItemKind::Use(path, hir::UseKind::Single) => {
let sub_span = path.segments.last().unwrap().ident.span;
if !self.span.filter_generated(sub_span) {
let access = access_from!(self.save_ctxt, item.def_id);
let access = access_from!(self.save_ctxt, item.def_id.def_id);
let ref_id = self.lookup_def_id(item.hir_id()).map(id_from_def_id);
let span = self.span_from_span(sub_span);
let parent = self.save_ctxt.tcx.local_parent(item.def_id);
let parent = self.save_ctxt.tcx.local_parent(item.def_id.def_id);
self.dumper.import(
&access,
Import {
@ -1157,16 +1157,16 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
}
hir::ItemKind::Use(path, hir::UseKind::Glob) => {
// Make a comma-separated list of names of imported modules.
let names = self.tcx.names_imported_by_glob_use(item.def_id);
let names = self.tcx.names_imported_by_glob_use(item.def_id.def_id);
let names: Vec<_> = names.iter().map(|n| n.to_string()).collect();
// Otherwise it's a span with wrong macro expansion info, which
// we don't want to track anyway, since it's probably macro-internal `use`
if let Some(sub_span) = self.span.sub_span_of_star(item.span) {
if !self.span.filter_generated(item.span) {
let access = access_from!(self.save_ctxt, item.def_id);
let access = access_from!(self.save_ctxt, item.def_id.def_id);
let span = self.span_from_span(sub_span);
let parent = self.save_ctxt.tcx.local_parent(item.def_id);
let parent = self.save_ctxt.tcx.local_parent(item.def_id.def_id);
self.dumper.import(
&access,
Import {
@ -1187,7 +1187,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
let name_span = item.ident.span;
if !self.span.filter_generated(name_span) {
let span = self.span_from_span(name_span);
let parent = self.save_ctxt.tcx.local_parent(item.def_id);
let parent = self.save_ctxt.tcx.local_parent(item.def_id.def_id);
self.dumper.import(
&Access { public: false, reachable: false },
Import {
@ -1235,7 +1235,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
let attrs = self.tcx.hir().attrs(item.hir_id());
self.dumper.dump_def(
&access_from!(self.save_ctxt, item.def_id),
&access_from!(self.save_ctxt, item.def_id.def_id),
Def {
kind: DefKind::Type,
id,
@ -1323,7 +1323,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
}
hir::TyKind::OpaqueDef(item_id, _, _) => {
let item = self.tcx.hir().item(item_id);
self.nest_typeck_results(item_id.def_id, |v| v.visit_item(item));
self.nest_typeck_results(item_id.def_id.def_id, |v| v.visit_item(item));
}
_ => intravisit::walk_ty(self, t),
}
@ -1430,7 +1430,7 @@ impl<'tcx> Visitor<'tcx> for DumpVisitor<'tcx> {
}
fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem<'tcx>) {
let access = access_from!(self.save_ctxt, item.def_id);
let access = access_from!(self.save_ctxt, item.def_id.def_id);
match item.kind {
hir::ForeignItemKind::Fn(decl, _, ref generics) => {

View file

@ -622,7 +622,7 @@ impl<'tcx> SaveContext<'tcx> {
hir::QPath::TypeRelative(..) | hir::QPath::LangItem(..) => {
// #75962: `self.typeck_results` may be different from the `hir_id`'s result.
if self.tcx.has_typeck_results(hir_id.owner.to_def_id()) {
self.tcx.typeck(hir_id.owner).qpath_res(qpath, hir_id)
self.tcx.typeck(hir_id.owner.def_id).qpath_res(qpath, hir_id)
} else {
Res::Err
}
@ -1041,7 +1041,7 @@ fn id_from_hir_id(id: hir::HirId, scx: &SaveContext<'_>) -> rls_data::Id {
// crate (very unlikely to actually happen).
rls_data::Id {
krate: LOCAL_CRATE.as_u32(),
index: id.owner.local_def_index.as_u32() | id.local_id.as_u32().reverse_bits(),
index: id.owner.def_id.local_def_index.as_u32() | id.local_id.as_u32().reverse_bits(),
}
})
}