Importing rustc-1.52.1 Change-Id: I3598a97301b4b2e71385e5a519f6d2ad946548b6
diff --git a/compiler/rustc_save_analysis/src/dump_visitor.rs b/compiler/rustc_save_analysis/src/dump_visitor.rs index 2834e7b..15435df 100644 --- a/compiler/rustc_save_analysis/src/dump_visitor.rs +++ b/compiler/rustc_save_analysis/src/dump_visitor.rs
@@ -301,7 +301,7 @@ fn process_struct_field_def( &mut self, - field: &'tcx hir::StructField<'tcx>, + field: &'tcx hir::FieldDef<'tcx>, parent_id: hir::HirId, ) { let field_data = self.save_ctxt.get_field_data(field, parent_id); @@ -373,14 +373,14 @@ body: hir::BodyId, ) { let map = &self.tcx.hir(); - self.nest_typeck_results(map.local_def_id(item.hir_id), |v| { + self.nest_typeck_results(item.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.process_generic_params(ty_params, &fn_data.qualname, item.hir_id()); - v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.hir_id), fn_data); + v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.hir_id()), fn_data); } for arg in decl.inputs { @@ -401,10 +401,10 @@ typ: &'tcx hir::Ty<'tcx>, expr: &'tcx hir::Expr<'tcx>, ) { - self.nest_typeck_results(self.tcx.hir().local_def_id(item.hir_id), |v| { + self.nest_typeck_results(item.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, item.hir_id), var_data); + v.dumper.dump_def(&access_from!(v.save_ctxt, item, item.hir_id()), var_data); } v.visit_ty(&typ); v.visit_expr(expr); @@ -465,10 +465,7 @@ ) { debug!("process_struct {:?} {:?}", item, item.span); let name = item.ident.to_string(); - let qualname = format!( - "::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.hir_id).to_def_id()) - ); + let qualname = format!("::{}", self.tcx.def_path_str(item.def_id.to_def_id())); let kind = match item.kind { hir::ItemKind::Struct(_, _) => DefKind::Struct, @@ -499,11 +496,12 @@ if !self.span.filter_generated(item.ident.span) { 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, item.hir_id), + &access_from!(self.save_ctxt, item, item.hir_id()), Def { kind, - id: id_from_hir_id(item.hir_id, &self.save_ctxt), + id: id_from_def_id(item.def_id.to_def_id()), span, name, qualname: qualname.clone(), @@ -511,20 +509,20 @@ parent: None, children: fields, decl_id: None, - docs: self.save_ctxt.docs_for_attrs(&item.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: sig::item_signature(item, &self.save_ctxt), - attributes: lower_attributes(item.attrs.to_vec(), &self.save_ctxt), + attributes: lower_attributes(attrs.to_vec(), &self.save_ctxt), }, ); } - self.nest_typeck_results(self.tcx.hir().local_def_id(item.hir_id), |v| { + self.nest_typeck_results(item.def_id, |v| { for field in def.fields() { - v.process_struct_field_def(field, item.hir_id); + v.process_struct_field_def(field, item.hir_id()); v.visit_ty(&field.ty); } - v.process_generic_params(ty_params, &qualname, item.hir_id); + v.process_generic_params(ty_params, &qualname, item.hir_id()); }); } @@ -541,7 +539,7 @@ }; down_cast_data!(enum_data, DefData, item.span); - let access = access_from!(self.save_ctxt, item, item.hir_id); + let access = access_from!(self.save_ctxt, item, item.hir_id()); for variant in enum_definition.variants { let name = variant.ident.name.to_string(); @@ -556,7 +554,8 @@ if !self.span.filter_generated(name_span) { let span = self.span_from_span(name_span); let id = id_from_hir_id(variant.id, &self.save_ctxt); - let parent = Some(id_from_hir_id(item.hir_id, &self.save_ctxt)); + let parent = Some(id_from_def_id(item.def_id.to_def_id())); + let attrs = self.tcx.hir().attrs(variant.id); self.dumper.dump_def( &access, @@ -570,12 +569,9 @@ parent, children: vec![], decl_id: None, - docs: self.save_ctxt.docs_for_attrs(&variant.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: sig::variant_signature(variant, &self.save_ctxt), - attributes: lower_attributes( - variant.attrs.to_vec(), - &self.save_ctxt, - ), + attributes: lower_attributes(attrs.to_vec(), &self.save_ctxt), }, ); } @@ -596,7 +592,8 @@ if !self.span.filter_generated(name_span) { let span = self.span_from_span(name_span); let id = id_from_hir_id(variant.id, &self.save_ctxt); - let parent = Some(id_from_hir_id(item.hir_id, &self.save_ctxt)); + let parent = Some(id_from_def_id(item.def_id.to_def_id())); + let attrs = self.tcx.hir().attrs(variant.id); self.dumper.dump_def( &access, @@ -610,12 +607,9 @@ parent, children: vec![], decl_id: None, - docs: self.save_ctxt.docs_for_attrs(&variant.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: sig::variant_signature(variant, &self.save_ctxt), - attributes: lower_attributes( - variant.attrs.to_vec(), - &self.save_ctxt, - ), + attributes: lower_attributes(attrs.to_vec(), &self.save_ctxt), }, ); } @@ -627,7 +621,7 @@ self.visit_ty(field.ty); } } - self.process_generic_params(ty_params, &enum_data.qualname, item.hir_id); + self.process_generic_params(ty_params, &enum_data.qualname, item.hir_id()); self.dumper.dump_def(&access, enum_data); } @@ -644,17 +638,14 @@ } let map = &self.tcx.hir(); - self.nest_typeck_results(map.local_def_id(item.hir_id), |v| { + self.nest_typeck_results(item.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)); } - v.process_generic_params(&impl_.generics, "", item.hir_id); + v.process_generic_params(&impl_.generics, "", item.hir_id()); for impl_item in impl_.items { - v.process_impl_item( - map.impl_item(impl_item.id), - map.local_def_id(item.hir_id).to_def_id(), - ); + v.process_impl_item(map.impl_item(impl_item.id), item.def_id.to_def_id()); } }); } @@ -667,10 +658,7 @@ methods: &'tcx [hir::TraitItemRef], ) { let name = item.ident.to_string(); - let qualname = format!( - "::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.hir_id).to_def_id()) - ); + let qualname = format!("::{}", self.tcx.def_path_str(item.def_id.to_def_id())); let mut val = name.clone(); if !generics.params.is_empty() { val.push_str(&generic_params_to_string(generics.params)); @@ -680,12 +668,13 @@ val.push_str(&bounds_to_string(trait_refs)); } if !self.span.filter_generated(item.ident.span) { - let id = id_from_hir_id(item.hir_id, &self.save_ctxt); + let id = id_from_def_id(item.def_id.to_def_id()); let span = self.span_from_span(item.ident.span); let children = - methods.iter().map(|i| id_from_hir_id(i.id.hir_id, &self.save_ctxt)).collect(); + 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, item.hir_id), + &access_from!(self.save_ctxt, item, item.hir_id()), Def { kind: DefKind::Trait, id, @@ -696,9 +685,9 @@ parent: None, children, decl_id: None, - docs: self.save_ctxt.docs_for_attrs(&item.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: sig::item_signature(item, &self.save_ctxt), - attributes: lower_attributes(item.attrs.to_vec(), &self.save_ctxt), + attributes: lower_attributes(attrs.to_vec(), &self.save_ctxt), }, ); } @@ -729,20 +718,17 @@ kind: RelationKind::SuperTrait, span, from: id_from_def_id(id), - to: id_from_hir_id(item.hir_id, &self.save_ctxt), + to: id_from_def_id(item.def_id.to_def_id()), }); } } } // walk generics and methods - self.process_generic_params(generics, &qualname, item.hir_id); + self.process_generic_params(generics, &qualname, item.hir_id()); for method in methods { let map = &self.tcx.hir(); - self.process_trait_item( - map.trait_item(method.id), - map.local_def_id(item.hir_id).to_def_id(), - ) + self.process_trait_item(map.trait_item(method.id), item.def_id.to_def_id()) } } @@ -750,7 +736,7 @@ 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, item.hir_id), mod_data); + self.dumper.dump_def(&access_from!(self.save_ctxt, item, item.hir_id()), mod_data); } } @@ -807,7 +793,7 @@ &mut self, ex: &'tcx hir::Expr<'tcx>, path: &'tcx hir::QPath<'tcx>, - fields: &'tcx [hir::Field<'tcx>], + fields: &'tcx [hir::ExprField<'tcx>], variant: &'tcx ty::VariantDef, rest: Option<&'tcx hir::Expr<'tcx>>, ) { @@ -1010,14 +996,15 @@ hir::TraitItemKind::Const(ref ty, body) => { let body = body.map(|b| &self.tcx.hir().body(b).value); let respan = respan(vis_span, hir::VisibilityKind::Public); + let attrs = self.tcx.hir().attrs(trait_item.hir_id()); self.process_assoc_const( - trait_item.hir_id, + trait_item.hir_id(), trait_item.ident, &ty, body, trait_id, &respan, - &trait_item.attrs, + attrs, ); } hir::TraitItemKind::Fn(ref sig, ref trait_fn) => { @@ -1027,7 +1014,7 @@ self.process_method( sig, body, - trait_item.hir_id, + trait_item.hir_id(), trait_item.ident, &trait_item.generics, &respan, @@ -1037,15 +1024,13 @@ hir::TraitItemKind::Type(ref bounds, ref default_ty) => { // FIXME do something with _bounds (for type refs) let name = trait_item.ident.name.to_string(); - let qualname = format!( - "::{}", - self.tcx - .def_path_str(self.tcx.hir().local_def_id(trait_item.hir_id).to_def_id()) - ); + let qualname = + format!("::{}", self.tcx.def_path_str(trait_item.def_id.to_def_id())); if !self.span.filter_generated(trait_item.ident.span) { let span = self.span_from_span(trait_item.ident.span); - let id = id_from_hir_id(trait_item.hir_id, &self.save_ctxt); + let id = id_from_def_id(trait_item.def_id.to_def_id()); + let attrs = self.tcx.hir().attrs(trait_item.hir_id()); self.dumper.dump_def( &Access { public: true, reachable: true }, @@ -1059,18 +1044,15 @@ parent: Some(id_from_def_id(trait_id)), children: vec![], decl_id: None, - docs: self.save_ctxt.docs_for_attrs(&trait_item.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: sig::assoc_type_signature( - trait_item.hir_id, + trait_item.hir_id(), trait_item.ident, Some(bounds), default_ty.as_ref().map(|ty| &**ty), &self.save_ctxt, ), - attributes: lower_attributes( - trait_item.attrs.to_vec(), - &self.save_ctxt, - ), + attributes: lower_attributes(attrs.to_vec(), &self.save_ctxt), }, ); } @@ -1087,21 +1069,22 @@ match impl_item.kind { hir::ImplItemKind::Const(ref ty, body) => { let body = self.tcx.hir().body(body); + let attrs = self.tcx.hir().attrs(impl_item.hir_id()); self.process_assoc_const( - impl_item.hir_id, + impl_item.hir_id(), impl_item.ident, &ty, Some(&body.value), impl_id, &impl_item.vis, - &impl_item.attrs, + attrs, ); } hir::ImplItemKind::Fn(ref sig, body) => { self.process_method( sig, Some(body), - impl_item.hir_id, + impl_item.hir_id(), impl_item.ident, &impl_item.generics, &impl_item.vis, @@ -1130,9 +1113,10 @@ .module .item_ids .iter() - .map(|i| id_from_hir_id(i.id, &self.save_ctxt)) + .map(|i| id_from_def_id(i.def_id.to_def_id())) .collect(); let span = self.span_from_span(krate.item.span); + let attrs = self.tcx.hir().attrs(id); self.dumper.dump_def( &Access { public: true, reachable: true }, @@ -1146,9 +1130,9 @@ children, parent: None, decl_id: None, - docs: self.save_ctxt.docs_for_attrs(krate.item.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: None, - attributes: lower_attributes(krate.item.attrs.to_owned(), &self.save_ctxt), + attributes: lower_attributes(attrs.to_owned(), &self.save_ctxt), }, ); intravisit::walk_crate(self, krate); @@ -1179,16 +1163,11 @@ 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, item.hir_id); - let ref_id = self.lookup_def_id(item.hir_id).map(id_from_def_id); + let access = access_from!(self.save_ctxt, item, item.hir_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 - .hir() - .opt_local_def_id(item.hir_id) - .and_then(|id| self.save_ctxt.tcx.parent(id.to_def_id())) - .map(id_from_def_id); + let parent = + self.save_ctxt.tcx.parent(item.def_id.to_def_id()).map(id_from_def_id); self.dumper.import( &access, Import { @@ -1206,23 +1185,17 @@ } hir::ItemKind::Use(path, hir::UseKind::Glob) => { // Make a comma-separated list of names of imported modules. - let def_id = self.tcx.hir().local_def_id(item.hir_id); - let names = self.tcx.names_imported_by_glob_use(def_id); + let names = self.tcx.names_imported_by_glob_use(item.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, item.hir_id); + let access = access_from!(self.save_ctxt, item, item.hir_id()); let span = self.span_from_span(sub_span); - let parent = self - .save_ctxt - .tcx - .hir() - .opt_local_def_id(item.hir_id) - .and_then(|id| self.save_ctxt.tcx.parent(id.to_def_id())) - .map(id_from_def_id); + let parent = + self.save_ctxt.tcx.parent(item.def_id.to_def_id()).map(id_from_def_id); self.dumper.import( &access, Import { @@ -1243,13 +1216,8 @@ 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 - .hir() - .opt_local_def_id(item.hir_id) - .and_then(|id| self.save_ctxt.tcx.parent(id.to_def_id())) - .map(id_from_def_id); + let parent = + self.save_ctxt.tcx.parent(item.def_id.to_def_id()).map(id_from_def_id); self.dumper.import( &Access { public: false, reachable: false }, Import { @@ -1286,20 +1254,18 @@ } hir::ItemKind::Mod(ref m) => { self.process_mod(item); - intravisit::walk_mod(self, m, item.hir_id); + intravisit::walk_mod(self, m, item.hir_id()); } hir::ItemKind::TyAlias(ty, ref generics) => { - let qualname = format!( - "::{}", - self.tcx.def_path_str(self.tcx.hir().local_def_id(item.hir_id).to_def_id()) - ); + let qualname = format!("::{}", self.tcx.def_path_str(item.def_id.to_def_id())); let value = ty_to_string(&ty); if !self.span.filter_generated(item.ident.span) { let span = self.span_from_span(item.ident.span); - let id = id_from_hir_id(item.hir_id, &self.save_ctxt); + let id = id_from_def_id(item.def_id.to_def_id()); + let attrs = self.tcx.hir().attrs(item.hir_id()); self.dumper.dump_def( - &access_from!(self.save_ctxt, item, item.hir_id), + &access_from!(self.save_ctxt, item, item.hir_id()), Def { kind: DefKind::Type, id, @@ -1310,15 +1276,15 @@ parent: None, children: vec![], decl_id: None, - docs: self.save_ctxt.docs_for_attrs(&item.attrs), + docs: self.save_ctxt.docs_for_attrs(attrs), sig: sig::item_signature(item, &self.save_ctxt), - attributes: lower_attributes(item.attrs.to_vec(), &self.save_ctxt), + attributes: lower_attributes(attrs.to_vec(), &self.save_ctxt), }, ); } self.visit_ty(ty); - self.process_generic_params(generics, &qualname, item.hir_id); + self.process_generic_params(generics, &qualname, item.hir_id()); } _ => intravisit::walk_item(self, item), } @@ -1382,10 +1348,8 @@ }); } hir::TyKind::OpaqueDef(item_id, _) => { - let item = self.tcx.hir().item(item_id.id); - self.nest_typeck_results(self.tcx.hir().local_def_id(item_id.id), |v| { - v.visit_item(item) - }); + let item = self.tcx.hir().item(item_id); + self.nest_typeck_results(item_id.def_id, |v| v.visit_item(item)); } _ => intravisit::walk_ty(self, t), } @@ -1485,14 +1449,14 @@ } fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem<'tcx>) { - let access = access_from!(self.save_ctxt, item, item.hir_id); + let access = access_from!(self.save_ctxt, item, item.hir_id()); match item.kind { hir::ForeignItemKind::Fn(decl, _, ref generics) => { if let Some(fn_data) = self.save_ctxt.get_extern_item_data(item) { down_cast_data!(fn_data, DefData, item.span); - self.process_generic_params(generics, &fn_data.qualname, item.hir_id); + self.process_generic_params(generics, &fn_data.qualname, item.hir_id()); self.dumper.dump_def(&access, fn_data); }
diff --git a/compiler/rustc_save_analysis/src/lib.rs b/compiler/rustc_save_analysis/src/lib.rs index 1291233..2acae29 100644 --- a/compiler/rustc_save_analysis/src/lib.rs +++ b/compiler/rustc_save_analysis/src/lib.rs
@@ -137,8 +137,9 @@ } pub fn get_extern_item_data(&self, item: &hir::ForeignItem<'_>) -> Option<Data> { - let def_id = self.tcx.hir().local_def_id(item.hir_id).to_def_id(); + let def_id = item.def_id.to_def_id(); let qualname = format!("::{}", self.tcx.def_path_str(def_id)); + let attrs = self.tcx.hir().attrs(item.hir_id()); match item.kind { hir::ForeignItemKind::Fn(ref decl, arg_names, ref generics) => { filter!(self.span_utils, item.ident.span); @@ -156,7 +157,7 @@ unsafety: hir::Unsafety::Unsafe, // functions in extern block cannot be const constness: hir::Constness::NotConst, - abi: self.tcx.hir().get_foreign_abi(item.hir_id), + abi: self.tcx.hir().get_foreign_abi(item.hir_id()), // functions in extern block cannot be async asyncness: hir::IsAsync::NotAsync, }, @@ -169,9 +170,9 @@ parent: None, children: vec![], decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::foreign_item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } hir::ForeignItemKind::Static(ref ty, _) => { @@ -190,9 +191,9 @@ parent: None, children: vec![], decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::foreign_item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } // FIXME(plietar): needs a new DefKind in rls-data @@ -201,7 +202,8 @@ } pub fn get_item_data(&self, item: &hir::Item<'_>) -> Option<Data> { - let def_id = self.tcx.hir().local_def_id(item.hir_id).to_def_id(); + let def_id = item.def_id.to_def_id(); + let attrs = self.tcx.hir().attrs(item.hir_id()); match item.kind { hir::ItemKind::Fn(ref sig, ref generics, _) => { let qualname = format!("::{}", self.tcx.def_path_str(def_id)); @@ -224,9 +226,9 @@ parent: None, children: vec![], decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } hir::ItemKind::Static(ref typ, ..) => { @@ -247,9 +249,9 @@ parent: None, children: vec![], decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } hir::ItemKind::Const(ref typ, _) => { @@ -269,9 +271,9 @@ parent: None, children: vec![], decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } hir::ItemKind::Mod(ref m) => { @@ -290,11 +292,15 @@ span: self.span_from_span(item.ident.span), value: filename.to_string(), parent: None, - children: m.item_ids.iter().map(|i| id_from_hir_id(i.id, self)).collect(), + children: m + .item_ids + .iter() + .map(|i| id_from_def_id(i.def_id.to_def_id())) + .collect(), decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } hir::ItemKind::Enum(ref def, ref generics) => { @@ -313,9 +319,9 @@ parent: None, children: def.variants.iter().map(|v| id_from_hir_id(v.id, self)).collect(), decl_id: None, - docs: self.docs_for_attrs(&item.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::item_signature(item, self), - attributes: lower_attributes(item.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), })) } hir::ItemKind::Impl(hir::Impl { ref of_trait, ref self_ty, ref items, .. }) => { @@ -354,7 +360,7 @@ parent: None, children: items .iter() - .map(|i| id_from_hir_id(i.id.hir_id, self)) + .map(|i| id_from_def_id(i.id.def_id.to_def_id())) .collect(), docs: String::new(), sig: None, @@ -373,7 +379,7 @@ } } - pub fn get_field_data(&self, field: &hir::StructField<'_>, scope: hir::HirId) -> Option<Def> { + pub fn get_field_data(&self, field: &hir::FieldDef<'_>, scope: hir::HirId) -> Option<Def> { let name = field.ident.to_string(); let scope_def_id = self.tcx.hir().local_def_id(scope).to_def_id(); let qualname = format!("::{}::{}", self.tcx.def_path_str(scope_def_id), field.ident); @@ -383,6 +389,7 @@ let id = id_from_def_id(field_def_id); let span = self.span_from_span(field.ident.span); + let attrs = self.tcx.hir().attrs(field.hir_id); Some(Def { kind: DefKind::Field, @@ -394,9 +401,9 @@ parent: Some(id_from_def_id(scope_def_id)), children: vec![], decl_id: None, - docs: self.docs_for_attrs(&field.attrs), + docs: self.docs_for_attrs(attrs), sig: sig::field_signature(field, self), - attributes: lower_attributes(field.attrs.to_vec(), self), + attributes: lower_attributes(attrs.to_vec(), self), }) } @@ -420,9 +427,9 @@ let trait_id = self.tcx.trait_id_of_impl(impl_id); let mut docs = String::new(); let mut attrs = vec![]; - if let Some(Node::ImplItem(item)) = hir.find(hir_id) { - docs = self.docs_for_attrs(&item.attrs); - attrs = item.attrs.to_vec(); + if let Some(Node::ImplItem(_)) = hir.find(hir_id) { + attrs = self.tcx.hir().attrs(hir_id).to_vec(); + docs = self.docs_for_attrs(&attrs); } let mut decl_id = None; @@ -466,9 +473,9 @@ let mut docs = String::new(); let mut attrs = vec![]; - if let Some(Node::TraitItem(item)) = self.tcx.hir().find(hir_id) { - docs = self.docs_for_attrs(&item.attrs); - attrs = item.attrs.to_vec(); + if let Some(Node::TraitItem(_)) = self.tcx.hir().find(hir_id) { + attrs = self.tcx.hir().attrs(hir_id).to_vec(); + docs = self.docs_for_attrs(&attrs); } ( @@ -762,7 +769,7 @@ pub fn get_field_ref_data( &self, - field_ref: &hir::Field<'_>, + field_ref: &hir::ExprField<'_>, variant: &ty::VariantDef, ) -> Option<Ref> { filter!(self.span_utils, field_ref.ident.span);
diff --git a/compiler/rustc_save_analysis/src/sig.rs b/compiler/rustc_save_analysis/src/sig.rs index 8ada7e3..53150a9 100644 --- a/compiler/rustc_save_analysis/src/sig.rs +++ b/compiler/rustc_save_analysis/src/sig.rs
@@ -55,7 +55,7 @@ /// Signature for a struct or tuple field declaration. /// Does not include a trailing comma. -pub fn field_signature(field: &hir::StructField<'_>, scx: &SaveContext<'_>) -> Option<Signature> { +pub fn field_signature(field: &hir::FieldDef<'_>, scx: &SaveContext<'_>) -> Option<Signature> { if !scx.config.signatures { return None; } @@ -317,8 +317,8 @@ Ok(replace_text(nested_ty, text)) } hir::TyKind::OpaqueDef(item_id, _) => { - let item = scx.tcx.hir().item(item_id.id); - item.make(offset, Some(item_id.id), scx) + let item = scx.tcx.hir().item(item_id); + item.make(offset, Some(item_id.hir_id()), scx) } hir::TyKind::Typeof(_) | hir::TyKind::Infer | hir::TyKind::Err => Err("Ty"), } @@ -327,7 +327,7 @@ impl<'hir> Sig for hir::Item<'hir> { fn make(&self, offset: usize, _parent_id: Option<hir::HirId>, scx: &SaveContext<'_>) -> Result { - let id = Some(self.hir_id); + let id = Some(self.hir_id()); match self.kind { hir::ItemKind::Static(ref ty, m, ref body) => { @@ -337,7 +337,7 @@ } let name = self.ident.to_string(); let defs = vec![SigElement { - id: id_from_hir_id(self.hir_id, scx), + id: id_from_def_id(self.def_id.to_def_id()), start: offset + text.len(), end: offset + text.len() + name.len(), }]; @@ -359,7 +359,7 @@ let mut text = "const ".to_owned(); let name = self.ident.to_string(); let defs = vec![SigElement { - id: id_from_hir_id(self.hir_id, scx), + id: id_from_def_id(self.def_id.to_def_id()), start: offset + text.len(), end: offset + text.len() + name.len(), }]; @@ -391,7 +391,7 @@ text.push_str("fn "); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; sig.text.push('('); for i in decl.inputs { @@ -420,7 +420,7 @@ let mut text = "mod ".to_owned(); let name = self.ident.to_string(); let defs = vec![SigElement { - id: id_from_hir_id(self.hir_id, scx), + id: id_from_def_id(self.def_id.to_def_id()), start: offset + text.len(), end: offset + text.len() + name.len(), }]; @@ -433,7 +433,7 @@ hir::ItemKind::TyAlias(ref ty, ref generics) => { let text = "type ".to_owned(); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; sig.text.push_str(" = "); let ty = ty.make(offset + sig.text.len(), id, scx)?; @@ -445,21 +445,21 @@ hir::ItemKind::Enum(_, ref generics) => { let text = "enum ".to_owned(); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; sig.text.push_str(" {}"); Ok(sig) } hir::ItemKind::Struct(_, ref generics) => { let text = "struct ".to_owned(); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; sig.text.push_str(" {}"); Ok(sig) } hir::ItemKind::Union(_, ref generics) => { let text = "union ".to_owned(); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; sig.text.push_str(" {}"); Ok(sig) } @@ -475,7 +475,7 @@ } text.push_str("trait "); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; if !bounds.is_empty() { sig.text.push_str(": "); @@ -490,7 +490,7 @@ let mut text = String::new(); text.push_str("trait "); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; if !bounds.is_empty() { sig.text.push_str(" = "); @@ -655,7 +655,7 @@ } } -impl<'hir> Sig for hir::StructField<'hir> { +impl<'hir> Sig for hir::FieldDef<'hir> { fn make(&self, offset: usize, _parent_id: Option<hir::HirId>, scx: &SaveContext<'_>) -> Result { let mut text = String::new(); @@ -736,14 +736,14 @@ impl<'hir> Sig for hir::ForeignItem<'hir> { fn make(&self, offset: usize, _parent_id: Option<hir::HirId>, scx: &SaveContext<'_>) -> Result { - let id = Some(self.hir_id); + let id = Some(self.hir_id()); match self.kind { hir::ForeignItemKind::Fn(decl, _, ref generics) => { let mut text = String::new(); text.push_str("fn "); let mut sig = - name_and_generics(text, offset, generics, self.hir_id, self.ident, scx)?; + name_and_generics(text, offset, generics, self.hir_id(), self.ident, scx)?; sig.text.push('('); for i in decl.inputs { @@ -774,7 +774,7 @@ } let name = self.ident.to_string(); let defs = vec![SigElement { - id: id_from_hir_id(self.hir_id, scx), + id: id_from_def_id(self.def_id.to_def_id()), start: offset + text.len(), end: offset + text.len() + name.len(), }]; @@ -790,7 +790,7 @@ let mut text = "type ".to_owned(); let name = self.ident.to_string(); let defs = vec![SigElement { - id: id_from_hir_id(self.hir_id, scx), + id: id_from_def_id(self.def_id.to_def_id()), start: offset + text.len(), end: offset + text.len() + name.len(), }];