From f1959bbae0cf2f99e63d074278cec165c274b4e5 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 24 Jan 2019 13:34:41 +0300 Subject: add FunctionId --- crates/ra_hir/src/ids.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'crates/ra_hir') diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index 99f04e4ef..73f1379f1 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs @@ -11,6 +11,7 @@ use crate::{ pub struct HirInterner { defs: LocationIntener, macros: LocationIntener, + fns: LocationIntener, } impl HirInterner { @@ -128,6 +129,28 @@ impl MacroCallLoc { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct FunctionId(RawId); +impl_arena_id!(FunctionId); + +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub struct FunctionLoc { + pub(crate) module: Module, + pub(crate) source_item_id: SourceItemId, +} + +impl FunctionId { + pub(crate) fn loc(self, db: &impl AsRef) -> FunctionLoc { + db.as_ref().fns.id2loc(self) + } +} + +impl FunctionLoc { + pub(crate) fn id(&self, db: &impl AsRef) -> FunctionId { + db.as_ref().fns.loc2id(&self) + } +} + /// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) /// in a specific module. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -- cgit v1.2.3