aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model_api.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-23 20:14:13 +0000
committerAleksey Kladov <[email protected]>2019-01-24 10:29:19 +0000
commit3ab1519cb27b927074ed7fbbb18a856e6e7fabb8 (patch)
tree692c7a256604e188d38890966290bd1637d7dd60 /crates/ra_hir/src/code_model_api.rs
parentcfb085ded8d61d7b744d0a83ecbb3da254f6ab9f (diff)
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
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r--crates/ra_hir/src/code_model_api.rs32
1 files changed, 26 insertions, 6 deletions
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::{
14 adt::VariantData, 14 adt::VariantData,
15 generics::GenericParams, 15 generics::GenericParams,
16 code_model_impl::def_id_to_ast, 16 code_model_impl::def_id_to_ast,
17 docs::{Documentation, Docs, docs_from_ast} 17 docs::{Documentation, Docs, docs_from_ast},
18 module_tree::ModuleId,
18}; 19};
19 20
20/// hir::Crate describes a single crate. It's the main interface with which 21/// hir::Crate describes a single crate. It's the main interface with which
21/// a crate's dependencies interact. Mostly, it should be just a proxy for the 22/// a crate's dependencies interact. Mostly, it should be just a proxy for the
22/// root module. 23/// root module.
23#[derive(Debug, Clone, PartialEq, Eq, Hash)] 24#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
24pub struct Crate { 25pub struct Crate {
25 pub(crate) crate_id: CrateId, 26 pub(crate) crate_id: CrateId,
26} 27}
@@ -45,7 +46,6 @@ impl Crate {
45 46
46#[derive(Debug)] 47#[derive(Debug)]
47pub enum Def { 48pub enum Def {
48 Module(Module),
49 Struct(Struct), 49 Struct(Struct),
50 Enum(Enum), 50 Enum(Enum),
51 EnumVariant(EnumVariant), 51 EnumVariant(EnumVariant),
@@ -57,9 +57,29 @@ pub enum Def {
57 Item, 57 Item,
58} 58}
59 59
60#[derive(Debug, Clone, PartialEq, Eq, Hash)] 60#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
61pub struct Module { 61pub struct Module {
62 pub(crate) def_id: DefId, 62 pub(crate) krate: CrateId,
63 pub(crate) module_id: ModuleId,
64}
65
66/// The defs which can be visible in the module.
67#[derive(Debug, Clone, Copy, PartialEq, Eq)]
68pub enum ModuleDef {
69 Module(Module),
70 Def(DefId),
71}
72
73impl Into<ModuleDef> for Module {
74 fn into(self) -> ModuleDef {
75 ModuleDef::Module(self)
76 }
77}
78
79impl Into<ModuleDef> for DefId {
80 fn into(self) -> ModuleDef {
81 ModuleDef::Def(self)
82 }
63} 83}
64 84
65pub enum ModuleSource { 85pub enum ModuleSource {
@@ -149,7 +169,7 @@ impl Module {
149 self.scope_impl(db) 169 self.scope_impl(db)
150 } 170 }
151 171
152 pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> PerNs<DefId> { 172 pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> PerNs<ModuleDef> {
153 self.resolve_path_impl(db, path) 173 self.resolve_path_impl(db, path)
154 } 174 }
155 175