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.
// Pick the def data. This need not be unique, but the more
// information we encapsulate into
let def_data = match i.node {
// 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);
};
self.insert_def(i.id, NodeItem(i), def_data);
fn visit_foreign_item(&mut self, foreign_item: &'ast ForeignItem) {
self.insert_def(foreign_item.id,
NodeForeignItem(foreign_item),
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;
let parent_node = self.parent_node;
self.parent_node = foreign_item.id;
fn visit_trait_item(&mut self, ti: &'ast TraitItem) {
let def_data = match ti.node {
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));
};
self.insert(ti.id, NodeTraitItem(ti));
fn visit_impl_item(&mut self, ii: &'ast ImplItem) {
let def_data = match ii.node {
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);
};
self.insert_def(ii.id, NodeImplItem(ii), def_data);
Misc,
// Different kinds of items and item-like things:
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,
MacroDef(ast::Name),
ClosureExpr,
StructCtor, // implicit ctor for a tuple-like struct
Initializer, // initializer for a const
Binding(ast::Name), // pattern binding
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),
pub fn as_interned_str(&self) -> InternedString {
use self::DefPathData::*;
match *self {
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) |
MacroDef(name) |
TypeParam(name) |
LifetimeDef(name) |
EnumVariant(name) |
Binding(name) |
Field(name) => {
name.as_str()
}
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}}")
// note that this does not show up in user printouts
CrateRoot => {
InternedString::new("{{root}}")