diff options
author | Florian Diebold <[email protected]> | 2019-12-24 20:23:22 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-12-26 15:23:40 +0000 |
commit | 1ce809d0fa59ade71b13c200870b1fd5f74ceff4 (patch) | |
tree | 4ba1954121fcf4145b4b0deea16456d9f19754e8 /crates/ra_hir_def/src/resolver.rs | |
parent | 069bf55cca1e1be1f6cdd28b638f691e059858dc (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.rs | 21 |
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, |