Skip to content

Commit

Permalink
Change json dumper (and a few other bits and pieces) to use rls-data …
Browse files Browse the repository at this point in the history
…rather than its own data structures
  • Loading branch information
nrc committed Mar 15, 2017
1 parent fee1f64 commit a77e528
Show file tree
Hide file tree
Showing 7 changed files with 261 additions and 398 deletions.
6 changes: 4 additions & 2 deletions src/librustc_save_analysis/csv_dumper.rs
Expand Up @@ -13,6 +13,8 @@ use std::io::Write;
use super::external_data::*;
use super::dump::Dump;

use rls_data::{SpanData, CratePreludeData};

pub struct CsvDumper<'b, W: 'b> {
output: &'b mut W
}
Expand Down Expand Up @@ -429,6 +431,6 @@ fn make_values_str(pairs: &[(&'static str, &str)]) -> String {
fn span_extent_str(span: SpanData) -> String {
format!("file_name,\"{}\",file_line,{},file_col,{},byte_start,{},\
file_line_end,{},file_col_end,{},byte_end,{}",
span.file_name, span.line_start, span.column_start, span.byte_start,
span.line_end, span.column_end, span.byte_end)
span.file_name.to_str().unwrap(), span.line_start.0, span.column_start.0,
span.byte_start, span.line_end.0, span.column_end.0, span.byte_end)
}
10 changes: 2 additions & 8 deletions src/librustc_save_analysis/data.rs
Expand Up @@ -18,6 +18,8 @@ use rustc::hir::def_id::{CrateNum, DefId};
use syntax::ast::{self, Attribute, NodeId};
use syntax_pos::Span;

use rls_data::ExternalCrateData;

pub struct CrateData {
pub name: String,
pub number: u32,
Expand Down Expand Up @@ -115,14 +117,6 @@ pub struct CratePreludeData {
pub span: Span,
}

/// Data for external crates in the prelude of a crate.
#[derive(Debug, RustcEncodable)]
pub struct ExternalCrateData {
pub name: String,
pub num: CrateNum,
pub file_name: String,
}

/// Data for enum declarations.
#[derive(Clone, Debug, RustcEncodable)]
pub struct EnumData {
Expand Down
2 changes: 2 additions & 0 deletions src/librustc_save_analysis/dump.rs
Expand Up @@ -10,6 +10,8 @@

use super::external_data::*;

use rls_data::CratePreludeData;

pub trait Dump {
fn crate_prelude(&mut self, CratePreludeData) {}
fn enum_data(&mut self, EnumData) {}
Expand Down
2 changes: 2 additions & 0 deletions src/librustc_save_analysis/dump_visitor.rs
Expand Up @@ -54,6 +54,8 @@ use super::external_data::{Lower, make_def_id};
use super::span_utils::SpanUtils;
use super::recorder;

use rls_data::ExternalCrateData;

macro_rules! down_cast_data {
($id:ident, $kind:ident, $sp:expr) => {
let $id = if let super::Data::$kind(data) = $id {
Expand Down
109 changes: 45 additions & 64 deletions src/librustc_save_analysis/external_data.rs
Expand Up @@ -17,8 +17,12 @@ use syntax::print::pprust;
use syntax::symbol::Symbol;
use syntax_pos::Span;

use std::path::PathBuf;

use data::{self, Visibility, SigElement};

use rls_data::{SpanData, CratePreludeData};

// FIXME: this should be pub(crate), but the current snapshot doesn't allow it yet
pub trait Lower {
type Target;
Expand All @@ -36,41 +40,26 @@ pub fn null_def_id() -> DefId {
}
}

#[derive(Clone, Debug, RustcEncodable)]
pub struct SpanData {
pub file_name: String,
pub byte_start: u32,
pub byte_end: u32,
/// 1-based.
pub line_start: usize,
pub line_end: usize,
/// 1-based, character offset.
pub column_start: usize,
pub column_end: usize,
}

impl SpanData {
pub fn from_span(span: Span, cm: &CodeMap) -> SpanData {
let start = cm.lookup_char_pos(span.lo);
let end = cm.lookup_char_pos(span.hi);

SpanData {
file_name: start.file.name.clone(),
byte_start: span.lo.0,
byte_end: span.hi.0,
line_start: start.line,
line_end: end.line,
column_start: start.col.0 + 1,
column_end: end.col.0 + 1,
}
pub fn span_from_span(span: Span, cm: &CodeMap) -> SpanData {
let start = cm.lookup_char_pos(span.lo);
let end = cm.lookup_char_pos(span.hi);

SpanData {
file_name: start.file.name.clone().into(),
byte_start: span.lo.0,
byte_end: span.hi.0,
line_start: start.line,
line_end: end.line,
column_start: start.col.0 + 1,
column_end: end.col.0 + 1,
}
}

/// Represent an arbitrary attribute on a code element
#[derive(Clone, Debug, RustcEncodable)]
pub struct Attribute {
value: String,
span: SpanData,
pub value: String,
pub span: SpanData,
}

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

Attribute {
value: value,
span: SpanData::from_span(attr.span, tcx.sess.codemap()),
span: span_from_span(attr.span, tcx.sess.codemap()),
}
}).collect()
}
}

#[derive(Debug, RustcEncodable)]
pub struct CratePreludeData {
pub crate_name: String,
pub crate_root: String,
pub external_crates: Vec<data::ExternalCrateData>,
pub span: SpanData,
}

impl Lower for data::CratePreludeData {
type Target = CratePreludeData;

Expand All @@ -115,7 +96,7 @@ impl Lower for data::CratePreludeData {
crate_name: self.crate_name,
crate_root: self.crate_root,
external_crates: self.external_crates,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
}
}
}
Expand Down Expand Up @@ -145,7 +126,7 @@ impl Lower for data::EnumData {
name: self.name,
value: self.value,
qualname: self.qualname,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
variants: self.variants.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(),
visibility: self.visibility,
Expand Down Expand Up @@ -176,7 +157,7 @@ impl Lower for data::ExternCrateData {
name: self.name,
crate_num: self.crate_num,
location: self.location,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
}
}
Expand All @@ -195,7 +176,7 @@ impl Lower for data::FunctionCallData {

fn lower(self, tcx: TyCtxt) -> FunctionCallData {
FunctionCallData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
ref_id: self.ref_id,
}
Expand Down Expand Up @@ -228,7 +209,7 @@ impl Lower for data::FunctionData {
name: self.name,
qualname: self.qualname,
declaration: self.declaration,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
value: self.value,
visibility: self.visibility,
Expand All @@ -253,7 +234,7 @@ impl Lower for data::FunctionRefData {

fn lower(self, tcx: TyCtxt) -> FunctionRefData {
FunctionRefData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
ref_id: self.ref_id,
}
Expand All @@ -274,7 +255,7 @@ impl Lower for data::ImplData {
fn lower(self, tcx: TyCtxt) -> ImplData {
ImplData {
id: make_def_id(self.id, &tcx.hir),
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
trait_ref: self.trait_ref,
self_ref: self.self_ref,
Expand All @@ -294,7 +275,7 @@ impl Lower for data::InheritanceData {

fn lower(self, tcx: TyCtxt) -> InheritanceData {
InheritanceData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
base_id: self.base_id,
deriv_id: make_def_id(self.deriv_id, &tcx.hir)
}
Expand All @@ -315,7 +296,7 @@ impl Lower for data::MacroData {

fn lower(self, tcx: TyCtxt) -> MacroData {
MacroData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
qualname: self.qualname,
docs: self.docs,
Expand All @@ -340,10 +321,10 @@ impl Lower for data::MacroUseData {

fn lower(self, tcx: TyCtxt) -> MacroUseData {
MacroUseData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
qualname: self.qualname,
callee_span: SpanData::from_span(self.callee_span, tcx.sess.codemap()),
callee_span: span_from_span(self.callee_span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
}
}
Expand All @@ -363,7 +344,7 @@ impl Lower for data::MethodCallData {

fn lower(self, tcx: TyCtxt) -> MethodCallData {
MethodCallData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
ref_id: self.ref_id,
decl_id: self.decl_id,
Expand Down Expand Up @@ -393,7 +374,7 @@ impl Lower for data::MethodData {

fn lower(self, tcx: TyCtxt) -> MethodData {
MethodData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
scope: make_def_id(self.scope, &tcx.hir),
id: make_def_id(self.id, &tcx.hir),
Expand Down Expand Up @@ -433,7 +414,7 @@ impl Lower for data::ModData {
id: make_def_id(self.id, &tcx.hir),
name: self.name,
qualname: self.qualname,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
filename: self.filename,
items: self.items.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(),
Expand All @@ -459,7 +440,7 @@ impl Lower for data::ModRefData {

fn lower(self, tcx: TyCtxt) -> ModRefData {
ModRefData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
ref_id: self.ref_id,
qualname: self.qualname,
Expand Down Expand Up @@ -488,7 +469,7 @@ impl Lower for data::StructData {

fn lower(self, tcx: TyCtxt) -> StructData {
StructData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
id: make_def_id(self.id, &tcx.hir),
ctor_id: make_def_id(self.ctor_id, &tcx.hir),
Expand Down Expand Up @@ -524,7 +505,7 @@ impl Lower for data::StructVariantData {

fn lower(self, tcx: TyCtxt) -> StructVariantData {
StructVariantData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
id: make_def_id(self.id, &tcx.hir),
qualname: self.qualname,
Expand Down Expand Up @@ -559,7 +540,7 @@ impl Lower for data::TraitData {

fn lower(self, tcx: TyCtxt) -> TraitData {
TraitData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
id: make_def_id(self.id, &tcx.hir),
qualname: self.qualname,
Expand Down Expand Up @@ -594,7 +575,7 @@ impl Lower for data::TupleVariantData {

fn lower(self, tcx: TyCtxt) -> TupleVariantData {
TupleVariantData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
id: make_def_id(self.id, &tcx.hir),
name: self.name,
qualname: self.qualname,
Expand Down Expand Up @@ -631,7 +612,7 @@ impl Lower for data::TypeDefData {
TypeDefData {
id: make_def_id(self.id, &tcx.hir),
name: self.name,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
qualname: self.qualname,
value: self.value,
visibility: self.visibility,
Expand All @@ -657,7 +638,7 @@ impl Lower for data::TypeRefData {

fn lower(self, tcx: TyCtxt) -> TypeRefData {
TypeRefData {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
ref_id: self.ref_id,
qualname: self.qualname,
Expand All @@ -681,7 +662,7 @@ impl Lower for data::UseData {
fn lower(self, tcx: TyCtxt) -> UseData {
UseData {
id: make_def_id(self.id, &tcx.hir),
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
name: self.name,
mod_id: self.mod_id,
scope: make_def_id(self.scope, &tcx.hir),
Expand All @@ -705,7 +686,7 @@ impl Lower for data::UseGlobData {
fn lower(self, tcx: TyCtxt) -> UseGlobData {
UseGlobData {
id: make_def_id(self.id, &tcx.hir),
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
names: self.names,
scope: make_def_id(self.scope, &tcx.hir),
visibility: self.visibility,
Expand Down Expand Up @@ -740,7 +721,7 @@ impl Lower for data::VariableData {
kind: self.kind,
name: self.name,
qualname: self.qualname,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
value: self.value,
type_value: self.type_value,
Expand Down Expand Up @@ -769,7 +750,7 @@ impl Lower for data::VariableRefData {
fn lower(self, tcx: TyCtxt) -> VariableRefData {
VariableRefData {
name: self.name,
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
scope: make_def_id(self.scope, &tcx.hir),
ref_id: self.ref_id,
}
Expand All @@ -793,7 +774,7 @@ impl Lower for data::Signature {

fn lower(self, tcx: TyCtxt) -> Signature {
Signature {
span: SpanData::from_span(self.span, tcx.sess.codemap()),
span: span_from_span(self.span, tcx.sess.codemap()),
text: self.text,
ident_start: self.ident_start,
ident_end: self.ident_end,
Expand Down
2 changes: 2 additions & 0 deletions src/librustc_save_analysis/json_api_dumper.rs
Expand Up @@ -18,6 +18,8 @@ use data::{VariableKind, Visibility, SigElement};
use dump::Dump;
use super::Format;

use rls_data::{SpanData, CratePreludeData};


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

0 comments on commit a77e528

Please sign in to comment.