From eb53aa37a336b6c9369ea931812f6c491e8f4a71 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 21 Nov 2019 15:13:46 +0300 Subject: Split internal and user-visible ScopeDef --- crates/ra_hir/src/source_binder.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'crates/ra_hir/src/source_binder.rs') diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs index 467e46d8c..f13d43740 100644 --- a/crates/ra_hir/src/source_binder.rs +++ b/crates/ra_hir/src/source_binder.rs @@ -23,7 +23,7 @@ use crate::{ db::HirDatabase, expr::{BodySourceMap, ExprScopes, ScopeId}, ids::LocationCtx, - resolve::{resolver_for_scope, HasResolver, TypeNs, ValueNs}, + resolve::{self, resolver_for_scope, HasResolver, TypeNs, ValueNs}, ty::method_resolution::{self, implements_trait}, Adt, AssocItem, Const, DefWithBody, Either, Enum, EnumVariant, FromSource, Function, GenericParam, HasBody, HirFileId, Local, MacroDef, Module, Name, Path, Resolver, ScopeDef, @@ -310,7 +310,22 @@ impl SourceAnalyzer { } pub fn process_all_names(&self, db: &impl HirDatabase, f: &mut dyn FnMut(Name, ScopeDef)) { - self.resolver.process_all_names(db, f) + self.resolver.process_all_names(db, &mut |name, def| { + let def = match def { + resolve::ScopeDef::PerNs(it) => it.into(), + resolve::ScopeDef::ImplSelfType(it) => ScopeDef::ImplSelfType(it.into()), + resolve::ScopeDef::AdtSelfType(it) => ScopeDef::AdtSelfType(it.into()), + resolve::ScopeDef::GenericParam(idx) => { + let parent = self.resolver.generic_def().unwrap().into(); + ScopeDef::GenericParam(GenericParam { parent, idx }) + } + resolve::ScopeDef::Local(pat_id) => { + let parent = self.resolver.body_owner().unwrap().into(); + ScopeDef::Local(Local { parent, pat_id }) + } + }; + f(name, def) + }) } // FIXME: we only use this in `inline_local_variable` assist, ideally, we -- cgit v1.2.3