diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2016-11-22 08:12:02 +1300 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2016-12-22 15:17:05 +1300 |
| commit | eb27b5166e9e35cd315acda6b6db91fe4c220fcd (patch) | |
| tree | 1adc92f33752230ffd93160ad8a32811966fef7d | |
| parent | c53fa9a8983a0195076f436e70be24f449c37afc (diff) | |
| download | rust-eb27b5166e9e35cd315acda6b6db91fe4c220fcd.tar.gz rust-eb27b5166e9e35cd315acda6b6db91fe4c220fcd.zip | |
field signatures
| -rw-r--r-- | src/librustc_save_analysis/data.rs | 1 | ||||
| -rw-r--r-- | src/librustc_save_analysis/dump_visitor.rs | 4 | ||||
| -rw-r--r-- | src/librustc_save_analysis/external_data.rs | 2 | ||||
| -rw-r--r-- | src/librustc_save_analysis/json_api_dumper.rs | 2 | ||||
| -rw-r--r-- | src/librustc_save_analysis/json_dumper.rs | 2 | ||||
| -rw-r--r-- | src/librustc_save_analysis/lib.rs | 34 |
6 files changed, 38 insertions, 7 deletions
diff --git a/src/librustc_save_analysis/data.rs b/src/librustc_save_analysis/data.rs index 42fdb6a4dd7..a9db5a440ef 100644 --- a/src/librustc_save_analysis/data.rs +++ b/src/librustc_save_analysis/data.rs @@ -387,6 +387,7 @@ pub struct VariableData { pub type_value: String, pub visibility: Visibility, pub docs: String, + pub sig: Option<Signature>, } #[derive(Debug, RustcEncodable)] diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index a77527cf8bb..5f61e888ca4 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -372,6 +372,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> { parent: None, visibility: Visibility::Inherited, docs: String::new(), + sig: None, }.lower(self.tcx)); } } @@ -587,6 +588,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> { parent: Some(parent_id), visibility: vis, docs: docs_for_attrs(attrs), + sig: None, }.lower(self.tcx)); } @@ -1072,6 +1074,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> { parent: None, visibility: Visibility::Inherited, docs: String::new(), + sig: None, }.lower(self.tcx)); } } @@ -1521,6 +1524,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, parent: None, visibility: Visibility::Inherited, docs: String::new(), + sig: None, }.lower(self.tcx)); } } diff --git a/src/librustc_save_analysis/external_data.rs b/src/librustc_save_analysis/external_data.rs index d35b1bac78f..81ea681a289 100644 --- a/src/librustc_save_analysis/external_data.rs +++ b/src/librustc_save_analysis/external_data.rs @@ -658,6 +658,7 @@ pub struct VariableData { pub parent: Option<DefId>, pub visibility: Visibility, pub docs: String, + pub sig: Option<Signature>, } impl Lower for data::VariableData { @@ -676,6 +677,7 @@ impl Lower for data::VariableData { parent: self.parent, visibility: self.visibility, docs: self.docs, + sig: self.sig.map(|s| s.lower(tcx)), } } } diff --git a/src/librustc_save_analysis/json_api_dumper.rs b/src/librustc_save_analysis/json_api_dumper.rs index 118d2273c13..b349d15e62f 100644 --- a/src/librustc_save_analysis/json_api_dumper.rs +++ b/src/librustc_save_analysis/json_api_dumper.rs @@ -419,7 +419,7 @@ impl From<VariableData> for Option<Def> { parent: data.parent.map(|id| From::from(id)), decl_id: None, docs: data.docs, - sig: None, + sig: data.sig, }), _ => None, } diff --git a/src/librustc_save_analysis/json_dumper.rs b/src/librustc_save_analysis/json_dumper.rs index 3abb19d5384..795ba1fe0fb 100644 --- a/src/librustc_save_analysis/json_dumper.rs +++ b/src/librustc_save_analysis/json_dumper.rs @@ -379,7 +379,7 @@ impl From<MacroData> for Def { children: vec![], decl_id: None, docs: data.docs, - sig: None, + sig: data.sig, } } } diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 68836d8823e..c2e441e7eba 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -179,6 +179,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { 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) => { @@ -197,6 +198,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { type_value: ty_to_string(&typ), visibility: From::from(&item.vis), docs: docs_for_attrs(&item.attrs), + sig: None, })) } ast::ItemKind::Mod(ref m) => { @@ -287,18 +289,39 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { } } - 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, @@ -307,6 +330,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { type_value: typ, visibility: From::from(&field.vis), docs: docs_for_attrs(&field.attrs), + sig: Some(sig), }) } else { None |
