Don't duplicate ContainerId type

This commit is contained in:
Aleksey Kladov 2019-11-20 17:49:57 +03:00
parent 64c21ed195
commit ee95a35664
5 changed files with 35 additions and 42 deletions

View File

@ -12,8 +12,8 @@ use hir_def::{
builtin_type::BuiltinType,
traits::TraitData,
type_ref::{Mutability, TypeRef},
AssocItemId, CrateModuleId, FunctionContainerId, HasModule, ImplId, LocalEnumVariantId,
LocalStructFieldId, Lookup, ModuleId, TypeAliasContainerId, UnionId,
AssocItemId, ContainerId, CrateModuleId, HasModule, ImplId, LocalEnumVariantId,
LocalStructFieldId, Lookup, ModuleId, UnionId,
};
use hir_expand::{
diagnostics::DiagnosticSink,
@ -697,9 +697,9 @@ impl Function {
pub fn container(self, db: &impl DefDatabase) -> Option<Container> {
match self.id.lookup(db).container {
FunctionContainerId::TraitId(it) => Some(Container::Trait(it.into())),
FunctionContainerId::ImplId(it) => Some(Container::ImplBlock(it.into())),
FunctionContainerId::ModuleId(_) => None,
ContainerId::TraitId(it) => Some(Container::Trait(it.into())),
ContainerId::ImplId(it) => Some(Container::ImplBlock(it.into())),
ContainerId::ModuleId(_) => None,
}
}
@ -979,9 +979,9 @@ impl TypeAlias {
pub fn container(self, db: &impl DefDatabase) -> Option<Container> {
match self.id.lookup(db).container {
TypeAliasContainerId::TraitId(it) => Some(Container::Trait(it.into())),
TypeAliasContainerId::ImplId(it) => Some(Container::ImplBlock(it.into())),
TypeAliasContainerId::ModuleId(_) => None,
ContainerId::TraitId(it) => Some(Container::Trait(it.into())),
ContainerId::ImplId(it) => Some(Container::ImplBlock(it.into())),
ContainerId::ModuleId(_) => None,
}
}

View File

@ -9,8 +9,8 @@ use hir_expand::AstId;
use ra_syntax::ast;
use crate::{
db::DefDatabase2, type_ref::TypeRef, AssocItemId, AstItemDef, ConstId, FunctionContainerId,
FunctionLoc, ImplId, Intern, LocationCtx, TypeAliasContainerId, TypeAliasLoc,
db::DefDatabase2, type_ref::TypeRef, AssocItemId, AstItemDef, ConstId, ContainerId,
FunctionLoc, ImplId, Intern, LocationCtx, TypeAliasLoc,
};
#[derive(Debug, Clone, PartialEq, Eq)]
@ -37,7 +37,7 @@ impl ImplData {
.map(|item_node| match item_node {
ast::ImplItem::FnDef(it) => {
let def = FunctionLoc {
container: FunctionContainerId::ImplId(id),
container: ContainerId::ImplId(id),
ast_id: AstId::new(src.file_id, items.ast_id(&it)),
}
.intern(db);
@ -48,7 +48,7 @@ impl ImplData {
}
ast::ImplItem::TypeAliasDef(it) => {
let def = TypeAliasLoc {
container: TypeAliasContainerId::ImplId(id),
container: ContainerId::ImplId(id),
ast_id: AstId::new(src.file_id, items.ast_id(&it)),
}
.intern(db);

View File

@ -201,7 +201,7 @@ impl_intern_key!(FunctionId);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct FunctionLoc {
pub container: FunctionContainerId,
pub container: ContainerId,
pub ast_id: AstId<ast::FnDef>,
}
@ -219,13 +219,6 @@ impl Lookup for FunctionId {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FunctionContainerId {
ModuleId(ModuleId),
ImplId(ImplId),
TraitId(TraitId),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct StructOrUnionId(salsa::InternId);
impl_intern_key!(StructOrUnionId);
@ -335,7 +328,7 @@ impl_intern_key!(TypeAliasId);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct TypeAliasLoc {
pub container: TypeAliasContainerId,
pub container: ContainerId,
pub ast_id: AstId<ast::TypeAliasDef>,
}
@ -353,13 +346,6 @@ impl Lookup for TypeAliasId {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TypeAliasContainerId {
ModuleId(ModuleId),
ImplId(ImplId),
TraitId(TraitId),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ImplId(salsa::InternId);
impl_intern_key!(ImplId);
@ -391,6 +377,13 @@ macro_rules! impl_froms {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ContainerId {
ModuleId(ModuleId),
ImplId(ImplId),
TraitId(TraitId),
}
/// A Data Type
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum AdtId {
@ -488,9 +481,9 @@ pub trait HasModule {
impl HasModule for FunctionLoc {
fn module(&self, db: &impl db::DefDatabase2) -> ModuleId {
match self.container {
FunctionContainerId::ModuleId(it) => it,
FunctionContainerId::ImplId(it) => it.module(db),
FunctionContainerId::TraitId(it) => it.module(db),
ContainerId::ModuleId(it) => it,
ContainerId::ImplId(it) => it.module(db),
ContainerId::TraitId(it) => it.module(db),
}
}
}
@ -498,9 +491,9 @@ impl HasModule for FunctionLoc {
impl HasModule for TypeAliasLoc {
fn module(&self, db: &impl db::DefDatabase2) -> ModuleId {
match self.container {
TypeAliasContainerId::ModuleId(it) => it,
TypeAliasContainerId::ImplId(it) => it.module(db),
TypeAliasContainerId::TraitId(it) => it.module(db),
ContainerId::ModuleId(it) => it,
ContainerId::ImplId(it) => it.module(db),
ContainerId::TraitId(it) => it.module(db),
}
}
}

View File

@ -19,9 +19,9 @@ use crate::{
per_ns::PerNs, raw, CrateDefMap, ModuleData, Resolution, ResolveMode,
},
path::{Path, PathKind},
AdtId, AstId, AstItemDef, ConstId, CrateModuleId, EnumId, EnumVariantId, FunctionContainerId,
AdtId, AstId, AstItemDef, ConstId, ContainerId, CrateModuleId, EnumId, EnumVariantId,
FunctionLoc, ImplId, Intern, LocationCtx, ModuleDefId, ModuleId, StaticId, StructId,
StructOrUnionId, TraitId, TypeAliasContainerId, TypeAliasLoc, UnionId,
StructOrUnionId, TraitId, TypeAliasLoc, UnionId,
};
pub(super) fn collect_defs(db: &impl DefDatabase2, mut def_map: CrateDefMap) -> CrateDefMap {
@ -674,7 +674,7 @@ where
let def: PerNs = match def.kind {
raw::DefKind::Function(ast_id) => {
let def = FunctionLoc {
container: FunctionContainerId::ModuleId(module),
container: ContainerId::ModuleId(module),
ast_id: AstId::new(self.file_id, ast_id),
}
.intern(self.def_collector.db);
@ -699,7 +699,7 @@ where
raw::DefKind::Trait(ast_id) => PerNs::types(TraitId::from_ast_id(ctx, ast_id).into()),
raw::DefKind::TypeAlias(ast_id) => {
let def = TypeAliasLoc {
container: TypeAliasContainerId::ModuleId(module),
container: ContainerId::ModuleId(module),
ast_id: AstId::new(self.file_id, ast_id),
}
.intern(self.def_collector.db);

View File

@ -11,8 +11,8 @@ use ra_syntax::ast::{self, NameOwner};
use rustc_hash::FxHashMap;
use crate::{
db::DefDatabase2, AssocItemId, AstItemDef, ConstId, FunctionContainerId, FunctionLoc, Intern,
LocationCtx, ModuleDefId, ModuleId, TraitId, TypeAliasContainerId, TypeAliasLoc,
db::DefDatabase2, AssocItemId, AstItemDef, ConstId, ContainerId, FunctionLoc, Intern,
LocationCtx, ModuleDefId, ModuleId, TraitId, TypeAliasLoc,
};
#[derive(Debug, Clone, PartialEq, Eq)]
@ -35,14 +35,14 @@ impl TraitData {
.impl_items()
.map(|item_node| match item_node {
ast::ImplItem::FnDef(it) => FunctionLoc {
container: FunctionContainerId::TraitId(tr),
container: ContainerId::TraitId(tr),
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
}
.intern(db)
.into(),
ast::ImplItem::ConstDef(it) => ConstId::from_ast(ctx, &it).into(),
ast::ImplItem::TypeAliasDef(it) => TypeAliasLoc {
container: TypeAliasContainerId::TraitId(tr),
container: ContainerId::TraitId(tr),
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
}
.intern(db)