From 566c8e321e89e5ff8996daa615cc47aea0012881 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 24 Jan 2019 18:56:38 +0300 Subject: migrate enums to new id --- crates/ra_hir/src/code_model_api.rs | 53 ++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 25 deletions(-) (limited to 'crates/ra_hir/src/code_model_api.rs') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 948718aa6..0a96d6f6d 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -16,7 +16,7 @@ use crate::{ code_model_impl::def_id_to_ast, docs::{Documentation, Docs, docs_from_ast}, module_tree::ModuleId, - ids::{FunctionId, StructId}, + ids::{FunctionId, StructId, EnumId}, }; /// hir::Crate describes a single crate. It's the main interface with which @@ -69,30 +69,37 @@ pub enum ModuleDef { Module(Module), Function(Function), Struct(Struct), + Enum(Enum), Def(DefId), } +//FIXME: change to from +impl From for ModuleDef { + fn from(it: Module) -> ModuleDef { + ModuleDef::Module(it) + } +} -impl Into for Module { - fn into(self) -> ModuleDef { - ModuleDef::Module(self) +impl From for ModuleDef { + fn from(it: Function) -> ModuleDef { + ModuleDef::Function(it) } } -impl Into for Function { - fn into(self) -> ModuleDef { - ModuleDef::Function(self) +impl From for ModuleDef { + fn from(it: Struct) -> ModuleDef { + ModuleDef::Struct(it) } } -impl Into for Struct { - fn into(self) -> ModuleDef { - ModuleDef::Struct(self) +impl From for ModuleDef { + fn from(it: Enum) -> ModuleDef { + ModuleDef::Enum(it) } } -impl Into for DefId { - fn into(self) -> ModuleDef { - ModuleDef::Def(self) +impl From for ModuleDef { + fn from(it: DefId) -> ModuleDef { + ModuleDef::Def(it) } } @@ -249,34 +256,30 @@ impl Docs for Struct { } } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Enum { - pub(crate) def_id: DefId, + pub(crate) id: EnumId, } impl Enum { - pub(crate) fn new(def_id: DefId) -> Self { - Enum { def_id } - } - - pub fn def_id(&self) -> DefId { - self.def_id + pub fn module(&self, db: &impl HirDatabase) -> Module { + self.id.loc(db).module } pub fn name(&self, db: &impl HirDatabase) -> Option { - db.enum_data(self.def_id).name.clone() + db.enum_data(*self).name.clone() } pub fn variants(&self, db: &impl HirDatabase) -> Vec<(Name, EnumVariant)> { - db.enum_data(self.def_id).variants.clone() + db.enum_data(*self).variants.clone() } pub fn source(&self, db: &impl HirDatabase) -> (HirFileId, TreeArc) { - def_id_to_ast(db, self.def_id) + self.id.loc(db).source(db) } pub fn generic_params(&self, db: &impl HirDatabase) -> Arc { - db.generic_params(self.def_id.into()) + db.generic_params((*self).into()) } } -- cgit v1.2.3