Skip to content

Commit a77e528

Browse files
committed
Change json dumper (and a few other bits and pieces) to use rls-data rather than its own data structures
1 parent fee1f64 commit a77e528

File tree

7 files changed

+261
-398
lines changed

7 files changed

+261
-398
lines changed

src/librustc_save_analysis/csv_dumper.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ use std::io::Write;
1313
use super::external_data::*;
1414
use super::dump::Dump;
1515

16+
use rls_data::{SpanData, CratePreludeData};
17+
1618
pub struct CsvDumper<'b, W: 'b> {
1719
output: &'b mut W
1820
}
@@ -429,6 +431,6 @@ fn make_values_str(pairs: &[(&'static str, &str)]) -> String {
429431
fn span_extent_str(span: SpanData) -> String {
430432
format!("file_name,\"{}\",file_line,{},file_col,{},byte_start,{},\
431433
file_line_end,{},file_col_end,{},byte_end,{}",
432-
span.file_name, span.line_start, span.column_start, span.byte_start,
433-
span.line_end, span.column_end, span.byte_end)
434+
span.file_name.to_str().unwrap(), span.line_start.0, span.column_start.0,
435+
span.byte_start, span.line_end.0, span.column_end.0, span.byte_end)
434436
}

src/librustc_save_analysis/data.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ use rustc::hir::def_id::{CrateNum, DefId};
1818
use syntax::ast::{self, Attribute, NodeId};
1919
use syntax_pos::Span;
2020

21+
use rls_data::ExternalCrateData;
22+
2123
pub struct CrateData {
2224
pub name: String,
2325
pub number: u32,
@@ -115,14 +117,6 @@ pub struct CratePreludeData {
115117
pub span: Span,
116118
}
117119

118-
/// Data for external crates in the prelude of a crate.
119-
#[derive(Debug, RustcEncodable)]
120-
pub struct ExternalCrateData {
121-
pub name: String,
122-
pub num: CrateNum,
123-
pub file_name: String,
124-
}
125-
126120
/// Data for enum declarations.
127121
#[derive(Clone, Debug, RustcEncodable)]
128122
pub struct EnumData {

src/librustc_save_analysis/dump.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
use super::external_data::*;
1212

13+
use rls_data::CratePreludeData;
14+
1315
pub trait Dump {
1416
fn crate_prelude(&mut self, CratePreludeData) {}
1517
fn enum_data(&mut self, EnumData) {}

src/librustc_save_analysis/dump_visitor.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ use super::external_data::{Lower, make_def_id};
5454
use super::span_utils::SpanUtils;
5555
use super::recorder;
5656

57+
use rls_data::ExternalCrateData;
58+
5759
macro_rules! down_cast_data {
5860
($id:ident, $kind:ident, $sp:expr) => {
5961
let $id = if let super::Data::$kind(data) = $id {

src/librustc_save_analysis/external_data.rs

Lines changed: 45 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ use syntax::print::pprust;
1717
use syntax::symbol::Symbol;
1818
use syntax_pos::Span;
1919

20+
use std::path::PathBuf;
21+
2022
use data::{self, Visibility, SigElement};
2123

24+
use rls_data::{SpanData, CratePreludeData};
25+
2226
// FIXME: this should be pub(crate), but the current snapshot doesn't allow it yet
2327
pub trait Lower {
2428
type Target;
@@ -36,41 +40,26 @@ pub fn null_def_id() -> DefId {
3640
}
3741
}
3842

39-
#[derive(Clone, Debug, RustcEncodable)]
40-
pub struct SpanData {
41-
pub file_name: String,
42-
pub byte_start: u32,
43-
pub byte_end: u32,
44-
/// 1-based.
45-
pub line_start: usize,
46-
pub line_end: usize,
47-
/// 1-based, character offset.
48-
pub column_start: usize,
49-
pub column_end: usize,
50-
}
51-
52-
impl SpanData {
53-
pub fn from_span(span: Span, cm: &CodeMap) -> SpanData {
54-
let start = cm.lookup_char_pos(span.lo);
55-
let end = cm.lookup_char_pos(span.hi);
56-
57-
SpanData {
58-
file_name: start.file.name.clone(),
59-
byte_start: span.lo.0,
60-
byte_end: span.hi.0,
61-
line_start: start.line,
62-
line_end: end.line,
63-
column_start: start.col.0 + 1,
64-
column_end: end.col.0 + 1,
65-
}
43+
pub fn span_from_span(span: Span, cm: &CodeMap) -> SpanData {
44+
let start = cm.lookup_char_pos(span.lo);
45+
let end = cm.lookup_char_pos(span.hi);
46+
47+
SpanData {
48+
file_name: start.file.name.clone().into(),
49+
byte_start: span.lo.0,
50+
byte_end: span.hi.0,
51+
line_start: start.line,
52+
line_end: end.line,
53+
column_start: start.col.0 + 1,
54+
column_end: end.col.0 + 1,
6655
}
6756
}
6857

6958
/// Represent an arbitrary attribute on a code element
7059
#[derive(Clone, Debug, RustcEncodable)]
7160
pub struct Attribute {
72-
value: String,
73-
span: SpanData,
61+
pub value: String,
62+
pub span: SpanData,
7463
}
7564

7665
impl Lower for Vec<ast::Attribute> {
@@ -93,20 +82,12 @@ impl Lower for Vec<ast::Attribute> {
9382

9483
Attribute {
9584
value: value,
96-
span: SpanData::from_span(attr.span, tcx.sess.codemap()),
85+
span: span_from_span(attr.span, tcx.sess.codemap()),
9786
}
9887
}).collect()
9988
}
10089
}
10190

102-
#[derive(Debug, RustcEncodable)]
103-
pub struct CratePreludeData {
104-
pub crate_name: String,
105-
pub crate_root: String,
106-
pub external_crates: Vec<data::ExternalCrateData>,
107-
pub span: SpanData,
108-
}
109-
11091
impl Lower for data::CratePreludeData {
11192
type Target = CratePreludeData;
11293

@@ -115,7 +96,7 @@ impl Lower for data::CratePreludeData {
11596
crate_name: self.crate_name,
11697
crate_root: self.crate_root,
11798
external_crates: self.external_crates,
118-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
99+
span: span_from_span(self.span, tcx.sess.codemap()),
119100
}
120101
}
121102
}
@@ -145,7 +126,7 @@ impl Lower for data::EnumData {
145126
name: self.name,
146127
value: self.value,
147128
qualname: self.qualname,
148-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
129+
span: span_from_span(self.span, tcx.sess.codemap()),
149130
scope: make_def_id(self.scope, &tcx.hir),
150131
variants: self.variants.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(),
151132
visibility: self.visibility,
@@ -176,7 +157,7 @@ impl Lower for data::ExternCrateData {
176157
name: self.name,
177158
crate_num: self.crate_num,
178159
location: self.location,
179-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
160+
span: span_from_span(self.span, tcx.sess.codemap()),
180161
scope: make_def_id(self.scope, &tcx.hir),
181162
}
182163
}
@@ -195,7 +176,7 @@ impl Lower for data::FunctionCallData {
195176

196177
fn lower(self, tcx: TyCtxt) -> FunctionCallData {
197178
FunctionCallData {
198-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
179+
span: span_from_span(self.span, tcx.sess.codemap()),
199180
scope: make_def_id(self.scope, &tcx.hir),
200181
ref_id: self.ref_id,
201182
}
@@ -228,7 +209,7 @@ impl Lower for data::FunctionData {
228209
name: self.name,
229210
qualname: self.qualname,
230211
declaration: self.declaration,
231-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
212+
span: span_from_span(self.span, tcx.sess.codemap()),
232213
scope: make_def_id(self.scope, &tcx.hir),
233214
value: self.value,
234215
visibility: self.visibility,
@@ -253,7 +234,7 @@ impl Lower for data::FunctionRefData {
253234

254235
fn lower(self, tcx: TyCtxt) -> FunctionRefData {
255236
FunctionRefData {
256-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
237+
span: span_from_span(self.span, tcx.sess.codemap()),
257238
scope: make_def_id(self.scope, &tcx.hir),
258239
ref_id: self.ref_id,
259240
}
@@ -274,7 +255,7 @@ impl Lower for data::ImplData {
274255
fn lower(self, tcx: TyCtxt) -> ImplData {
275256
ImplData {
276257
id: make_def_id(self.id, &tcx.hir),
277-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
258+
span: span_from_span(self.span, tcx.sess.codemap()),
278259
scope: make_def_id(self.scope, &tcx.hir),
279260
trait_ref: self.trait_ref,
280261
self_ref: self.self_ref,
@@ -294,7 +275,7 @@ impl Lower for data::InheritanceData {
294275

295276
fn lower(self, tcx: TyCtxt) -> InheritanceData {
296277
InheritanceData {
297-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
278+
span: span_from_span(self.span, tcx.sess.codemap()),
298279
base_id: self.base_id,
299280
deriv_id: make_def_id(self.deriv_id, &tcx.hir)
300281
}
@@ -315,7 +296,7 @@ impl Lower for data::MacroData {
315296

316297
fn lower(self, tcx: TyCtxt) -> MacroData {
317298
MacroData {
318-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
299+
span: span_from_span(self.span, tcx.sess.codemap()),
319300
name: self.name,
320301
qualname: self.qualname,
321302
docs: self.docs,
@@ -340,10 +321,10 @@ impl Lower for data::MacroUseData {
340321

341322
fn lower(self, tcx: TyCtxt) -> MacroUseData {
342323
MacroUseData {
343-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
324+
span: span_from_span(self.span, tcx.sess.codemap()),
344325
name: self.name,
345326
qualname: self.qualname,
346-
callee_span: SpanData::from_span(self.callee_span, tcx.sess.codemap()),
327+
callee_span: span_from_span(self.callee_span, tcx.sess.codemap()),
347328
scope: make_def_id(self.scope, &tcx.hir),
348329
}
349330
}
@@ -363,7 +344,7 @@ impl Lower for data::MethodCallData {
363344

364345
fn lower(self, tcx: TyCtxt) -> MethodCallData {
365346
MethodCallData {
366-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
347+
span: span_from_span(self.span, tcx.sess.codemap()),
367348
scope: make_def_id(self.scope, &tcx.hir),
368349
ref_id: self.ref_id,
369350
decl_id: self.decl_id,
@@ -393,7 +374,7 @@ impl Lower for data::MethodData {
393374

394375
fn lower(self, tcx: TyCtxt) -> MethodData {
395376
MethodData {
396-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
377+
span: span_from_span(self.span, tcx.sess.codemap()),
397378
name: self.name,
398379
scope: make_def_id(self.scope, &tcx.hir),
399380
id: make_def_id(self.id, &tcx.hir),
@@ -433,7 +414,7 @@ impl Lower for data::ModData {
433414
id: make_def_id(self.id, &tcx.hir),
434415
name: self.name,
435416
qualname: self.qualname,
436-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
417+
span: span_from_span(self.span, tcx.sess.codemap()),
437418
scope: make_def_id(self.scope, &tcx.hir),
438419
filename: self.filename,
439420
items: self.items.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(),
@@ -459,7 +440,7 @@ impl Lower for data::ModRefData {
459440

460441
fn lower(self, tcx: TyCtxt) -> ModRefData {
461442
ModRefData {
462-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
443+
span: span_from_span(self.span, tcx.sess.codemap()),
463444
scope: make_def_id(self.scope, &tcx.hir),
464445
ref_id: self.ref_id,
465446
qualname: self.qualname,
@@ -488,7 +469,7 @@ impl Lower for data::StructData {
488469

489470
fn lower(self, tcx: TyCtxt) -> StructData {
490471
StructData {
491-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
472+
span: span_from_span(self.span, tcx.sess.codemap()),
492473
name: self.name,
493474
id: make_def_id(self.id, &tcx.hir),
494475
ctor_id: make_def_id(self.ctor_id, &tcx.hir),
@@ -524,7 +505,7 @@ impl Lower for data::StructVariantData {
524505

525506
fn lower(self, tcx: TyCtxt) -> StructVariantData {
526507
StructVariantData {
527-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
508+
span: span_from_span(self.span, tcx.sess.codemap()),
528509
name: self.name,
529510
id: make_def_id(self.id, &tcx.hir),
530511
qualname: self.qualname,
@@ -559,7 +540,7 @@ impl Lower for data::TraitData {
559540

560541
fn lower(self, tcx: TyCtxt) -> TraitData {
561542
TraitData {
562-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
543+
span: span_from_span(self.span, tcx.sess.codemap()),
563544
name: self.name,
564545
id: make_def_id(self.id, &tcx.hir),
565546
qualname: self.qualname,
@@ -594,7 +575,7 @@ impl Lower for data::TupleVariantData {
594575

595576
fn lower(self, tcx: TyCtxt) -> TupleVariantData {
596577
TupleVariantData {
597-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
578+
span: span_from_span(self.span, tcx.sess.codemap()),
598579
id: make_def_id(self.id, &tcx.hir),
599580
name: self.name,
600581
qualname: self.qualname,
@@ -631,7 +612,7 @@ impl Lower for data::TypeDefData {
631612
TypeDefData {
632613
id: make_def_id(self.id, &tcx.hir),
633614
name: self.name,
634-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
615+
span: span_from_span(self.span, tcx.sess.codemap()),
635616
qualname: self.qualname,
636617
value: self.value,
637618
visibility: self.visibility,
@@ -657,7 +638,7 @@ impl Lower for data::TypeRefData {
657638

658639
fn lower(self, tcx: TyCtxt) -> TypeRefData {
659640
TypeRefData {
660-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
641+
span: span_from_span(self.span, tcx.sess.codemap()),
661642
scope: make_def_id(self.scope, &tcx.hir),
662643
ref_id: self.ref_id,
663644
qualname: self.qualname,
@@ -681,7 +662,7 @@ impl Lower for data::UseData {
681662
fn lower(self, tcx: TyCtxt) -> UseData {
682663
UseData {
683664
id: make_def_id(self.id, &tcx.hir),
684-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
665+
span: span_from_span(self.span, tcx.sess.codemap()),
685666
name: self.name,
686667
mod_id: self.mod_id,
687668
scope: make_def_id(self.scope, &tcx.hir),
@@ -705,7 +686,7 @@ impl Lower for data::UseGlobData {
705686
fn lower(self, tcx: TyCtxt) -> UseGlobData {
706687
UseGlobData {
707688
id: make_def_id(self.id, &tcx.hir),
708-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
689+
span: span_from_span(self.span, tcx.sess.codemap()),
709690
names: self.names,
710691
scope: make_def_id(self.scope, &tcx.hir),
711692
visibility: self.visibility,
@@ -740,7 +721,7 @@ impl Lower for data::VariableData {
740721
kind: self.kind,
741722
name: self.name,
742723
qualname: self.qualname,
743-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
724+
span: span_from_span(self.span, tcx.sess.codemap()),
744725
scope: make_def_id(self.scope, &tcx.hir),
745726
value: self.value,
746727
type_value: self.type_value,
@@ -769,7 +750,7 @@ impl Lower for data::VariableRefData {
769750
fn lower(self, tcx: TyCtxt) -> VariableRefData {
770751
VariableRefData {
771752
name: self.name,
772-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
753+
span: span_from_span(self.span, tcx.sess.codemap()),
773754
scope: make_def_id(self.scope, &tcx.hir),
774755
ref_id: self.ref_id,
775756
}
@@ -793,7 +774,7 @@ impl Lower for data::Signature {
793774

794775
fn lower(self, tcx: TyCtxt) -> Signature {
795776
Signature {
796-
span: SpanData::from_span(self.span, tcx.sess.codemap()),
777+
span: span_from_span(self.span, tcx.sess.codemap()),
797778
text: self.text,
798779
ident_start: self.ident_start,
799780
ident_end: self.ident_end,

src/librustc_save_analysis/json_api_dumper.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ use data::{VariableKind, Visibility, SigElement};
1818
use dump::Dump;
1919
use super::Format;
2020

21+
use rls_data::{SpanData, CratePreludeData};
22+
2123

2224
// A dumper to dump a restricted set of JSON information, designed for use with
2325
// libraries distributed without their source. Clients are likely to use type

0 commit comments

Comments
 (0)