type_value: ty_to_string(&typ),
visibility: From::from(&item.vis),
docs: docs_for_attrs(&item.attrs),
+ sig: None,
}))
}
ast::ItemKind::Const(ref typ, ref expr) => {
type_value: ty_to_string(&typ),
visibility: From::from(&item.vis),
docs: docs_for_attrs(&item.attrs),
+ sig: None,
}))
}
ast::ItemKind::Mod(ref m) => {
}
}
- pub fn get_field_data(&self, field: &ast::StructField,
- scope: NodeId) -> Option<VariableData> {
+ pub fn get_field_data(&self,
+ field: &ast::StructField,
+ scope: NodeId)
+ -> Option<VariableData> {
if let Some(ident) = field.ident {
+ let name = ident.to_string();
let qualname = format!("::{}::{}", self.tcx.node_path_str(scope), ident);
- let def_id = self.tcx.map.local_def_id(field.id);
- let typ = self.tcx.item_type(def_id).to_string();
let sub_span = self.span_utils.sub_span_before_token(field.span, token::Colon);
filter!(self.span_utils, sub_span, field.span, None);
+ let def_id = self.tcx.map.local_def_id(field.id);
+ let typ = self.tcx.item_type(def_id).to_string();
+
+ let span = field.span;
+ let text = self.span_utils.snippet(field.span);
+ let ident_start = text.find(&name).unwrap();
+ let ident_end = ident_start + name.len();
+ // TODO refs
+ let sig = Signature {
+ span: span,
+ text: text,
+ ident_start: ident_start,
+ ident_end: ident_end,
+ defs: vec![SigElement {
+ id: def_id,
+ start: ident_start,
+ end: ident_end,
+ }],
+ refs: vec![],
+ };
Some(VariableData {
id: field.id,
kind: VariableKind::Field,
- name: ident.to_string(),
+ name: name,
qualname: qualname,
span: sub_span.unwrap(),
scope: scope,
type_value: typ,
visibility: From::from(&field.vis),
docs: docs_for_attrs(&field.attrs),
+ sig: Some(sig),
})
} else {
None