diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2017-05-11 17:45:27 +1200 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2017-05-11 17:45:27 +1200 |
| commit | 67a0d27c6529de335304b10c6ae6b0eed77bfc79 (patch) | |
| tree | 6cc486b7adfffa096045f75a63adb10b2e4c1267 | |
| parent | bb8d51c2ebe8d89c9cdcf06a9383d6e974efc5b6 (diff) | |
| download | rust-67a0d27c6529de335304b10c6ae6b0eed77bfc79.tar.gz rust-67a0d27c6529de335304b10c6ae6b0eed77bfc79.zip | |
Ensure we walk the root module of the crate
| -rw-r--r-- | src/librustc_save_analysis/data.rs | 2 | ||||
| -rw-r--r-- | src/librustc_save_analysis/dump_visitor.rs | 27 | ||||
| -rw-r--r-- | src/librustc_save_analysis/external_data.rs | 4 | ||||
| -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 | 2 |
6 files changed, 33 insertions, 6 deletions
diff --git a/src/librustc_save_analysis/data.rs b/src/librustc_save_analysis/data.rs index d4ded71a333..cac1a2e3c5a 100644 --- a/src/librustc_save_analysis/data.rs +++ b/src/librustc_save_analysis/data.rs @@ -267,7 +267,7 @@ pub struct ModData { pub items: Vec<NodeId>, pub visibility: Visibility, pub docs: String, - pub sig: Signature, + pub sig: Option<Signature>, pub attributes: Vec<Attribute>, } diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index 763414c1a55..dd022dee78c 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -1211,6 +1211,33 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> { } impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, D> { + fn visit_mod(&mut self, m: &'l ast::Mod, span: Span, id: NodeId) { + // Since we handle explicit modules ourselves in visit_item, this should + // only get called for the root module of a crate. + assert_eq!(id, ast::CRATE_NODE_ID); + + let qualname = format!("::{}", self.tcx.node_path_str(id)); + + let cm = self.tcx.sess.codemap(); + let filename = cm.span_to_filename(span); + self.dumper.mod_data(ModData { + id: id, + name: String::new(), + qualname: qualname, + span: span, + scope: id, + filename: filename, + items: m.items.iter().map(|i| i.id).collect(), + visibility: Visibility::Public, + // TODO Visitor doesn't pass us the attibutes. + docs: String::new(), + sig: None, + // TODO Visitor doesn't pass us the attibutes. + attributes: vec![], + }.lower(self.tcx)); + self.nest_scope(id, |v| visit::walk_mod(v, m)); + } + fn visit_item(&mut self, item: &'l ast::Item) { use syntax::ast::ItemKind::*; self.process_macro_use(item.span, item.id); diff --git a/src/librustc_save_analysis/external_data.rs b/src/librustc_save_analysis/external_data.rs index 6fd2de97767..02441a0587e 100644 --- a/src/librustc_save_analysis/external_data.rs +++ b/src/librustc_save_analysis/external_data.rs @@ -392,7 +392,7 @@ pub struct ModData { pub items: Vec<DefId>, pub visibility: Visibility, pub docs: String, - pub sig: Signature, + pub sig: Option<Signature>, pub attributes: Vec<Attribute>, } @@ -410,7 +410,7 @@ impl Lower for data::ModData { items: self.items.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(), visibility: self.visibility, docs: self.docs, - sig: self.sig.lower(tcx), + sig: self.sig.map(|s| s.lower(tcx)), attributes: self.attributes.lower(tcx), } } diff --git a/src/librustc_save_analysis/json_api_dumper.rs b/src/librustc_save_analysis/json_api_dumper.rs index 41221ad9863..49b14f5eca0 100644 --- a/src/librustc_save_analysis/json_api_dumper.rs +++ b/src/librustc_save_analysis/json_api_dumper.rs @@ -293,7 +293,7 @@ impl Into<Option<Def>> for ModData { parent: None, decl_id: None, docs: self.docs, - sig: Some(self.sig.into()), + sig: self.sig.map(|s| s.into()), attributes: vec![], }), _ => None, diff --git a/src/librustc_save_analysis/json_dumper.rs b/src/librustc_save_analysis/json_dumper.rs index 2d1e12bf0a1..eaa0c0825f0 100644 --- a/src/librustc_save_analysis/json_dumper.rs +++ b/src/librustc_save_analysis/json_dumper.rs @@ -121,7 +121,7 @@ impl<'b, O: DumpOutput + 'b> Dump for JsonDumper<O> { children: data.items.into_iter().map(|id| id_from_def_id(id)).collect(), decl_id: None, docs: data.docs, - sig: Some(data.sig.into()), + sig: data.sig.map(|s| s.into()), attributes: data.attributes.into_iter().map(|a| a.into()).collect(), }; if def.span.file_name.to_str().unwrap() != def.value { diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index fd6898d19d8..9283c6d7b53 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -257,7 +257,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { items: m.items.iter().map(|i| i.id).collect(), visibility: From::from(&item.vis), docs: docs_for_attrs(&item.attrs), - sig: self.sig_base(item), + sig: Some(self.sig_base(item)), attributes: item.attrs.clone(), })) } |
