aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/lib.rs')
-rw-r--r--crates/ra_hir_def/src/lib.rs30
1 files changed, 21 insertions, 9 deletions
diff --git a/crates/ra_hir_def/src/lib.rs b/crates/ra_hir_def/src/lib.rs
index 5564b166b..0fcc2cde4 100644
--- a/crates/ra_hir_def/src/lib.rs
+++ b/crates/ra_hir_def/src/lib.rs
@@ -253,12 +253,24 @@ impl Lookup for StaticId {
253#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 253#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
254pub struct TraitId(salsa::InternId); 254pub struct TraitId(salsa::InternId);
255impl_intern_key!(TraitId); 255impl_intern_key!(TraitId);
256impl AstItemDef<ast::TraitDef> for TraitId { 256
257 fn intern(db: &impl InternDatabase, loc: ItemLoc<ast::TraitDef>) -> Self { 257#[derive(Debug, Clone, PartialEq, Eq, Hash)]
258 db.intern_trait(loc) 258pub struct TraitLoc {
259 pub container: ModuleId,
260 pub ast_id: AstId<ast::TraitDef>,
261}
262
263impl Intern for TraitLoc {
264 type ID = TraitId;
265 fn intern(self, db: &impl db::DefDatabase) -> TraitId {
266 db.intern_trait(self)
259 } 267 }
260 fn lookup_intern(self, db: &impl InternDatabase) -> ItemLoc<ast::TraitDef> { 268}
261 db.lookup_intern_trait(self) 269
270impl Lookup for TraitId {
271 type Data = TraitLoc;
272 fn lookup(&self, db: &impl db::DefDatabase) -> TraitLoc {
273 db.lookup_intern_trait(*self)
262 } 274 }
263} 275}
264 276
@@ -492,7 +504,7 @@ impl HasModule for FunctionLoc {
492 match self.container { 504 match self.container {
493 ContainerId::ModuleId(it) => it, 505 ContainerId::ModuleId(it) => it,
494 ContainerId::ImplId(it) => it.lookup(db).container, 506 ContainerId::ImplId(it) => it.lookup(db).container,
495 ContainerId::TraitId(it) => it.module(db), 507 ContainerId::TraitId(it) => it.lookup(db).container,
496 } 508 }
497 } 509 }
498} 510}
@@ -502,7 +514,7 @@ impl HasModule for TypeAliasLoc {
502 match self.container { 514 match self.container {
503 ContainerId::ModuleId(it) => it, 515 ContainerId::ModuleId(it) => it,
504 ContainerId::ImplId(it) => it.lookup(db).container, 516 ContainerId::ImplId(it) => it.lookup(db).container,
505 ContainerId::TraitId(it) => it.module(db), 517 ContainerId::TraitId(it) => it.lookup(db).container,
506 } 518 }
507 } 519 }
508} 520}
@@ -512,7 +524,7 @@ impl HasModule for ConstLoc {
512 match self.container { 524 match self.container {
513 ContainerId::ModuleId(it) => it, 525 ContainerId::ModuleId(it) => it,
514 ContainerId::ImplId(it) => it.lookup(db).container, 526 ContainerId::ImplId(it) => it.lookup(db).container,
515 ContainerId::TraitId(it) => it.module(db), 527 ContainerId::TraitId(it) => it.lookup(db).container,
516 } 528 }
517 } 529 }
518} 530}
@@ -542,7 +554,7 @@ impl HasModule for GenericDefId {
542 match self { 554 match self {
543 GenericDefId::FunctionId(it) => it.lookup(db).module(db), 555 GenericDefId::FunctionId(it) => it.lookup(db).module(db),
544 GenericDefId::AdtId(it) => it.module(db), 556 GenericDefId::AdtId(it) => it.module(db),
545 GenericDefId::TraitId(it) => it.module(db), 557 GenericDefId::TraitId(it) => it.lookup(db).container,
546 GenericDefId::TypeAliasId(it) => it.lookup(db).module(db), 558 GenericDefId::TypeAliasId(it) => it.lookup(db).module(db),
547 GenericDefId::ImplId(it) => it.lookup(db).container, 559 GenericDefId::ImplId(it) => it.lookup(db).container,
548 GenericDefId::EnumVariantId(it) => it.parent.module(db), 560 GenericDefId::EnumVariantId(it) => it.parent.module(db),