From 3ab1519cb27b927074ed7fbbb18a856e6e7fabb8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 23 Jan 2019 23:14:13 +0300 Subject: Change ids strategy this is a part of larghish hir refactoring which aims to * replace per-source-root module trees with per crate trees * switch from a monotyped DedId to type-specific ids --- crates/ra_hir/src/code_model_api.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 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 3ff07bd60..f59a60c07 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -14,13 +14,14 @@ use crate::{ adt::VariantData, generics::GenericParams, code_model_impl::def_id_to_ast, - docs::{Documentation, Docs, docs_from_ast} + docs::{Documentation, Docs, docs_from_ast}, + module_tree::ModuleId, }; /// hir::Crate describes a single crate. It's the main interface with which /// a crate's dependencies interact. Mostly, it should be just a proxy for the /// root module. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Crate { pub(crate) crate_id: CrateId, } @@ -45,7 +46,6 @@ impl Crate { #[derive(Debug)] pub enum Def { - Module(Module), Struct(Struct), Enum(Enum), EnumVariant(EnumVariant), @@ -57,9 +57,29 @@ pub enum Def { Item, } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Module { - pub(crate) def_id: DefId, + pub(crate) krate: CrateId, + pub(crate) module_id: ModuleId, +} + +/// The defs which can be visible in the module. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ModuleDef { + Module(Module), + Def(DefId), +} + +impl Into for Module { + fn into(self) -> ModuleDef { + ModuleDef::Module(self) + } +} + +impl Into for DefId { + fn into(self) -> ModuleDef { + ModuleDef::Def(self) + } } pub enum ModuleSource { @@ -149,7 +169,7 @@ impl Module { self.scope_impl(db) } - pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> PerNs { + pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> PerNs { self.resolve_path_impl(db, path) } -- cgit v1.2.3