From 97158f5c8a6dadf3bcf28601f739ab6b7c4464aa Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 30 May 2019 15:03:58 +0300 Subject: add built-in types to scopes --- crates/ra_hir/src/nameres.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'crates/ra_hir/src/nameres.rs') diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index 51a7b8b95..aa26345b2 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs @@ -62,9 +62,10 @@ use ra_db::{FileId, Edition}; use test_utils::tested_by; use ra_syntax::ast; use ra_prof::profile; +use once_cell::sync::Lazy; use crate::{ - ModuleDef, Name, Crate, Module, MacroDef, KnownName, BuiltinType, + ModuleDef, Name, Crate, Module, MacroDef, AsName, BuiltinType, DefDatabase, Path, PathKind, HirFileId, Trait, ids::MacroDefId, diagnostics::DiagnosticSink, @@ -140,12 +141,22 @@ pub struct ModuleScope { macros: FxHashMap, } +static BUILTIN_SCOPE: Lazy> = Lazy::new(|| { + BuiltinType::ALL + .iter() + .map(|&(known_name, ty)| { + (known_name.as_name(), Resolution { def: PerNs::types(ty.into()), import: None }) + }) + .collect() +}); + impl ModuleScope { pub fn entries<'a>(&'a self) -> impl Iterator + 'a { - self.items.iter() + //FIXME: shadowing + self.items.iter().chain(BUILTIN_SCOPE.iter()) } pub fn get(&self, name: &Name) -> Option<&Resolution> { - self.items.get(name) + self.items.get(name).or_else(|| BUILTIN_SCOPE.get(name)) } pub fn traits<'a>(&'a self) -> impl Iterator + 'a { self.items.values().filter_map(|r| match r.def.take_types() { @@ -154,7 +165,7 @@ impl ModuleScope { }) } fn get_item_or_macro(&self, name: &Name) -> Option { - match (self.items.get(name), self.macros.get(name)) { + match (self.get(name), self.macros.get(name)) { (Some(item), _) if !item.def.is_none() => Some(Either::Left(item.def)), (_, Some(macro_)) => Some(Either::Right(*macro_)), _ => None, -- cgit v1.2.3