diff options
author | Florian Diebold <[email protected]> | 2021-06-13 12:00:34 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2021-06-13 12:00:34 +0100 |
commit | 5ca71a19903cea277ed8a347b36cffeca6b99922 (patch) | |
tree | 20862ee6b7faf2a13ed810af4e8a80ff2cfbab83 /crates/hir_def | |
parent | adbee621a75f47e0da4f30d7205dfce009138865 (diff) |
Make block-local trait impls work
As long as either the trait or the implementing type are defined in the
same block.
Diffstat (limited to 'crates/hir_def')
-rw-r--r-- | crates/hir_def/src/lib.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/crates/hir_def/src/lib.rs b/crates/hir_def/src/lib.rs index 303083c6d..bb174aec8 100644 --- a/crates/hir_def/src/lib.rs +++ b/crates/hir_def/src/lib.rs | |||
@@ -112,6 +112,10 @@ impl ModuleId { | |||
112 | self.def_map(db).containing_module(self.local_id) | 112 | self.def_map(db).containing_module(self.local_id) |
113 | } | 113 | } |
114 | 114 | ||
115 | pub fn containing_block(&self) -> Option<BlockId> { | ||
116 | self.block | ||
117 | } | ||
118 | |||
115 | /// Returns `true` if this module represents a block expression. | 119 | /// Returns `true` if this module represents a block expression. |
116 | /// | 120 | /// |
117 | /// Returns `false` if this module is a submodule *inside* a block expression | 121 | /// Returns `false` if this module is a submodule *inside* a block expression |
@@ -581,6 +585,18 @@ impl HasModule for GenericDefId { | |||
581 | } | 585 | } |
582 | } | 586 | } |
583 | 587 | ||
588 | impl HasModule for TypeAliasId { | ||
589 | fn module(&self, db: &dyn db::DefDatabase) -> ModuleId { | ||
590 | self.lookup(db).module(db) | ||
591 | } | ||
592 | } | ||
593 | |||
594 | impl HasModule for TraitId { | ||
595 | fn module(&self, db: &dyn db::DefDatabase) -> ModuleId { | ||
596 | self.lookup(db).container | ||
597 | } | ||
598 | } | ||
599 | |||
584 | impl HasModule for StaticLoc { | 600 | impl HasModule for StaticLoc { |
585 | fn module(&self, _db: &dyn db::DefDatabase) -> ModuleId { | 601 | fn module(&self, _db: &dyn db::DefDatabase) -> ModuleId { |
586 | self.container | 602 | self.container |