Skip to content

Commit 7429f20

Browse files
Rollup merge of rust-lang#41919 - nrc:save-crate, r=eddyb
Include the crate's root module in save-analysis r? @eddyb
2 parents 5a95a0d + fb7ba47 commit 7429f20

File tree

11 files changed

+40
-13
lines changed

11 files changed

+40
-13
lines changed

src/librustc/lint/context.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1055,7 +1055,7 @@ impl<'a> ast_visit::Visitor<'a> for EarlyContext<'a> {
10551055
run_lints!(self, check_ident, early_passes, sp, id);
10561056
}
10571057

1058-
fn visit_mod(&mut self, m: &'a ast::Mod, s: Span, n: ast::NodeId) {
1058+
fn visit_mod(&mut self, m: &'a ast::Mod, s: Span, _a: &[ast::Attribute], n: ast::NodeId) {
10591059
run_lints!(self, check_mod, early_passes, m, s, n);
10601060
ast_visit::walk_mod(self, m);
10611061
run_lints!(self, check_mod_post, early_passes, m, s, n);

src/librustc_passes/hir_stats.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ impl<'v> hir_visit::Visitor<'v> for StatCollector<'v> {
252252

253253
impl<'v> ast_visit::Visitor<'v> for StatCollector<'v> {
254254

255-
fn visit_mod(&mut self, m: &'v ast::Mod, _s: Span, _n: NodeId) {
255+
fn visit_mod(&mut self, m: &'v ast::Mod, _s: Span, _a: &[ast::Attribute], _n: NodeId) {
256256
self.record("Mod", Id::None, m);
257257
ast_visit::walk_mod(self, m)
258258
}

src/librustc_save_analysis/data.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ pub struct ModData {
267267
pub items: Vec<NodeId>,
268268
pub visibility: Visibility,
269269
pub docs: String,
270-
pub sig: Signature,
270+
pub sig: Option<Signature>,
271271
pub attributes: Vec<Attribute>,
272272
}
273273

src/librustc_save_analysis/dump_visitor.rs

+25
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,31 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
12111211
}
12121212

12131213
impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, D> {
1214+
fn visit_mod(&mut self, m: &'l ast::Mod, span: Span, attrs: &[ast::Attribute], id: NodeId) {
1215+
// Since we handle explicit modules ourselves in visit_item, this should
1216+
// only get called for the root module of a crate.
1217+
assert_eq!(id, ast::CRATE_NODE_ID);
1218+
1219+
let qualname = format!("::{}", self.tcx.node_path_str(id));
1220+
1221+
let cm = self.tcx.sess.codemap();
1222+
let filename = cm.span_to_filename(span);
1223+
self.dumper.mod_data(ModData {
1224+
id: id,
1225+
name: String::new(),
1226+
qualname: qualname,
1227+
span: span,
1228+
scope: id,
1229+
filename: filename,
1230+
items: m.items.iter().map(|i| i.id).collect(),
1231+
visibility: Visibility::Public,
1232+
docs: docs_for_attrs(attrs),
1233+
sig: None,
1234+
attributes: attrs.to_owned(),
1235+
}.lower(self.tcx));
1236+
self.nest_scope(id, |v| visit::walk_mod(v, m));
1237+
}
1238+
12141239
fn visit_item(&mut self, item: &'l ast::Item) {
12151240
use syntax::ast::ItemKind::*;
12161241
self.process_macro_use(item.span, item.id);

src/librustc_save_analysis/external_data.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ pub struct ModData {
392392
pub items: Vec<DefId>,
393393
pub visibility: Visibility,
394394
pub docs: String,
395-
pub sig: Signature,
395+
pub sig: Option<Signature>,
396396
pub attributes: Vec<Attribute>,
397397
}
398398

@@ -410,7 +410,7 @@ impl Lower for data::ModData {
410410
items: self.items.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(),
411411
visibility: self.visibility,
412412
docs: self.docs,
413-
sig: self.sig.lower(tcx),
413+
sig: self.sig.map(|s| s.lower(tcx)),
414414
attributes: self.attributes.lower(tcx),
415415
}
416416
}

src/librustc_save_analysis/json_api_dumper.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ impl Into<Option<Def>> for ModData {
293293
parent: None,
294294
decl_id: None,
295295
docs: self.docs,
296-
sig: Some(self.sig.into()),
296+
sig: self.sig.map(|s| s.into()),
297297
attributes: vec![],
298298
}),
299299
_ => None,

src/librustc_save_analysis/json_dumper.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ impl<'b, O: DumpOutput + 'b> Dump for JsonDumper<O> {
121121
children: data.items.into_iter().map(|id| id_from_def_id(id)).collect(),
122122
decl_id: None,
123123
docs: data.docs,
124-
sig: Some(data.sig.into()),
124+
sig: data.sig.map(|s| s.into()),
125125
attributes: data.attributes.into_iter().map(|a| a.into()).collect(),
126126
};
127127
if def.span.file_name.to_str().unwrap() != def.value {

src/librustc_save_analysis/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
258258
items: m.items.iter().map(|i| i.id).collect(),
259259
visibility: From::from(&item.vis),
260260
docs: docs_for_attrs(&item.attrs),
261-
sig: self.sig_base(item),
261+
sig: Some(self.sig_base(item)),
262262
attributes: item.attrs.clone(),
263263
}))
264264
}

src/libsyntax/util/node_count.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ impl<'ast> Visitor<'ast> for NodeCounter {
3131
self.count += 1;
3232
walk_ident(self, span, ident);
3333
}
34-
fn visit_mod(&mut self, m: &Mod, _s: Span, _n: NodeId) {
34+
fn visit_mod(&mut self, m: &Mod, _s: Span, _a: &[Attribute], _n: NodeId) {
3535
self.count += 1;
3636
walk_mod(self, m)
3737
}

src/libsyntax/visit.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ pub trait Visitor<'ast>: Sized {
5656
fn visit_ident(&mut self, span: Span, ident: Ident) {
5757
walk_ident(self, span, ident);
5858
}
59-
fn visit_mod(&mut self, m: &'ast Mod, _s: Span, _n: NodeId) { walk_mod(self, m) }
59+
fn visit_mod(&mut self, m: &'ast Mod, _s: Span, _attrs: &[Attribute], _n: NodeId) {
60+
walk_mod(self, m);
61+
}
6062
fn visit_foreign_item(&mut self, i: &'ast ForeignItem) { walk_foreign_item(self, i) }
6163
fn visit_global_asm(&mut self, ga: &'ast GlobalAsm) { walk_global_asm(self, ga) }
6264
fn visit_item(&mut self, i: &'ast Item) { walk_item(self, i) }
@@ -172,7 +174,7 @@ pub fn walk_ident<'a, V: Visitor<'a>>(visitor: &mut V, span: Span, ident: Ident)
172174
}
173175

174176
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) {
175-
visitor.visit_mod(&krate.module, krate.span, CRATE_NODE_ID);
177+
visitor.visit_mod(&krate.module, krate.span, &krate.attrs, CRATE_NODE_ID);
176178
walk_list!(visitor, visit_attribute, &krate.attrs);
177179
}
178180

@@ -249,7 +251,7 @@ pub fn walk_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a Item) {
249251
item.id)
250252
}
251253
ItemKind::Mod(ref module) => {
252-
visitor.visit_mod(module, item.span, item.id)
254+
visitor.visit_mod(module, item.span, &item.attrs, item.id)
253255
}
254256
ItemKind::ForeignMod(ref foreign_module) => {
255257
walk_list!(visitor, visit_foreign_item, &foreign_module.items);

src/libsyntax_ext/proc_macro_registrar.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ impl<'a> Visitor<'a> for CollectProcMacros<'a> {
329329
visit::walk_item(self, item);
330330
}
331331

332-
fn visit_mod(&mut self, m: &'a ast::Mod, _s: Span, id: NodeId) {
332+
fn visit_mod(&mut self, m: &'a ast::Mod, _s: Span, _a: &[ast::Attribute], id: NodeId) {
333333
let mut prev_in_root = self.in_root;
334334
if id != ast::CRATE_NODE_ID {
335335
prev_in_root = mem::replace(&mut self.in_root, false);

0 commit comments

Comments
 (0)