From 1d6f291335c58aac95c1124f55d7fb0834baff2a Mon Sep 17 00:00:00 2001 From: Zac Pullar-Strecker <zacmps@gmail.com> Date: Sat, 13 Jun 2020 22:34:59 +1200 Subject: Move resolver into impls, work on tests --- crates/ra_ide_db/src/defs.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'crates/ra_ide_db/src') diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs index 3ef5e74b6..a158169e3 100644 --- a/crates/ra_ide_db/src/defs.rs +++ b/crates/ra_ide_db/src/defs.rs @@ -7,7 +7,7 @@ use hir::{ Field, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, Name, PathResolution, - Semantics, TypeParam, Visibility, + Semantics, TypeParam, Visibility, db::{DefDatabase, HirDatabase}, }; use ra_prof::profile; use ra_syntax::{ @@ -16,6 +16,7 @@ use ra_syntax::{ }; use crate::RootDatabase; +use ra_hir_def::resolver::{Resolver, HasResolver}; // FIXME: a more precise name would probably be `Symbol`? #[derive(Debug, PartialEq, Eq, Copy, Clone)] @@ -76,6 +77,20 @@ impl Definition { }; Some(name) } + + pub fn resolver<D: HirDatabase + DefDatabase>(&self, db: &D) -> Option<Resolver> { + use hir::VariantDef; + use ra_hir_def::*; + Some(match self { + Definition::ModuleDef(def) => def.resolver(db)?, + Definition::Field(field) => Into::<VariantId>::into(Into::<VariantDef>::into(field.parent_def(db))).resolver(db), + Definition::Macro(m) => Into::<ModuleId>::into(m.module(db)?).resolver(db), + Definition::SelfType(imp) => Into::<ImplId>::into(imp.clone()).resolver(db), + // it's possible, read probable, that other arms of this are also unreachable + Definition::Local(_local) => unreachable!(), + Definition::TypeParam(tp) => Into::<ModuleId>::into(tp.module(db)).resolver(db) + }) + } } #[derive(Debug)] -- cgit v1.2.3