refactor DefPathData variants
In particular, remove the name from the Impl, since that name is synthesized and is not predictable (it tends to break incr. comp.). Also rename the variants to be a bit more uniform and remove some distinctions that we were not really taking advantage of anywhere.
This commit is contained in:
parent
7b6270b537
commit
5e26508744
@ -133,11 +133,16 @@ impl<'ast> Visitor<'ast> for NodeCollector<'ast> {
|
||||
// Pick the def data. This need not be unique, but the more
|
||||
// information we encapsulate into
|
||||
let def_data = match i.node {
|
||||
ItemDefaultImpl(..) | ItemImpl(..) => DefPathData::Impl(i.name),
|
||||
ItemEnum(..) | ItemStruct(..) | ItemTrait(..) => DefPathData::Type(i.name),
|
||||
ItemExternCrate(..) | ItemMod(..) => DefPathData::Mod(i.name),
|
||||
ItemStatic(..) | ItemConst(..) | ItemFn(..) => DefPathData::Value(i.name),
|
||||
_ => DefPathData::Misc,
|
||||
ItemDefaultImpl(..) | ItemImpl(..) =>
|
||||
DefPathData::Impl,
|
||||
ItemEnum(..) | ItemStruct(..) | ItemTrait(..) |
|
||||
ItemExternCrate(..) | ItemMod(..) | ItemForeignMod(..) |
|
||||
ItemTy(..) =>
|
||||
DefPathData::TypeNs(i.name),
|
||||
ItemStatic(..) | ItemConst(..) | ItemFn(..) =>
|
||||
DefPathData::ValueNs(i.name),
|
||||
ItemUse(..) =>
|
||||
DefPathData::Misc,
|
||||
};
|
||||
|
||||
self.insert_def(i.id, NodeItem(i), def_data);
|
||||
@ -202,7 +207,7 @@ impl<'ast> Visitor<'ast> for NodeCollector<'ast> {
|
||||
fn visit_foreign_item(&mut self, foreign_item: &'ast ForeignItem) {
|
||||
self.insert_def(foreign_item.id,
|
||||
NodeForeignItem(foreign_item),
|
||||
DefPathData::Value(foreign_item.name));
|
||||
DefPathData::ValueNs(foreign_item.name));
|
||||
|
||||
let parent_node = self.parent_node;
|
||||
self.parent_node = foreign_item.id;
|
||||
@ -222,8 +227,8 @@ impl<'ast> Visitor<'ast> for NodeCollector<'ast> {
|
||||
|
||||
fn visit_trait_item(&mut self, ti: &'ast TraitItem) {
|
||||
let def_data = match ti.node {
|
||||
MethodTraitItem(..) | ConstTraitItem(..) => DefPathData::Value(ti.name),
|
||||
TypeTraitItem(..) => DefPathData::Type(ti.name),
|
||||
MethodTraitItem(..) | ConstTraitItem(..) => DefPathData::ValueNs(ti.name),
|
||||
TypeTraitItem(..) => DefPathData::TypeNs(ti.name),
|
||||
};
|
||||
|
||||
self.insert(ti.id, NodeTraitItem(ti));
|
||||
@ -246,8 +251,8 @@ impl<'ast> Visitor<'ast> for NodeCollector<'ast> {
|
||||
|
||||
fn visit_impl_item(&mut self, ii: &'ast ImplItem) {
|
||||
let def_data = match ii.node {
|
||||
ImplItemKind::Method(..) | ImplItemKind::Const(..) => DefPathData::Value(ii.name),
|
||||
ImplItemKind::Type(..) => DefPathData::Type(ii.name),
|
||||
ImplItemKind::Method(..) | ImplItemKind::Const(..) => DefPathData::ValueNs(ii.name),
|
||||
ImplItemKind::Type(..) => DefPathData::TypeNs(ii.name),
|
||||
};
|
||||
|
||||
self.insert_def(ii.id, NodeImplItem(ii), def_data);
|
||||
|
@ -144,10 +144,9 @@ pub enum DefPathData {
|
||||
Misc,
|
||||
|
||||
// Different kinds of items and item-like things:
|
||||
Impl(ast::Name),
|
||||
Type(ast::Name),
|
||||
Mod(ast::Name),
|
||||
Value(ast::Name),
|
||||
Impl,
|
||||
TypeNs(ast::Name), // something in the type NS
|
||||
ValueNs(ast::Name), // something in the value NS
|
||||
MacroDef(ast::Name),
|
||||
ClosureExpr,
|
||||
|
||||
@ -159,10 +158,6 @@ pub enum DefPathData {
|
||||
StructCtor, // implicit ctor for a tuple-like struct
|
||||
Initializer, // initializer for a const
|
||||
Binding(ast::Name), // pattern binding
|
||||
|
||||
// An external crate that does not have an `extern crate` in this
|
||||
// crate.
|
||||
DetachedCrate(ast::Name),
|
||||
}
|
||||
|
||||
impl Definitions {
|
||||
@ -247,20 +242,21 @@ impl DefPathData {
|
||||
pub fn as_interned_str(&self) -> InternedString {
|
||||
use self::DefPathData::*;
|
||||
match *self {
|
||||
Impl(name) |
|
||||
Type(name) |
|
||||
Mod(name) |
|
||||
Value(name) |
|
||||
TypeNs(name) |
|
||||
ValueNs(name) |
|
||||
MacroDef(name) |
|
||||
TypeParam(name) |
|
||||
LifetimeDef(name) |
|
||||
EnumVariant(name) |
|
||||
DetachedCrate(name) |
|
||||
Binding(name) |
|
||||
Field(name) => {
|
||||
name.as_str()
|
||||
}
|
||||
|
||||
Impl => {
|
||||
InternedString::new("{{impl}}")
|
||||
}
|
||||
|
||||
// note that this does not show up in user printouts
|
||||
CrateRoot => {
|
||||
InternedString::new("{{root}}")
|
||||
|
Loading…
Reference in New Issue
Block a user