aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/resolver.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-12-24 20:23:22 +0000
committerFlorian Diebold <[email protected]>2019-12-26 15:23:40 +0000
commit1ce809d0fa59ade71b13c200870b1fd5f74ceff4 (patch)
tree4ba1954121fcf4145b4b0deea16456d9f19754e8 /crates/ra_hir_def/src/resolver.rs
parent069bf55cca1e1be1f6cdd28b638f691e059858dc (diff)
Add logic for resolving and checking visibility
Diffstat (limited to 'crates/ra_hir_def/src/resolver.rs')
-rw-r--r--crates/ra_hir_def/src/resolver.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/crates/ra_hir_def/src/resolver.rs b/crates/ra_hir_def/src/resolver.rs
index cf3c33d78..d509dc3dd 100644
--- a/crates/ra_hir_def/src/resolver.rs
+++ b/crates/ra_hir_def/src/resolver.rs
@@ -19,6 +19,7 @@ use crate::{
19 nameres::CrateDefMap, 19 nameres::CrateDefMap,
20 path::{ModPath, PathKind}, 20 path::{ModPath, PathKind},
21 per_ns::PerNs, 21 per_ns::PerNs,
22 visibility::{ResolvedVisibility, Visibility},
22 AdtId, AssocContainerId, ConstId, ContainerId, DefWithBodyId, EnumId, EnumVariantId, 23 AdtId, AssocContainerId, ConstId, ContainerId, DefWithBodyId, EnumId, EnumVariantId,
23 FunctionId, GenericDefId, HasModule, ImplId, LocalModuleId, Lookup, ModuleDefId, ModuleId, 24 FunctionId, GenericDefId, HasModule, ImplId, LocalModuleId, Lookup, ModuleDefId, ModuleId,
24 StaticId, StructId, TraitId, TypeAliasId, TypeParamId, VariantId, 25 StaticId, StructId, TraitId, TypeAliasId, TypeParamId, VariantId,
@@ -231,6 +232,26 @@ impl Resolver {
231 Some(res) 232 Some(res)
232 } 233 }
233 234
235 pub fn resolve_visibility(
236 &self,
237 db: &impl DefDatabase,
238 visibility: &Visibility,
239 ) -> Option<ResolvedVisibility> {
240 match visibility {
241 Visibility::Module(mod_path) => {
242 let resolved = self.resolve_module_path_in_items(db, &mod_path).take_types()?;
243 match resolved {
244 ModuleDefId::ModuleId(m) => Some(ResolvedVisibility::Module(m)),
245 _ => {
246 // error: visibility needs to refer to module
247 None
248 }
249 }
250 }
251 Visibility::Public => Some(ResolvedVisibility::Public),
252 }
253 }
254
234 pub fn resolve_path_in_value_ns( 255 pub fn resolve_path_in_value_ns(
235 &self, 256 &self,
236 db: &impl DefDatabase, 257 db: &impl DefDatabase,