Skip to content

Commit 68d29cb

Browse files
committed
save-analysis: add docs data
1 parent 987b475 commit 68d29cb

File tree

6 files changed

+116
-13
lines changed

6 files changed

+116
-13
lines changed

src/librustc_save_analysis/data.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ pub struct EnumData {
134134
pub scope: NodeId,
135135
pub variants: Vec<NodeId>,
136136
pub visibility: Visibility,
137+
pub docs: String,
137138
}
138139

139140
/// Data for extern crates.
@@ -167,6 +168,7 @@ pub struct FunctionData {
167168
pub value: String,
168169
pub visibility: Visibility,
169170
pub parent: Option<NodeId>,
171+
pub docs: String,
170172
}
171173

172174
/// Data about a function call.
@@ -213,6 +215,7 @@ pub struct MacroData {
213215
pub span: Span,
214216
pub name: String,
215217
pub qualname: String,
218+
pub docs: String,
216219
}
217220

218221
/// Data about a macro use.
@@ -248,6 +251,7 @@ pub struct MethodData {
248251
pub value: String,
249252
pub decl_id: Option<DefId>,
250253
pub visibility: Visibility,
254+
pub docs: String,
251255
}
252256

253257
/// Data for modules.
@@ -261,6 +265,7 @@ pub struct ModData {
261265
pub filename: String,
262266
pub items: Vec<NodeId>,
263267
pub visibility: Visibility,
268+
pub docs: String,
264269
}
265270

266271
/// Data for a reference to a module.
@@ -283,6 +288,7 @@ pub struct StructData {
283288
pub value: String,
284289
pub fields: Vec<NodeId>,
285290
pub visibility: Visibility,
291+
pub docs: String,
286292
}
287293

288294
#[derive(Debug, RustcEncodable)]
@@ -295,6 +301,7 @@ pub struct StructVariantData {
295301
pub value: String,
296302
pub scope: NodeId,
297303
pub parent: Option<NodeId>,
304+
pub docs: String,
298305
}
299306

300307
#[derive(Debug, RustcEncodable)]
@@ -307,6 +314,7 @@ pub struct TraitData {
307314
pub value: String,
308315
pub items: Vec<NodeId>,
309316
pub visibility: Visibility,
317+
pub docs: String,
310318
}
311319

312320
#[derive(Debug, RustcEncodable)]
@@ -319,6 +327,7 @@ pub struct TupleVariantData {
319327
pub value: String,
320328
pub scope: NodeId,
321329
pub parent: Option<NodeId>,
330+
pub docs: String,
322331
}
323332

324333
/// Data for a typedef.
@@ -331,6 +340,7 @@ pub struct TypeDefData {
331340
pub value: String,
332341
pub visibility: Visibility,
333342
pub parent: Option<NodeId>,
343+
pub docs: String,
334344
}
335345

336346
/// Data for a reference to a type or trait.
@@ -374,6 +384,7 @@ pub struct VariableData {
374384
pub value: String,
375385
pub type_value: String,
376386
pub visibility: Visibility,
387+
pub docs: String,
377388
}
378389

379390
#[derive(Debug, RustcEncodable)]

src/librustc_save_analysis/dump_visitor.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ use rustc::ty::{self, TyCtxt, ImplOrTraitItem, ImplOrTraitItemContainer};
3636
use std::collections::HashSet;
3737
use std::hash::*;
3838

39-
use syntax::ast::{self, NodeId, PatKind};
39+
use syntax::ast::{self, NodeId, PatKind, Attribute};
4040
use syntax::parse::token::{self, keywords};
4141
use syntax::visit::{self, Visitor};
4242
use syntax::print::pprust::{path_to_string, ty_to_string, bounds_to_string, generics_to_string};
4343
use syntax::ptr::P;
4444
use syntax::codemap::Spanned;
4545
use syntax_pos::*;
4646

47-
use super::{escape, generated_code, SaveContext, PathCollector};
47+
use super::{escape, generated_code, SaveContext, PathCollector, docs_for_attrs};
4848
use super::data::*;
4949
use super::dump::Dump;
5050
use super::external_data::Lower;
@@ -368,6 +368,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
368368
scope: 0,
369369
parent: None,
370370
visibility: Visibility::Inherited,
371+
docs: String::new(),
371372
}.lower(self.tcx));
372373
}
373374
}
@@ -380,6 +381,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
380381
id: ast::NodeId,
381382
name: ast::Name,
382383
vis: Visibility,
384+
attrs: &[Attribute],
383385
span: Span) {
384386
debug!("process_method: {}:{}", id, name);
385387

@@ -421,6 +423,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
421423
value: sig_str,
422424
decl_id: decl_id,
423425
visibility: vis,
426+
docs: docs_for_attrs(attrs),
424427
}.lower(self.tcx));
425428
}
426429

@@ -491,6 +494,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
491494
value: String::new(),
492495
visibility: Visibility::Inherited,
493496
parent: None,
497+
docs: String::new(),
494498
}.lower(self.tcx));
495499
}
496500
}
@@ -541,7 +545,8 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
541545
typ: &ast::Ty,
542546
expr: &ast::Expr,
543547
parent_id: NodeId,
544-
vis: Visibility) {
548+
vis: Visibility,
549+
attrs: &[Attribute]) {
545550
let qualname = format!("::{}", self.tcx.node_path_str(id));
546551

547552
let sub_span = self.span.sub_span_after_keyword(span, keywords::Const);
@@ -558,6 +563,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
558563
scope: self.cur_scope,
559564
parent: Some(parent_id),
560565
visibility: vis,
566+
docs: docs_for_attrs(attrs),
561567
}.lower(self.tcx));
562568
}
563569

@@ -600,6 +606,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
600606
value: val,
601607
fields: fields,
602608
visibility: From::from(&item.vis),
609+
docs: docs_for_attrs(&item.attrs),
603610
}.lower(self.tcx));
604611
}
605612

@@ -653,6 +660,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
653660
value: val,
654661
scope: enum_data.scope,
655662
parent: Some(item.id),
663+
docs: docs_for_attrs(&variant.node.attrs),
656664
}.lower(self.tcx));
657665
}
658666
}
@@ -677,6 +685,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
677685
value: val,
678686
scope: enum_data.scope,
679687
parent: Some(item.id),
688+
docs: docs_for_attrs(&variant.node.attrs),
680689
}.lower(self.tcx));
681690
}
682691
}
@@ -759,6 +768,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
759768
value: val,
760769
items: methods.iter().map(|i| i.id).collect(),
761770
visibility: From::from(&item.vis),
771+
docs: docs_for_attrs(&item.attrs),
762772
}.lower(self.tcx));
763773
}
764774

@@ -1007,6 +1017,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10071017
scope: 0,
10081018
parent: None,
10091019
visibility: Visibility::Inherited,
1020+
docs: String::new(),
10101021
}.lower(self.tcx));
10111022
}
10121023
}
@@ -1036,7 +1047,9 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10361047
self.dumper.macro_data(MacroData {
10371048
span: sub_span,
10381049
name: data.name.clone(),
1039-
qualname: qualname.clone()
1050+
qualname: qualname.clone(),
1051+
// FIXME where do macro docs come from?
1052+
docs: String::new(),
10401053
}.lower(self.tcx));
10411054
}
10421055
}
@@ -1049,7 +1062,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10491062
qualname: qualname,
10501063
scope: data.scope,
10511064
callee_span: data.callee_span,
1052-
imported: data.imported
1065+
imported: data.imported,
10531066
}.lower(self.tcx));
10541067
}
10551068
}
@@ -1065,14 +1078,16 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10651078
&ty,
10661079
&expr,
10671080
trait_id,
1068-
Visibility::Public);
1081+
Visibility::Public,
1082+
&trait_item.attrs);
10691083
}
10701084
ast::TraitItemKind::Method(ref sig, ref body) => {
10711085
self.process_method(sig,
10721086
body.as_ref().map(|x| &**x),
10731087
trait_item.id,
10741088
trait_item.ident.name,
10751089
Visibility::Public,
1090+
&trait_item.attrs,
10761091
trait_item.span);
10771092
}
10781093
ast::TraitItemKind::Const(_, None) |
@@ -1091,14 +1106,16 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
10911106
&ty,
10921107
&expr,
10931108
impl_id,
1094-
From::from(&impl_item.vis));
1109+
From::from(&impl_item.vis),
1110+
&impl_item.attrs);
10951111
}
10961112
ast::ImplItemKind::Method(ref sig, ref body) => {
10971113
self.process_method(sig,
10981114
Some(body),
10991115
impl_item.id,
11001116
impl_item.ident.name,
11011117
From::from(&impl_item.vis),
1118+
&impl_item.attrs,
11021119
impl_item.span);
11031120
}
11041121
ast::ImplItemKind::Type(_) |
@@ -1240,6 +1257,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor for DumpVisitor<'l, 'tcx, 'll, D>
12401257
value: value,
12411258
visibility: From::from(&item.vis),
12421259
parent: None,
1260+
docs: docs_for_attrs(&item.attrs),
12431261
}.lower(self.tcx));
12441262
}
12451263

@@ -1429,6 +1447,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor for DumpVisitor<'l, 'tcx, 'll, D>
14291447
scope: 0,
14301448
parent: None,
14311449
visibility: Visibility::Inherited,
1450+
docs: String::new(),
14321451
}.lower(self.tcx));
14331452
}
14341453
}

0 commit comments

Comments
 (0)