diff options
Diffstat (limited to 'crates/ra_hir/src/nameres/raw.rs')
-rw-r--r-- | crates/ra_hir/src/nameres/raw.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/crates/ra_hir/src/nameres/raw.rs b/crates/ra_hir/src/nameres/raw.rs index cacbcb517..ff079bcf1 100644 --- a/crates/ra_hir/src/nameres/raw.rs +++ b/crates/ra_hir/src/nameres/raw.rs | |||
@@ -2,7 +2,6 @@ | |||
2 | 2 | ||
3 | use std::{ops::Index, sync::Arc}; | 3 | use std::{ops::Index, sync::Arc}; |
4 | 4 | ||
5 | use mbe::ast_to_token_tree; | ||
6 | use ra_arena::{impl_arena_id, map::ArenaMap, Arena, RawId}; | 5 | use ra_arena::{impl_arena_id, map::ArenaMap, Arena, RawId}; |
7 | use ra_syntax::{ | 6 | use ra_syntax::{ |
8 | ast::{self, AttrsOwner, NameOwner}, | 7 | ast::{self, AttrsOwner, NameOwner}, |
@@ -11,6 +10,7 @@ use ra_syntax::{ | |||
11 | use test_utils::tested_by; | 10 | use test_utils::tested_by; |
12 | 11 | ||
13 | use crate::{ | 12 | use crate::{ |
13 | attr::Attr, | ||
14 | db::{AstDatabase, DefDatabase}, | 14 | db::{AstDatabase, DefDatabase}, |
15 | AsName, AstIdMap, Either, FileAstId, HirFileId, ModuleSource, Name, Path, Source, | 15 | AsName, AstIdMap, Either, FileAstId, HirFileId, ModuleSource, Name, Path, Source, |
16 | }; | 16 | }; |
@@ -29,8 +29,6 @@ pub struct RawItems { | |||
29 | items: Vec<RawItem>, | 29 | items: Vec<RawItem>, |
30 | } | 30 | } |
31 | 31 | ||
32 | type Attrs = Arc<[tt::Subtree]>; | ||
33 | |||
34 | #[derive(Debug, Default, PartialEq, Eq)] | 32 | #[derive(Debug, Default, PartialEq, Eq)] |
35 | pub struct ImportSourceMap { | 33 | pub struct ImportSourceMap { |
36 | map: ArenaMap<ImportId, ImportSourcePtr>, | 34 | map: ArenaMap<ImportId, ImportSourcePtr>, |
@@ -124,7 +122,7 @@ impl Index<Macro> for RawItems { | |||
124 | 122 | ||
125 | #[derive(Debug, PartialEq, Eq, Clone)] | 123 | #[derive(Debug, PartialEq, Eq, Clone)] |
126 | pub(super) struct RawItem { | 124 | pub(super) struct RawItem { |
127 | pub(super) attrs: Attrs, | 125 | pub(super) attrs: Arc<[Attr]>, |
128 | pub(super) kind: RawItemKind, | 126 | pub(super) kind: RawItemKind, |
129 | } | 127 | } |
130 | 128 | ||
@@ -285,6 +283,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
285 | let attrs = self.parse_attrs(&module); | 283 | let attrs = self.parse_attrs(&module); |
286 | 284 | ||
287 | let ast_id = self.source_ast_id_map.ast_id(&module); | 285 | let ast_id = self.source_ast_id_map.ast_id(&module); |
286 | // FIXME: cfg_attr | ||
288 | let is_macro_use = module.has_atom_attr("macro_use"); | 287 | let is_macro_use = module.has_atom_attr("macro_use"); |
289 | if module.has_semi() { | 288 | if module.has_semi() { |
290 | let attr_path = extract_mod_path_attribute(&module); | 289 | let attr_path = extract_mod_path_attribute(&module); |
@@ -315,6 +314,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
315 | } | 314 | } |
316 | 315 | ||
317 | fn add_use_item(&mut self, current_module: Option<Module>, use_item: ast::UseItem) { | 316 | fn add_use_item(&mut self, current_module: Option<Module>, use_item: ast::UseItem) { |
317 | // FIXME: cfg_attr | ||
318 | let is_prelude = use_item.has_atom_attr("prelude_import"); | 318 | let is_prelude = use_item.has_atom_attr("prelude_import"); |
319 | let attrs = self.parse_attrs(&use_item); | 319 | let attrs = self.parse_attrs(&use_item); |
320 | 320 | ||
@@ -349,6 +349,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
349 | let path = Path::from_name_ref(&name_ref); | 349 | let path = Path::from_name_ref(&name_ref); |
350 | let alias = extern_crate.alias().and_then(|a| a.name()).map(|it| it.as_name()); | 350 | let alias = extern_crate.alias().and_then(|a| a.name()).map(|it| it.as_name()); |
351 | let attrs = self.parse_attrs(&extern_crate); | 351 | let attrs = self.parse_attrs(&extern_crate); |
352 | // FIXME: cfg_attr | ||
352 | let is_macro_use = extern_crate.has_atom_attr("macro_use"); | 353 | let is_macro_use = extern_crate.has_atom_attr("macro_use"); |
353 | let import_data = ImportData { | 354 | let import_data = ImportData { |
354 | path, | 355 | path, |
@@ -368,6 +369,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
368 | } | 369 | } |
369 | 370 | ||
370 | fn add_macro(&mut self, current_module: Option<Module>, m: ast::MacroCall) { | 371 | fn add_macro(&mut self, current_module: Option<Module>, m: ast::MacroCall) { |
372 | let attrs = self.parse_attrs(&m); | ||
371 | let path = match m | 373 | let path = match m |
372 | .path() | 374 | .path() |
373 | .and_then(|path| Path::from_src(Source { ast: path, file_id: self.file_id }, self.db)) | 375 | .and_then(|path| Path::from_src(Source { ast: path, file_id: self.file_id }, self.db)) |
@@ -378,6 +380,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
378 | 380 | ||
379 | let name = m.name().map(|it| it.as_name()); | 381 | let name = m.name().map(|it| it.as_name()); |
380 | let ast_id = self.source_ast_id_map.ast_id(&m); | 382 | let ast_id = self.source_ast_id_map.ast_id(&m); |
383 | // FIXME: cfg_attr | ||
381 | let export = m.attrs().filter_map(|x| x.simple_name()).any(|name| name == "macro_export"); | 384 | let export = m.attrs().filter_map(|x| x.simple_name()).any(|name| name == "macro_export"); |
382 | 385 | ||
383 | let m = self.raw_items.macros.alloc(MacroData { ast_id, path, name, export }); | 386 | let m = self.raw_items.macros.alloc(MacroData { ast_id, path, name, export }); |
@@ -387,7 +390,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
387 | fn push_import( | 390 | fn push_import( |
388 | &mut self, | 391 | &mut self, |
389 | current_module: Option<Module>, | 392 | current_module: Option<Module>, |
390 | attrs: Attrs, | 393 | attrs: Arc<[Attr]>, |
391 | data: ImportData, | 394 | data: ImportData, |
392 | source: ImportSourcePtr, | 395 | source: ImportSourcePtr, |
393 | ) { | 396 | ) { |
@@ -396,7 +399,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
396 | self.push_item(current_module, attrs, RawItemKind::Import(import)) | 399 | self.push_item(current_module, attrs, RawItemKind::Import(import)) |
397 | } | 400 | } |
398 | 401 | ||
399 | fn push_item(&mut self, current_module: Option<Module>, attrs: Attrs, kind: RawItemKind) { | 402 | fn push_item(&mut self, current_module: Option<Module>, attrs: Arc<[Attr]>, kind: RawItemKind) { |
400 | match current_module { | 403 | match current_module { |
401 | Some(module) => match &mut self.raw_items.modules[module] { | 404 | Some(module) => match &mut self.raw_items.modules[module] { |
402 | ModuleData::Definition { items, .. } => items, | 405 | ModuleData::Definition { items, .. } => items, |
@@ -407,11 +410,9 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> { | |||
407 | .push(RawItem { attrs, kind }) | 410 | .push(RawItem { attrs, kind }) |
408 | } | 411 | } |
409 | 412 | ||
410 | fn parse_attrs(&self, item: &impl ast::AttrsOwner) -> Attrs { | 413 | fn parse_attrs(&self, item: &impl ast::AttrsOwner) -> Arc<[Attr]> { |
411 | item.attrs() | 414 | item.attrs() |
412 | .flat_map(|attr| attr.value()) | 415 | .flat_map(|ast| Attr::from_src(Source { ast, file_id: self.file_id }, self.db)) |
413 | .flat_map(|tt| ast_to_token_tree(&tt)) | ||
414 | .map(|(tt, _)| tt) | ||
415 | .collect() | 416 | .collect() |
416 | } | 417 | } |
417 | } | 418 | } |