save-analysis: give better info for Unions
This commit is contained in:
parent
44990e5b14
commit
099f96472f
1 changed files with 28 additions and 26 deletions
|
@ -521,39 +521,41 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
|
||||||
item: &'l ast::Item,
|
item: &'l ast::Item,
|
||||||
def: &'l ast::VariantData,
|
def: &'l ast::VariantData,
|
||||||
ty_params: &'l ast::Generics) {
|
ty_params: &'l ast::Generics) {
|
||||||
|
debug!("process_struct {:?} {:?}", item, item.span);
|
||||||
let name = item.ident.to_string();
|
let name = item.ident.to_string();
|
||||||
let qualname = format!("::{}", self.tcx.node_path_str(item.id));
|
let qualname = format!("::{}", self.tcx.node_path_str(item.id));
|
||||||
|
|
||||||
let sub_span = self.span.sub_span_after_keyword(item.span, keywords::Struct);
|
let (kind, keyword) = match item.node {
|
||||||
let (value, fields) =
|
ast::ItemKind::Struct(_, _) => (DefKind::Struct, keywords::Struct),
|
||||||
if let ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) = item.node
|
ast::ItemKind::Union(_, _) => (DefKind::Union, keywords::Union),
|
||||||
{
|
_ => unreachable!(),
|
||||||
let include_priv_fields = !self.save_ctxt.config.pub_only;
|
};
|
||||||
let fields_str = fields
|
|
||||||
.iter()
|
let sub_span = self.span.sub_span_after_keyword(item.span, keyword);
|
||||||
.enumerate()
|
let (value, fields) = match item.node {
|
||||||
.filter_map(|(i, f)| {
|
ast::ItemKind::Struct(ast::VariantData::Struct(ref fields, _), _) |
|
||||||
if include_priv_fields || f.vis == ast::Visibility::Public {
|
ast::ItemKind::Union(ast::VariantData::Struct(ref fields, _), _) => {
|
||||||
f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
|
let include_priv_fields = !self.save_ctxt.config.pub_only;
|
||||||
} else {
|
let fields_str = fields
|
||||||
None
|
.iter()
|
||||||
}
|
.enumerate()
|
||||||
})
|
.filter_map(|(i, f)| {
|
||||||
.collect::<Vec<_>>()
|
if include_priv_fields || f.vis == ast::Visibility::Public {
|
||||||
.join(", ");
|
f.ident.map(|i| i.to_string()).or_else(|| Some(i.to_string()))
|
||||||
let value = format!("{} {{ {} }}", name, fields_str);
|
} else {
|
||||||
(value, fields.iter().map(|f| ::id_from_node_id(f.id, &self.save_ctxt)).collect())
|
None
|
||||||
} else {
|
}
|
||||||
(String::new(), vec![])
|
})
|
||||||
|
.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) {
|
if !self.span.filter_generated(sub_span, item.span) {
|
||||||
let span = self.span_from_span(sub_span.expect("No span found for struct"));
|
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 {
|
self.dumper.dump_def(item.vis == ast::Visibility::Public, Def {
|
||||||
kind,
|
kind,
|
||||||
id: ::id_from_node_id(item.id, &self.save_ctxt),
|
id: ::id_from_node_id(item.id, &self.save_ctxt),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue