diff options
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r-- | crates/ra_hir/src/code_model_api.rs | 32 |
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)] |
24 | pub struct Crate { | 25 | pub 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)] |
47 | pub enum Def { | 48 | pub 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)] |
61 | pub struct Module { | 61 | pub 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)] | ||
68 | pub enum ModuleDef { | ||
69 | Module(Module), | ||
70 | Def(DefId), | ||
71 | } | ||
72 | |||
73 | impl Into<ModuleDef> for Module { | ||
74 | fn into(self) -> ModuleDef { | ||
75 | ModuleDef::Module(self) | ||
76 | } | ||
77 | } | ||
78 | |||
79 | impl Into<ModuleDef> for DefId { | ||
80 | fn into(self) -> ModuleDef { | ||
81 | ModuleDef::Def(self) | ||
82 | } | ||
63 | } | 83 | } |
64 | 84 | ||
65 | pub enum ModuleSource { | 85 | pub 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 | ||