aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/nameres/raw.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-12-24 22:45:14 +0000
committerFlorian Diebold <[email protected]>2019-12-26 15:23:40 +0000
commit79c90b5641d2934864c587380e4f050ab63ac029 (patch)
treeb87f4cdb1f6a2b477e111bf611db797f8360e6de /crates/ra_hir_def/src/nameres/raw.rs
parentc31dae2aca8f0847df23b6976c3475cea57ada27 (diff)
Collect visibility of items during nameres
Diffstat (limited to 'crates/ra_hir_def/src/nameres/raw.rs')
-rw-r--r--crates/ra_hir_def/src/nameres/raw.rs17
1 files changed, 14 insertions, 3 deletions
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::{
16use ra_arena::{impl_arena_id, Arena, RawId}; 16use ra_arena::{impl_arena_id, Arena, RawId};
17use ra_prof::profile; 17use ra_prof::profile;
18use ra_syntax::{ 18use ra_syntax::{
19 ast::{self, AttrsOwner, NameOwner}, 19 ast::{self, AttrsOwner, NameOwner, VisibilityOwner},
20 AstNode, 20 AstNode,
21}; 21};
22use test_utils::tested_by; 22use test_utils::tested_by;
23 23
24use crate::{attr::Attrs, db::DefDatabase, path::ModPath, FileAstId, HirFileId, InFile}; 24use crate::{
25 attr::Attrs, db::DefDatabase, path::ModPath, visibility::Visibility, FileAstId, HirFileId,
26 InFile,
27};
25 28
26/// `RawItems` is a set of top-level items in a file (except for impls). 29/// `RawItems` is a set of top-level items in a file (except for impls).
27/// 30///
@@ -138,6 +141,7 @@ pub struct ImportData {
138 pub(super) is_prelude: bool, 141 pub(super) is_prelude: bool,
139 pub(super) is_extern_crate: bool, 142 pub(super) is_extern_crate: bool,
140 pub(super) is_macro_use: bool, 143 pub(super) is_macro_use: bool,
144 pub(super) visibility: Visibility,
141} 145}
142 146
143#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 147#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
@@ -148,6 +152,7 @@ impl_arena_id!(Def);
148pub(super) struct DefData { 152pub(super) struct DefData {
149 pub(super) name: Name, 153 pub(super) name: Name,
150 pub(super) kind: DefKind, 154 pub(super) kind: DefKind,
155 pub(super) visibility: Visibility,
151} 156}
152 157
153#[derive(Debug, PartialEq, Eq, Clone, Copy)] 158#[derive(Debug, PartialEq, Eq, Clone, Copy)]
@@ -218,6 +223,7 @@ impl RawItemsCollector {
218 223
219 fn add_item(&mut self, current_module: Option<Module>, item: ast::ModuleItem) { 224 fn add_item(&mut self, current_module: Option<Module>, item: ast::ModuleItem) {
220 let attrs = self.parse_attrs(&item); 225 let attrs = self.parse_attrs(&item);
226 let visibility = Visibility::from_ast_with_hygiene(item.visibility(), &self.hygiene);
221 let (kind, name) = match item { 227 let (kind, name) = match item {
222 ast::ModuleItem::Module(module) => { 228 ast::ModuleItem::Module(module) => {
223 self.add_module(current_module, module); 229 self.add_module(current_module, module);
@@ -266,7 +272,7 @@ impl RawItemsCollector {
266 }; 272 };
267 if let Some(name) = name { 273 if let Some(name) = name {
268 let name = name.as_name(); 274 let name = name.as_name();
269 let def = self.raw_items.defs.alloc(DefData { name, kind }); 275 let def = self.raw_items.defs.alloc(DefData { name, kind, visibility });
270 self.push_item(current_module, attrs, RawItemKind::Def(def)); 276 self.push_item(current_module, attrs, RawItemKind::Def(def));
271 } 277 }
272 } 278 }
@@ -302,6 +308,7 @@ impl RawItemsCollector {
302 // FIXME: cfg_attr 308 // FIXME: cfg_attr
303 let is_prelude = use_item.has_atom_attr("prelude_import"); 309 let is_prelude = use_item.has_atom_attr("prelude_import");
304 let attrs = self.parse_attrs(&use_item); 310 let attrs = self.parse_attrs(&use_item);
311 let visibility = Visibility::from_ast_with_hygiene(use_item.visibility(), &self.hygiene);
305 312
306 let mut buf = Vec::new(); 313 let mut buf = Vec::new();
307 ModPath::expand_use_item( 314 ModPath::expand_use_item(
@@ -315,6 +322,7 @@ impl RawItemsCollector {
315 is_prelude, 322 is_prelude,
316 is_extern_crate: false, 323 is_extern_crate: false,
317 is_macro_use: false, 324 is_macro_use: false,
325 visibility: visibility.clone(),
318 }; 326 };
319 buf.push(import_data); 327 buf.push(import_data);
320 }, 328 },
@@ -331,6 +339,8 @@ impl RawItemsCollector {
331 ) { 339 ) {
332 if let Some(name_ref) = extern_crate.name_ref() { 340 if let Some(name_ref) = extern_crate.name_ref() {
333 let path = ModPath::from_name_ref(&name_ref); 341 let path = ModPath::from_name_ref(&name_ref);
342 let visibility =
343 Visibility::from_ast_with_hygiene(extern_crate.visibility(), &self.hygiene);
334 let alias = extern_crate.alias().and_then(|a| a.name()).map(|it| it.as_name()); 344 let alias = extern_crate.alias().and_then(|a| a.name()).map(|it| it.as_name());
335 let attrs = self.parse_attrs(&extern_crate); 345 let attrs = self.parse_attrs(&extern_crate);
336 // FIXME: cfg_attr 346 // FIXME: cfg_attr
@@ -342,6 +352,7 @@ impl RawItemsCollector {
342 is_prelude: false, 352 is_prelude: false,
343 is_extern_crate: true, 353 is_extern_crate: true,
344 is_macro_use, 354 is_macro_use,
355 visibility,
345 }; 356 };
346 self.push_import(current_module, attrs, import_data); 357 self.push_import(current_module, attrs, import_data);
347 } 358 }