From 79c90b5641d2934864c587380e4f050ab63ac029 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Tue, 24 Dec 2019 23:45:14 +0100 Subject: Collect visibility of items during nameres --- crates/ra_hir_def/src/nameres/raw.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'crates/ra_hir_def/src/nameres/raw.rs') diff --git a/crates/ra_hir_def/src/nameres/raw.rs b/crates/ra_hir_def/src/nameres/raw.rs index 73dc08745..9dabb5b6d 100644 --- a/crates/ra_hir_def/src/nameres/raw.rs +++ b/crates/ra_hir_def/src/nameres/raw.rs @@ -16,12 +16,15 @@ use hir_expand::{ use ra_arena::{impl_arena_id, Arena, RawId}; use ra_prof::profile; use ra_syntax::{ - ast::{self, AttrsOwner, NameOwner}, + ast::{self, AttrsOwner, NameOwner, VisibilityOwner}, AstNode, }; use test_utils::tested_by; -use crate::{attr::Attrs, db::DefDatabase, path::ModPath, FileAstId, HirFileId, InFile}; +use crate::{ + attr::Attrs, db::DefDatabase, path::ModPath, visibility::Visibility, FileAstId, HirFileId, + InFile, +}; /// `RawItems` is a set of top-level items in a file (except for impls). /// @@ -138,6 +141,7 @@ pub struct ImportData { pub(super) is_prelude: bool, pub(super) is_extern_crate: bool, pub(super) is_macro_use: bool, + pub(super) visibility: Visibility, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -148,6 +152,7 @@ impl_arena_id!(Def); pub(super) struct DefData { pub(super) name: Name, pub(super) kind: DefKind, + pub(super) visibility: Visibility, } #[derive(Debug, PartialEq, Eq, Clone, Copy)] @@ -218,6 +223,7 @@ impl RawItemsCollector { fn add_item(&mut self, current_module: Option, item: ast::ModuleItem) { let attrs = self.parse_attrs(&item); + let visibility = Visibility::from_ast_with_hygiene(item.visibility(), &self.hygiene); let (kind, name) = match item { ast::ModuleItem::Module(module) => { self.add_module(current_module, module); @@ -266,7 +272,7 @@ impl RawItemsCollector { }; if let Some(name) = name { let name = name.as_name(); - let def = self.raw_items.defs.alloc(DefData { name, kind }); + let def = self.raw_items.defs.alloc(DefData { name, kind, visibility }); self.push_item(current_module, attrs, RawItemKind::Def(def)); } } @@ -302,6 +308,7 @@ impl RawItemsCollector { // FIXME: cfg_attr let is_prelude = use_item.has_atom_attr("prelude_import"); let attrs = self.parse_attrs(&use_item); + let visibility = Visibility::from_ast_with_hygiene(use_item.visibility(), &self.hygiene); let mut buf = Vec::new(); ModPath::expand_use_item( @@ -315,6 +322,7 @@ impl RawItemsCollector { is_prelude, is_extern_crate: false, is_macro_use: false, + visibility: visibility.clone(), }; buf.push(import_data); }, @@ -331,6 +339,8 @@ impl RawItemsCollector { ) { if let Some(name_ref) = extern_crate.name_ref() { let path = ModPath::from_name_ref(&name_ref); + let visibility = + Visibility::from_ast_with_hygiene(extern_crate.visibility(), &self.hygiene); let alias = extern_crate.alias().and_then(|a| a.name()).map(|it| it.as_name()); let attrs = self.parse_attrs(&extern_crate); // FIXME: cfg_attr @@ -342,6 +352,7 @@ impl RawItemsCollector { is_prelude: false, is_extern_crate: true, is_macro_use, + visibility, }; self.push_import(current_module, attrs, import_data); } -- cgit v1.2.3