Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/visibility.rs')
| -rw-r--r-- | crates/hir-def/src/visibility.rs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/crates/hir-def/src/visibility.rs b/crates/hir-def/src/visibility.rs index b5eb84c25f..948f6ed8c3 100644 --- a/crates/hir-def/src/visibility.rs +++ b/crates/hir-def/src/visibility.rs @@ -289,18 +289,21 @@ pub(crate) fn field_visibilities_query( pub fn visibility_from_ast( db: &dyn DefDatabase, - has_resolver: impl HasResolver, + has_resolver: impl HasResolver + HasModule, ast_vis: InFile<Option<ast::Visibility>>, ) -> Visibility { let mut span_map = None; let raw_vis = crate::item_tree::visibility_from_ast(db, ast_vis.value, &mut |range| { span_map.get_or_insert_with(|| db.span_map(ast_vis.file_id)).span_for_range(range).ctx }); - if raw_vis == RawVisibility::Public { - return Visibility::Public; + match raw_vis { + RawVisibility::PubSelf(explicitness) => { + Visibility::Module(has_resolver.module(db), explicitness) + } + RawVisibility::PubCrate => Visibility::PubCrate(has_resolver.krate(db)), + RawVisibility::Public => Visibility::Public, + RawVisibility::Module(..) => Visibility::resolve(db, &has_resolver.resolver(db), &raw_vis), } - - Visibility::resolve(db, &has_resolver.resolver(db), &raw_vis) } /// Resolve visibility of a type alias. |