diff options
author | Aleksey Kladov <[email protected]> | 2019-12-20 11:07:23 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-12-20 11:07:23 +0000 |
commit | 94ad07af4bef6a70602e315bf315c6fce95618dd (patch) | |
tree | 2e3ab7e72f26a2dd1024479d5146fb8f7d2c2c73 /crates/ra_hir_def/src/lib.rs | |
parent | 8fc20b65035d93bcc1b3a89127916bd165a8d938 (diff) |
Introduce `ContainerId`
Diffstat (limited to 'crates/ra_hir_def/src/lib.rs')
-rw-r--r-- | crates/ra_hir_def/src/lib.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/crates/ra_hir_def/src/lib.rs b/crates/ra_hir_def/src/lib.rs index 3d42762ae..5e46db1aa 100644 --- a/crates/ra_hir_def/src/lib.rs +++ b/crates/ra_hir_def/src/lib.rs | |||
@@ -331,12 +331,18 @@ pub struct LocalTypeParamId(RawId); | |||
331 | impl_arena_id!(LocalTypeParamId); | 331 | impl_arena_id!(LocalTypeParamId); |
332 | 332 | ||
333 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 333 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
334 | pub enum AssocContainerId { | 334 | pub enum ContainerId { |
335 | ModuleId(ModuleId), | 335 | ModuleId(ModuleId), |
336 | DefWithBodyId(DefWithBodyId), | ||
337 | } | ||
338 | |||
339 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
340 | pub enum AssocContainerId { | ||
341 | ContainerId(ContainerId), | ||
336 | ImplId(ImplId), | 342 | ImplId(ImplId), |
337 | TraitId(TraitId), | 343 | TraitId(TraitId), |
338 | DefWithBodyId(DefWithBodyId), | ||
339 | } | 344 | } |
345 | impl_froms!(AssocContainerId: ContainerId); | ||
340 | 346 | ||
341 | /// A Data Type | 347 | /// A Data Type |
342 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | 348 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] |
@@ -479,13 +485,21 @@ pub trait HasModule { | |||
479 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId; | 485 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId; |
480 | } | 486 | } |
481 | 487 | ||
488 | impl HasModule for ContainerId { | ||
489 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { | ||
490 | match *self { | ||
491 | ContainerId::ModuleId(it) => it, | ||
492 | ContainerId::DefWithBodyId(it) => it.module(db), | ||
493 | } | ||
494 | } | ||
495 | } | ||
496 | |||
482 | impl HasModule for AssocContainerId { | 497 | impl HasModule for AssocContainerId { |
483 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { | 498 | fn module(&self, db: &impl db::DefDatabase) -> ModuleId { |
484 | match *self { | 499 | match *self { |
485 | AssocContainerId::ModuleId(it) => it, | 500 | AssocContainerId::ContainerId(it) => it.module(db), |
486 | AssocContainerId::ImplId(it) => it.lookup(db).container, | 501 | AssocContainerId::ImplId(it) => it.lookup(db).container, |
487 | AssocContainerId::TraitId(it) => it.lookup(db).container, | 502 | AssocContainerId::TraitId(it) => it.lookup(db).container, |
488 | AssocContainerId::DefWithBodyId(it) => it.module(db), | ||
489 | } | 503 | } |
490 | } | 504 | } |
491 | } | 505 | } |