Skip to content

Commit d849236

Browse files
committed
signature info for other items (mods, fns, methods, etc.)
1 parent e9ecd88 commit d849236

File tree

6 files changed

+106
-50
lines changed

6 files changed

+106
-50
lines changed

src/librustc_save_analysis/data.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ pub struct EnumData {
135135
pub variants: Vec<NodeId>,
136136
pub visibility: Visibility,
137137
pub docs: String,
138+
pub sig: Signature,
138139
}
139140

140141
/// Data for extern crates.
@@ -169,6 +170,7 @@ pub struct FunctionData {
169170
pub visibility: Visibility,
170171
pub parent: Option<DefId>,
171172
pub docs: String,
173+
pub sig: Signature,
172174
}
173175

174176
/// Data about a function call.
@@ -253,6 +255,7 @@ pub struct MethodData {
253255
pub parent: Option<DefId>,
254256
pub visibility: Visibility,
255257
pub docs: String,
258+
pub sig: Signature,
256259
}
257260

258261
/// Data for modules.
@@ -267,6 +270,7 @@ pub struct ModData {
267270
pub items: Vec<NodeId>,
268271
pub visibility: Visibility,
269272
pub docs: String,
273+
pub sig: Signature,
270274
}
271275

272276
/// Data for a reference to a module.
@@ -304,6 +308,7 @@ pub struct StructVariantData {
304308
pub scope: NodeId,
305309
pub parent: Option<DefId>,
306310
pub docs: String,
311+
pub sig: Signature,
307312
}
308313

309314
#[derive(Debug, RustcEncodable)]
@@ -317,6 +322,7 @@ pub struct TraitData {
317322
pub items: Vec<NodeId>,
318323
pub visibility: Visibility,
319324
pub docs: String,
325+
pub sig: Signature,
320326
}
321327

322328
#[derive(Debug, RustcEncodable)]
@@ -330,6 +336,7 @@ pub struct TupleVariantData {
330336
pub scope: NodeId,
331337
pub parent: Option<DefId>,
332338
pub docs: String,
339+
pub sig: Signature,
333340
}
334341

335342
/// Data for a typedef.
@@ -343,6 +350,7 @@ pub struct TypeDefData {
343350
pub visibility: Visibility,
344351
pub parent: Option<DefId>,
345352
pub docs: String,
353+
pub sig: Option<Signature>,
346354
}
347355

348356
/// Data for a reference to a type or trait.
@@ -412,7 +420,7 @@ pub struct VariableRefData {
412420
/// Encodes information about the signature of a definition. This should have
413421
/// enough information to create a nice display about a definition without
414422
/// access to the source code.
415-
#[derive(Debug, RustcEncodable)]
423+
#[derive(Clone, Debug, RustcEncodable)]
416424
pub struct Signature {
417425
pub span: Span,
418426
pub text: String,
@@ -426,7 +434,7 @@ pub struct Signature {
426434

427435
/// An element of a signature. `start` and `end` are byte offsets into the `text`
428436
/// of the parent `Signature`.
429-
#[derive(Debug, RustcEncodable)]
437+
#[derive(Clone, Debug, RustcEncodable)]
430438
pub struct SigElement {
431439
pub id: DefId,
432440
pub start: usize,

src/librustc_save_analysis/dump_visitor.rs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
445445
parent: trait_id,
446446
visibility: vis,
447447
docs: docs_for_attrs(attrs),
448+
sig: method_data.sig,
448449
}.lower(self.tcx));
449450
}
450451

@@ -516,6 +517,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
516517
visibility: Visibility::Inherited,
517518
parent: None,
518519
docs: String::new(),
520+
sig: None,
519521
}.lower(self.tcx));
520522
}
521523
}
@@ -621,9 +623,6 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
621623
};
622624

623625
if !self.span.filter_generated(sub_span, item.span) {
624-
let mut sig = self.sig_base(item);
625-
sig.ident_start = sig.text.find(&name).expect("Name not in struct signature?");
626-
sig.ident_end = sig.ident_start + name.len();
627626
self.dumper.struct_data(StructData {
628627
span: sub_span.expect("No span found for struct"),
629628
id: item.id,
@@ -635,7 +634,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
635634
fields: fields,
636635
visibility: From::from(&item.vis),
637636
docs: docs_for_attrs(&item.attrs),
638-
sig: sig,
637+
sig: self.save_ctxt.sig_base(item),
639638
}.lower(self.tcx));
640639
}
641640

@@ -647,18 +646,6 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
647646
self.process_generic_params(ty_params, item.span, &qualname, item.id);
648647
}
649648

650-
fn sig_base(&self, item: &ast::Item) -> Signature {
651-
let text = self.span.signature_string_for_span(item.span).expect("Couldn't make signature");
652-
Signature {
653-
span: mk_sp(item.span.lo, item.span.lo + BytePos(text.len() as u32)),
654-
text: text,
655-
ident_start: 0,
656-
ident_end: 0,
657-
defs: vec![],
658-
refs: vec![],
659-
}
660-
}
661-
662649
fn process_enum(&mut self,
663650
item: &'l ast::Item,
664651
enum_definition: &'l ast::EnumDef,
@@ -679,6 +666,18 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
679666
qualname.push_str("::");
680667
qualname.push_str(&name);
681668

669+
let text = self.span.signature_string_for_span(variant.span);
670+
let ident_start = text.find(&name).unwrap();
671+
let ident_end = ident_start + name.len();
672+
let sig = Signature {
673+
span: variant.span,
674+
text: text,
675+
ident_start: ident_start,
676+
ident_end: ident_end,
677+
defs: vec![],
678+
refs: vec![],
679+
};
680+
682681
match variant.node.data {
683682
ast::VariantData::Struct(ref fields, _) => {
684683
let sub_span = self.span.span_for_first_ident(variant.span);
@@ -700,6 +699,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
700699
scope: enum_data.scope,
701700
parent: Some(make_def_id(item.id, &self.tcx.map)),
702701
docs: docs_for_attrs(&variant.node.attrs),
702+
sig: sig,
703703
}.lower(self.tcx));
704704
}
705705
}
@@ -725,6 +725,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
725725
scope: enum_data.scope,
726726
parent: Some(make_def_id(item.id, &self.tcx.map)),
727727
docs: docs_for_attrs(&variant.node.attrs),
728+
sig: sig,
728729
}.lower(self.tcx));
729730
}
730731
}
@@ -809,6 +810,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
809810
items: methods.iter().map(|i| i.id).collect(),
810811
visibility: From::from(&item.vis),
811812
docs: docs_for_attrs(&item.attrs),
813+
sig: self.save_ctxt.sig_base(item),
812814
}.lower(self.tcx));
813815
}
814816

@@ -1289,10 +1291,10 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
12891291
Struct(ref def, ref ty_params) => self.process_struct(item, def, ty_params),
12901292
Enum(ref def, ref ty_params) => self.process_enum(item, def, ty_params),
12911293
Impl(..,
1292-
ref ty_params,
1293-
ref trait_ref,
1294-
ref typ,
1295-
ref impl_items) => {
1294+
ref ty_params,
1295+
ref trait_ref,
1296+
ref typ,
1297+
ref impl_items) => {
12961298
self.process_impl(item, ty_params, trait_ref, &typ, impl_items)
12971299
}
12981300
Trait(_, ref generics, ref trait_refs, ref methods) =>
@@ -1315,6 +1317,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
13151317
visibility: From::from(&item.vis),
13161318
parent: None,
13171319
docs: docs_for_attrs(&item.attrs),
1320+
sig: Some(self.save_ctxt.sig_base(item)),
13181321
}.lower(self.tcx));
13191322
}
13201323

src/librustc_save_analysis/external_data.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ pub struct EnumData {
9797
pub variants: Vec<DefId>,
9898
pub visibility: Visibility,
9999
pub docs: String,
100+
pub sig: Signature,
100101
}
101102

102103
impl Lower for data::EnumData {
@@ -113,6 +114,7 @@ impl Lower for data::EnumData {
113114
variants: self.variants.into_iter().map(|id| make_def_id(id, &tcx.map)).collect(),
114115
visibility: self.visibility,
115116
docs: self.docs,
117+
sig: self.sig.lower(tcx),
116118
}
117119
}
118120
}
@@ -176,6 +178,7 @@ pub struct FunctionData {
176178
pub visibility: Visibility,
177179
pub parent: Option<DefId>,
178180
pub docs: String,
181+
pub sig: Signature,
179182
}
180183

181184
impl Lower for data::FunctionData {
@@ -193,6 +196,7 @@ impl Lower for data::FunctionData {
193196
visibility: self.visibility,
194197
parent: self.parent,
195198
docs: self.docs,
199+
sig: self.sig.lower(tcx),
196200
}
197201
}
198202
}
@@ -341,6 +345,7 @@ pub struct MethodData {
341345
pub visibility: Visibility,
342346
pub parent: Option<DefId>,
343347
pub docs: String,
348+
pub sig: Signature,
344349
}
345350

346351
impl Lower for data::MethodData {
@@ -358,6 +363,7 @@ impl Lower for data::MethodData {
358363
visibility: self.visibility,
359364
parent: self.parent,
360365
docs: self.docs,
366+
sig: self.sig.lower(tcx),
361367
}
362368
}
363369
}
@@ -374,6 +380,7 @@ pub struct ModData {
374380
pub items: Vec<DefId>,
375381
pub visibility: Visibility,
376382
pub docs: String,
383+
pub sig: Signature,
377384
}
378385

379386
impl Lower for data::ModData {
@@ -390,6 +397,7 @@ impl Lower for data::ModData {
390397
items: self.items.into_iter().map(|id| make_def_id(id, &tcx.map)).collect(),
391398
visibility: self.visibility,
392399
docs: self.docs,
400+
sig: self.sig.lower(tcx),
393401
}
394402
}
395403
}
@@ -462,6 +470,7 @@ pub struct StructVariantData {
462470
pub scope: DefId,
463471
pub parent: Option<DefId>,
464472
pub docs: String,
473+
pub sig: Signature,
465474
}
466475

467476
impl Lower for data::StructVariantData {
@@ -478,6 +487,7 @@ impl Lower for data::StructVariantData {
478487
scope: make_def_id(self.scope, &tcx.map),
479488
parent: self.parent,
480489
docs: self.docs,
490+
sig: self.sig.lower(tcx),
481491
}
482492
}
483493
}
@@ -493,6 +503,7 @@ pub struct TraitData {
493503
pub items: Vec<DefId>,
494504
pub visibility: Visibility,
495505
pub docs: String,
506+
pub sig: Signature,
496507
}
497508

498509
impl Lower for data::TraitData {
@@ -509,6 +520,7 @@ impl Lower for data::TraitData {
509520
items: self.items.into_iter().map(|id| make_def_id(id, &tcx.map)).collect(),
510521
visibility: self.visibility,
511522
docs: self.docs,
523+
sig: self.sig.lower(tcx),
512524
}
513525
}
514526
}
@@ -524,6 +536,7 @@ pub struct TupleVariantData {
524536
pub scope: DefId,
525537
pub parent: Option<DefId>,
526538
pub docs: String,
539+
pub sig: Signature,
527540
}
528541

529542
impl Lower for data::TupleVariantData {
@@ -540,6 +553,7 @@ impl Lower for data::TupleVariantData {
540553
scope: make_def_id(self.scope, &tcx.map),
541554
parent: self.parent,
542555
docs: self.docs,
556+
sig: self.sig.lower(tcx),
543557
}
544558
}
545559
}
@@ -555,6 +569,7 @@ pub struct TypeDefData {
555569
pub visibility: Visibility,
556570
pub parent: Option<DefId>,
557571
pub docs: String,
572+
pub sig: Option<Signature>,
558573
}
559574

560575
impl Lower for data::TypeDefData {
@@ -570,6 +585,7 @@ impl Lower for data::TypeDefData {
570585
visibility: self.visibility,
571586
parent: self.parent,
572587
docs: self.docs,
588+
sig: self.sig.map(|s| s.lower(tcx)),
573589
}
574590
}
575591
}
@@ -705,7 +721,7 @@ impl Lower for data::VariableRefData {
705721
}
706722
}
707723

708-
#[derive(Debug, RustcEncodable)]
724+
#[derive(Clone, Debug, RustcEncodable)]
709725
pub struct Signature {
710726
pub span: SpanData,
711727
pub text: String,

0 commit comments

Comments
 (0)