Skip to content

Commit

Permalink
save-analysis: give better info for Unions
Browse files Browse the repository at this point in the history
  • Loading branch information
nrc committed Nov 6, 2017
1 parent 44990e5 commit 099f964
Showing 1 changed file with 28 additions and 26 deletions.
54 changes: 28 additions & 26 deletions src/librustc_save_analysis/dump_visitor.rs
Expand Up @@ -521,39 +521,41 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
item: &'l ast::Item,
def: &'l ast::VariantData,
ty_params: &'l ast::Generics) {
debug!("process_struct {:?} {:?}", item, item.span);
let name = item.ident.to_string();
let qualname = format!("::{}", self.tcx.node_path_str(item.id));

let sub_span = self.span.sub_span_after_keyword(item.span, keywords::Struct);
let (value, fields) =
if let ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) = item.node
{
let include_priv_fields = !self.save_ctxt.config.pub_only;
let fields_str = fields
.iter()
.enumerate()
.filter_map(|(i, f)| {
if include_priv_fields || f.vis == ast::Visibility::Public {
f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
} else {
None
}
})
.collect::<Vec<_>>()
.join(", ");
let value = format!("{} {{ {} }}", name, fields_str);
(value, fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
} else {
(String::new(), vec![])
let (kind, keyword) = match item.node {
ast::ItemKind::Struct(_, _) => (DefKind::Struct, keywords::Struct),
ast::ItemKind::Union(_, _) => (DefKind::Union, keywords::Union),
_ => unreachable!(),
};

let sub_span = self.span.sub_span_after_keyword(item.span, keyword);
let (value, fields) = match item.node {
ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) |
ast::ItemKind::Union(ast::VariantData::Struct(ref fields, _), _) => {
let include_priv_fields = !self.save_ctxt.config.pub_only;
let fields_str = fields
.iter()
.enumerate()
.filter_map(|(i, f)| {
if include_priv_fields || f.vis == ast::Visibility::Public {
f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
} else {
None
}
})
.collect::<Vec<_>>()
.join(", ");
let value = format!("{} {{ {} }}", name, fields_str);
(value, fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
}
_ => (String::new(), vec![])
};

if !self.span.filter_generated(sub_span, item.span) {
let span = self.span_from_span(sub_span.expect("No span found for struct"));
let kind = match item.node {
ast::ItemKind::Struct(_, _) => DefKind::Struct,
ast::ItemKind::Union(_, _) => DefKind::Union,
_ => unreachable!(),
};
self.dumper.dump_def(item.vis == ast::Visibility::Public, Def {
kind,
id: ::id_from_node_id(item.id, &self.save_ctxt),
Expand Down

0 comments on commit 099f964

Please sign in to comment.