Skip to content

Commit a0a9877

Browse files
committed
save-analysis: attempt number 2 at a JSON version
1 parent e37f859 commit a0a9877

File tree

7 files changed

+423
-61
lines changed

7 files changed

+423
-61
lines changed

src/librustc_save_analysis/csv_dumper.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ impl<'b, W: Write + 'b> Dump for CsvDumper<'b, W> {
331331
self.record("type_ref", data.span, values);
332332
}
333333

334-
fn typedef(&mut self, data: TypedefData) {
334+
fn typedef(&mut self, data: TypeDefData) {
335335
let id = data.id.index.as_u32().to_string();
336336
let values = make_values_str(&[
337337
("id", &id),

src/librustc_save_analysis/data.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ pub enum Data {
6262
/// Data for a tuple variant.
6363
TupleVariantData(TupleVariantData),
6464
/// Data for a typedef.
65-
TypeDefData(TypedefData),
65+
TypeDefData(TypeDefData),
6666
/// Data for a reference to a type or trait.
6767
TypeRefData(TypeRefData),
6868
/// Data for a use statement.
@@ -97,6 +97,7 @@ pub struct ExternalCrateData {
9797
#[derive(Clone, Debug, RustcEncodable)]
9898
pub struct EnumData {
9999
pub id: NodeId,
100+
pub name: String,
100101
pub value: String,
101102
pub qualname: String,
102103
pub span: Span,
@@ -131,6 +132,7 @@ pub struct FunctionData {
131132
pub declaration: Option<DefId>,
132133
pub span: Span,
133134
pub scope: NodeId,
135+
pub value: String,
134136
}
135137

136138
/// Data about a function call.
@@ -205,9 +207,11 @@ pub struct MethodCallData {
205207
#[derive(Clone, Debug, RustcEncodable)]
206208
pub struct MethodData {
207209
pub id: NodeId,
210+
pub name: String,
208211
pub qualname: String,
209212
pub span: Span,
210213
pub scope: NodeId,
214+
pub value: String,
211215
}
212216

213217
/// Data for modules.
@@ -233,6 +237,7 @@ pub struct ModRefData {
233237
#[derive(Debug, RustcEncodable)]
234238
pub struct StructData {
235239
pub span: Span,
240+
pub name: String,
236241
pub id: NodeId,
237242
pub ctor_id: NodeId,
238243
pub qualname: String,
@@ -243,6 +248,7 @@ pub struct StructData {
243248
#[derive(Debug, RustcEncodable)]
244249
pub struct StructVariantData {
245250
pub span: Span,
251+
pub name: String,
246252
pub id: NodeId,
247253
pub qualname: String,
248254
pub type_value: String,
@@ -254,6 +260,7 @@ pub struct StructVariantData {
254260
pub struct TraitData {
255261
pub span: Span,
256262
pub id: NodeId,
263+
pub name: String,
257264
pub qualname: String,
258265
pub scope: NodeId,
259266
pub value: String
@@ -272,8 +279,9 @@ pub struct TupleVariantData {
272279

273280
/// Data for a typedef.
274281
#[derive(Debug, RustcEncodable)]
275-
pub struct TypedefData {
282+
pub struct TypeDefData {
276283
pub id: NodeId,
284+
pub name: String,
277285
pub span: Span,
278286
pub qualname: String,
279287
pub value: String,

src/librustc_save_analysis/dump.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub trait Dump {
3030
fn trait_data(&mut self, TraitData) {}
3131
fn tuple_variant(&mut self, TupleVariantData) {}
3232
fn type_ref(&mut self, TypeRefData) {}
33-
fn typedef(&mut self, TypedefData) {}
33+
fn typedef(&mut self, TypeDefData) {}
3434
fn use_data(&mut self, UseData) {}
3535
fn use_glob(&mut self, UseGlobData) {}
3636
fn variable(&mut self, VariableData) {}

src/librustc_save_analysis/dump_visitor.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -397,9 +397,11 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
397397
if !self.span.filter_generated(Some(method_data.span), span) {
398398
self.dumper.method(MethodData {
399399
id: method_data.id,
400+
name: method_data.name,
400401
span: method_data.span,
401402
scope: method_data.scope,
402403
qualname: method_data.qualname.clone(),
404+
value: String::new(), // TODO
403405
}.lower(self.tcx));
404406
}
405407
}
@@ -455,16 +457,18 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
455457
let param_sub_spans = self.span.spans_for_ty_params(full_span,
456458
(generics.ty_params.len() as isize));
457459
for (param, param_ss) in generics.ty_params.iter().zip(param_sub_spans) {
460+
let name = escape(self.span.snippet(param_ss));
458461
// Append $id to name to make sure each one is unique
459-
let name = format!("{}::{}${}",
460-
prefix,
461-
escape(self.span.snippet(param_ss)),
462-
id);
462+
let qualname = format!("{}::{}${}",
463+
prefix,
464+
name,
465+
id);
463466
if !self.span.filter_generated(Some(param_ss), full_span) {
464-
self.dumper.typedef(TypedefData {
467+
self.dumper.typedef(TypeDefData {
465468
span: param_ss,
469+
name: name,
466470
id: param.id,
467-
qualname: name,
471+
qualname: qualname,
468472
value: String::new()
469473
}.lower(self.tcx));
470474
}
@@ -548,6 +552,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
548552
self.dumper.struct_data(StructData {
549553
span: sub_span.expect("No span found for struct"),
550554
id: item.id,
555+
name: item.ident.to_string(),
551556
ctor_id: def.id(),
552557
qualname: qualname.clone(),
553558
scope: self.cur_scope,
@@ -580,10 +585,10 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
580585
}
581586

582587
for variant in &enum_definition.variants {
583-
let name = &variant.node.name.name.as_str();
588+
let name = variant.node.name.name.to_string();
584589
let mut qualname = enum_data.qualname.clone();
585590
qualname.push_str("::");
586-
qualname.push_str(name);
591+
qualname.push_str(&name);
587592
let val = self.span.snippet(variant.span);
588593

589594
match variant.node.data {
@@ -593,6 +598,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
593598
self.dumper.struct_variant(StructVariantData {
594599
span: sub_span.expect("No span found for struct variant"),
595600
id: variant.node.data.id(),
601+
name: name,
596602
qualname: qualname,
597603
type_value: enum_data.qualname.clone(),
598604
value: val,
@@ -679,6 +685,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
679685
self.dumper.trait_data(TraitData {
680686
span: sub_span.expect("No span found for trait"),
681687
id: item.id,
688+
name: item.ident.to_string(),
682689
qualname: qualname.clone(),
683690
scope: self.cur_scope,
684691
value: val
@@ -1107,8 +1114,9 @@ impl<'v, 'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'v> for DumpVisitor<'l, 'tcx,
11071114
let value = ty_to_string(&ty);
11081115
let sub_span = self.span.sub_span_after_keyword(item.span, keywords::Type);
11091116
if !self.span.filter_generated(sub_span, item.span) {
1110-
self.dumper.typedef(TypedefData {
1117+
self.dumper.typedef(TypeDefData {
11111118
span: sub_span.expect("No span found for typedef"),
1119+
name: item.ident.to_string(),
11121120
id: item.id,
11131121
qualname: qualname.clone(),
11141122
value: value

src/librustc_save_analysis/external_data.rs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ impl Lower for data::CratePreludeData {
8686
pub struct EnumData {
8787
pub id: DefId,
8888
pub value: String,
89+
pub name: String,
8990
pub qualname: String,
9091
pub span: SpanData,
9192
pub scope: DefId,
@@ -97,6 +98,7 @@ impl Lower for data::EnumData {
9798
fn lower(self, tcx: TyCtxt) -> EnumData {
9899
EnumData {
99100
id: make_def_id(self.id, &tcx.map),
101+
name: self.name,
100102
value: self.value,
101103
qualname: self.qualname,
102104
span: SpanData::from_span(self.span, tcx.sess.codemap()),
@@ -160,6 +162,7 @@ pub struct FunctionData {
160162
pub declaration: Option<DefId>,
161163
pub span: SpanData,
162164
pub scope: DefId,
165+
pub value: String,
163166
}
164167

165168
impl Lower for data::FunctionData {
@@ -173,6 +176,7 @@ impl Lower for data::FunctionData {
173176
declaration: self.declaration,
174177
span: SpanData::from_span(self.span, tcx.sess.codemap()),
175178
scope: make_def_id(self.scope, &tcx.map),
179+
value: self.value,
176180
}
177181
}
178182
}
@@ -268,7 +272,6 @@ pub struct MacroUseData {
268272
// we use the callee span to reference the associated macro definition.
269273
pub callee_span: SpanData,
270274
pub scope: DefId,
271-
pub imported: bool,
272275
}
273276

274277
impl Lower for data::MacroUseData {
@@ -281,7 +284,6 @@ impl Lower for data::MacroUseData {
281284
qualname: self.qualname,
282285
callee_span: SpanData::from_span(self.callee_span, tcx.sess.codemap()),
283286
scope: make_def_id(self.scope, &tcx.map),
284-
imported: self.imported,
285287
}
286288
}
287289
}
@@ -312,9 +314,11 @@ impl Lower for data::MethodCallData {
312314
#[derive(Clone, Debug, RustcEncodable)]
313315
pub struct MethodData {
314316
pub id: DefId,
317+
pub name: String,
315318
pub qualname: String,
316319
pub span: SpanData,
317320
pub scope: DefId,
321+
pub value: String,
318322
}
319323

320324
impl Lower for data::MethodData {
@@ -323,9 +327,11 @@ impl Lower for data::MethodData {
323327
fn lower(self, tcx: TyCtxt) -> MethodData {
324328
MethodData {
325329
span: SpanData::from_span(self.span, tcx.sess.codemap()),
330+
name: self.name,
326331
scope: make_def_id(self.scope, &tcx.map),
327332
id: make_def_id(self.id, &tcx.map),
328333
qualname: self.qualname,
334+
value: self.value,
329335
}
330336
}
331337
}
@@ -381,6 +387,7 @@ impl Lower for data::ModRefData {
381387
#[derive(Debug, RustcEncodable)]
382388
pub struct StructData {
383389
pub span: SpanData,
390+
pub name: String,
384391
pub id: DefId,
385392
pub ctor_id: DefId,
386393
pub qualname: String,
@@ -394,6 +401,7 @@ impl Lower for data::StructData {
394401
fn lower(self, tcx: TyCtxt) -> StructData {
395402
StructData {
396403
span: SpanData::from_span(self.span, tcx.sess.codemap()),
404+
name: self.name,
397405
id: make_def_id(self.id, &tcx.map),
398406
ctor_id: make_def_id(self.ctor_id, &tcx.map),
399407
qualname: self.qualname,
@@ -406,6 +414,7 @@ impl Lower for data::StructData {
406414
#[derive(Debug, RustcEncodable)]
407415
pub struct StructVariantData {
408416
pub span: SpanData,
417+
pub name: String,
409418
pub id: DefId,
410419
pub qualname: String,
411420
pub type_value: String,
@@ -419,6 +428,7 @@ impl Lower for data::StructVariantData {
419428
fn lower(self, tcx: TyCtxt) -> StructVariantData {
420429
StructVariantData {
421430
span: SpanData::from_span(self.span, tcx.sess.codemap()),
431+
name: self.name,
422432
id: make_def_id(self.id, &tcx.map),
423433
qualname: self.qualname,
424434
type_value: self.type_value,
@@ -431,6 +441,7 @@ impl Lower for data::StructVariantData {
431441
#[derive(Debug, RustcEncodable)]
432442
pub struct TraitData {
433443
pub span: SpanData,
444+
pub name: String,
434445
pub id: DefId,
435446
pub qualname: String,
436447
pub scope: DefId,
@@ -443,6 +454,7 @@ impl Lower for data::TraitData {
443454
fn lower(self, tcx: TyCtxt) -> TraitData {
444455
TraitData {
445456
span: SpanData::from_span(self.span, tcx.sess.codemap()),
457+
name: self.name,
446458
id: make_def_id(self.id, &tcx.map),
447459
qualname: self.qualname,
448460
scope: make_def_id(self.scope, &tcx.map),
@@ -480,19 +492,21 @@ impl Lower for data::TupleVariantData {
480492

481493
/// Data for a typedef.
482494
#[derive(Debug, RustcEncodable)]
483-
pub struct TypedefData {
495+
pub struct TypeDefData {
484496
pub id: DefId,
497+
pub name: String,
485498
pub span: SpanData,
486499
pub qualname: String,
487500
pub value: String,
488501
}
489502

490-
impl Lower for data::TypedefData {
491-
type Target = TypedefData;
503+
impl Lower for data::TypeDefData {
504+
type Target = TypeDefData;
492505

493-
fn lower(self, tcx: TyCtxt) -> TypedefData {
494-
TypedefData {
506+
fn lower(self, tcx: TyCtxt) -> TypeDefData {
507+
TypeDefData {
495508
id: make_def_id(self.id, &tcx.map),
509+
name: self.name,
496510
span: SpanData::from_span(self.span, tcx.sess.codemap()),
497511
qualname: self.qualname,
498512
value: self.value,

0 commit comments

Comments
 (0)