Skip to content

Commit 099f964

Browse files
committed
save-analysis: give better info for Unions
1 parent 44990e5 commit 099f964

File tree

1 file changed

+28
-26
lines changed

1 file changed

+28
-26
lines changed

src/librustc_save_analysis/dump_visitor.rs

+28-26
Original file line numberDiff line numberDiff line change
@@ -521,39 +521,41 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
521521
item: &'l ast::Item,
522522
def: &'l ast::VariantData,
523523
ty_params: &'l ast::Generics) {
524+
debug!("process_struct {:?} {:?}", item, item.span);
524525
let name = item.ident.to_string();
525526
let qualname = format!("::{}", self.tcx.node_path_str(item.id));
526527

527-
let sub_span = self.span.sub_span_after_keyword(item.span, keywords::Struct);
528-
let (value, fields) =
529-
if let ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) = item.node
530-
{
531-
let include_priv_fields = !self.save_ctxt.config.pub_only;
532-
let fields_str = fields
533-
.iter()
534-
.enumerate()
535-
.filter_map(|(i, f)| {
536-
if include_priv_fields || f.vis == ast::Visibility::Public {
537-
f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
538-
} else {
539-
None
540-
}
541-
})
542-
.collect::<Vec<_>>()
543-
.join(", ");
544-
let value = format!("{} {{ {} }}", name, fields_str);
545-
(value, fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
546-
} else {
547-
(String::new(), vec![])
528+
let (kind, keyword) = match item.node {
529+
ast::ItemKind::Struct(_, _) => (DefKind::Struct, keywords::Struct),
530+
ast::ItemKind::Union(_, _) => (DefKind::Union, keywords::Union),
531+
_ => unreachable!(),
532+
};
533+
534+
let sub_span = self.span.sub_span_after_keyword(item.span, keyword);
535+
let (value, fields) = match item.node {
536+
ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) |
537+
ast::ItemKind::Union(ast::VariantData::Struct(ref fields, _), _) => {
538+
let include_priv_fields = !self.save_ctxt.config.pub_only;
539+
let fields_str = fields
540+
.iter()
541+
.enumerate()
542+
.filter_map(|(i, f)| {
543+
if include_priv_fields || f.vis == ast::Visibility::Public {
544+
f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
545+
} else {
546+
None
547+
}
548+
})
549+
.collect::<Vec<_>>()
550+
.join(", ");
551+
let value = format!("{} {{ {} }}", name, fields_str);
552+
(value, fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
553+
}
554+
_ => (String::new(), vec![])
548555
};
549556

550557
if !self.span.filter_generated(sub_span, item.span) {
551558
let span = self.span_from_span(sub_span.expect("No span found for struct"));
552-
let kind = match item.node {
553-
ast::ItemKind::Struct(_, _) => DefKind::Struct,
554-
ast::ItemKind::Union(_, _) => DefKind::Union,
555-
_ => unreachable!(),
556-
};
557559
self.dumper.dump_def(item.vis == ast::Visibility::Public, Def {
558560
kind,
559561
id: ::id_from_node_id(item.id, &self.save_ctxt),

0 commit comments

Comments
 (0)