aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ids.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r--crates/ra_hir/src/ids.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs
index 4102951c9..6875b006d 100644
--- a/crates/ra_hir/src/ids.rs
+++ b/crates/ra_hir/src/ids.rs
@@ -323,6 +323,25 @@ impl AstItemDef<ast::TraitDef> for TraitId {
323 } 323 }
324} 324}
325 325
326fn from_chalk<T: salsa::InternKey>(chalk_id: chalk_ir::RawId) -> T {
327 T::from_intern_id(salsa::InternId::from(chalk_id.index))
328}
329fn to_chalk<T: salsa::InternKey>(salsa_id: T) -> chalk_ir::RawId {
330 chalk_ir::RawId { index: salsa_id.as_intern_id().as_u32() }
331}
332
333impl From<chalk_ir::TraitId> for TraitId {
334 fn from(trait_id: chalk_ir::TraitId) -> Self {
335 from_chalk(trait_id.0)
336 }
337}
338
339impl From<TraitId> for chalk_ir::TraitId {
340 fn from(trait_id: TraitId) -> Self {
341 chalk_ir::TraitId(to_chalk(trait_id))
342 }
343}
344
326#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 345#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
327pub struct TypeAliasId(salsa::InternId); 346pub struct TypeAliasId(salsa::InternId);
328impl_intern_key!(TypeAliasId); 347impl_intern_key!(TypeAliasId);
@@ -354,3 +373,38 @@ impl MacroCallId {
354 ) 373 )
355 } 374 }
356} 375}
376
377/// This exists just for chalk, because chalk doesn't differentiate between
378/// enums and structs.
379#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
380pub struct TypeCtorId(salsa::InternId);
381impl_intern_key!(TypeCtorId);
382
383impl From<chalk_ir::StructId> for TypeCtorId {
384 fn from(struct_id: chalk_ir::StructId) -> Self {
385 from_chalk(struct_id.0)
386 }
387}
388
389impl From<TypeCtorId> for chalk_ir::StructId {
390 fn from(adt_id: TypeCtorId) -> Self {
391 chalk_ir::StructId(to_chalk(adt_id))
392 }
393}
394
395/// This exists just for chalk, because our ImplIds are only unique per module.
396#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
397pub struct GlobalImplId(salsa::InternId);
398impl_intern_key!(GlobalImplId);
399
400impl From<chalk_ir::ImplId> for GlobalImplId {
401 fn from(impl_id: chalk_ir::ImplId) -> Self {
402 from_chalk(impl_id.0)
403 }
404}
405
406impl From<GlobalImplId> for chalk_ir::ImplId {
407 fn from(impl_id: GlobalImplId) -> Self {
408 chalk_ir::ImplId(to_chalk(impl_id))
409 }
410}