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

View file

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

View file

@ -201,7 +201,7 @@ impl_intern_key!(FunctionId);
#[derive(Debug, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct FunctionLoc { pub struct FunctionLoc {
pub container: FunctionContainerId, pub container: ContainerId,
pub ast_id: AstId<ast::FnDef>, 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)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct StructOrUnionId(salsa::InternId); pub struct StructOrUnionId(salsa::InternId);
impl_intern_key!(StructOrUnionId); impl_intern_key!(StructOrUnionId);
@ -335,7 +328,7 @@ impl_intern_key!(TypeAliasId);
#[derive(Debug, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct TypeAliasLoc { pub struct TypeAliasLoc {
pub container: TypeAliasContainerId, pub container: ContainerId,
pub ast_id: AstId<ast::TypeAliasDef>, 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)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ImplId(salsa::InternId); pub struct ImplId(salsa::InternId);
impl_intern_key!(ImplId); 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 /// A Data Type
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum AdtId { pub enum AdtId {
@ -488,9 +481,9 @@ pub trait HasModule {
impl HasModule for FunctionLoc { impl HasModule for FunctionLoc {
fn module(&self, db: &impl db::DefDatabase2) -> ModuleId { fn module(&self, db: &impl db::DefDatabase2) -> ModuleId {
match self.container { match self.container {
FunctionContainerId::ModuleId(it) => it, ContainerId::ModuleId(it) => it,
FunctionContainerId::ImplId(it) => it.module(db), ContainerId::ImplId(it) => it.module(db),
FunctionContainerId::TraitId(it) => it.module(db), ContainerId::TraitId(it) => it.module(db),
} }
} }
} }
@ -498,9 +491,9 @@ impl HasModule for FunctionLoc {
impl HasModule for TypeAliasLoc { impl HasModule for TypeAliasLoc {
fn module(&self, db: &impl db::DefDatabase2) -> ModuleId { fn module(&self, db: &impl db::DefDatabase2) -> ModuleId {
match self.container { match self.container {
TypeAliasContainerId::ModuleId(it) => it, ContainerId::ModuleId(it) => it,
TypeAliasContainerId::ImplId(it) => it.module(db), ContainerId::ImplId(it) => it.module(db),
TypeAliasContainerId::TraitId(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, per_ns::PerNs, raw, CrateDefMap, ModuleData, Resolution, ResolveMode,
}, },
path::{Path, PathKind}, 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, 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 { pub(super) fn collect_defs(db: &impl DefDatabase2, mut def_map: CrateDefMap) -> CrateDefMap {
@ -674,7 +674,7 @@ where
let def: PerNs = match def.kind { let def: PerNs = match def.kind {
raw::DefKind::Function(ast_id) => { raw::DefKind::Function(ast_id) => {
let def = FunctionLoc { let def = FunctionLoc {
container: FunctionContainerId::ModuleId(module), container: ContainerId::ModuleId(module),
ast_id: AstId::new(self.file_id, ast_id), ast_id: AstId::new(self.file_id, ast_id),
} }
.intern(self.def_collector.db); .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::Trait(ast_id) => PerNs::types(TraitId::from_ast_id(ctx, ast_id).into()),
raw::DefKind::TypeAlias(ast_id) => { raw::DefKind::TypeAlias(ast_id) => {
let def = TypeAliasLoc { let def = TypeAliasLoc {
container: TypeAliasContainerId::ModuleId(module), container: ContainerId::ModuleId(module),
ast_id: AstId::new(self.file_id, ast_id), ast_id: AstId::new(self.file_id, ast_id),
} }
.intern(self.def_collector.db); .intern(self.def_collector.db);

View file

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