diff options
Diffstat (limited to 'crates/ra_hir/src/nameres/crate_def_map/raw.rs')
-rw-r--r-- | crates/ra_hir/src/nameres/crate_def_map/raw.rs | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/crates/ra_hir/src/nameres/crate_def_map/raw.rs b/crates/ra_hir/src/nameres/crate_def_map/raw.rs index cec2484eb..fe832b8da 100644 --- a/crates/ra_hir/src/nameres/crate_def_map/raw.rs +++ b/crates/ra_hir/src/nameres/crate_def_map/raw.rs | |||
@@ -18,7 +18,7 @@ use crate::{ | |||
18 | #[derive(Default, PartialEq, Eq)] | 18 | #[derive(Default, PartialEq, Eq)] |
19 | pub(crate) struct RawItems { | 19 | pub(crate) struct RawItems { |
20 | modules: Arena<Module, ModuleData>, | 20 | modules: Arena<Module, ModuleData>, |
21 | imports: Arena<Import, ImportData>, | 21 | imports: Arena<ImportId, ImportData>, |
22 | defs: Arena<Def, DefData>, | 22 | defs: Arena<Def, DefData>, |
23 | macros: Arena<Macro, MacroData>, | 23 | macros: Arena<Macro, MacroData>, |
24 | /// items for top-level module | 24 | /// items for top-level module |
@@ -60,9 +60,9 @@ impl Index<Module> for RawItems { | |||
60 | } | 60 | } |
61 | } | 61 | } |
62 | 62 | ||
63 | impl Index<Import> for RawItems { | 63 | impl Index<ImportId> for RawItems { |
64 | type Output = ImportData; | 64 | type Output = ImportData; |
65 | fn index(&self, idx: Import) -> &ImportData { | 65 | fn index(&self, idx: ImportId) -> &ImportData { |
66 | &self.imports[idx] | 66 | &self.imports[idx] |
67 | } | 67 | } |
68 | } | 68 | } |
@@ -84,7 +84,7 @@ impl Index<Macro> for RawItems { | |||
84 | #[derive(PartialEq, Eq, Clone, Copy)] | 84 | #[derive(PartialEq, Eq, Clone, Copy)] |
85 | pub(crate) enum RawItem { | 85 | pub(crate) enum RawItem { |
86 | Module(Module), | 86 | Module(Module), |
87 | Import(Import), | 87 | Import(ImportId), |
88 | Def(Def), | 88 | Def(Def), |
89 | Macro(Macro), | 89 | Macro(Macro), |
90 | } | 90 | } |
@@ -99,18 +99,8 @@ pub(crate) enum ModuleData { | |||
99 | Definition { name: Name, items: Vec<RawItem> }, | 99 | Definition { name: Name, items: Vec<RawItem> }, |
100 | } | 100 | } |
101 | 101 | ||
102 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 102 | pub(crate) use crate::nameres::lower::ImportId; |
103 | pub(crate) struct Import(RawId); | 103 | pub(super) use crate::nameres::lower::ImportData; |
104 | impl_arena_id!(Import); | ||
105 | |||
106 | #[derive(PartialEq, Eq)] | ||
107 | pub(crate) struct ImportData { | ||
108 | path: Path, | ||
109 | alias: Option<Name>, | ||
110 | is_glob: bool, | ||
111 | is_prelude: bool, | ||
112 | is_extern_crate: bool, | ||
113 | } | ||
114 | 104 | ||
115 | #[derive(Clone, Copy, PartialEq, Eq, Hash)] | 105 | #[derive(Clone, Copy, PartialEq, Eq, Hash)] |
116 | pub(crate) struct Def(RawId); | 106 | pub(crate) struct Def(RawId); |
@@ -144,6 +134,7 @@ pub(crate) struct MacroData { | |||
144 | pub(crate) path: Path, | 134 | pub(crate) path: Path, |
145 | pub(crate) name: Option<Name>, | 135 | pub(crate) name: Option<Name>, |
146 | pub(crate) arg: tt::Subtree, | 136 | pub(crate) arg: tt::Subtree, |
137 | pub(crate) export: bool, | ||
147 | } | 138 | } |
148 | 139 | ||
149 | struct RawItemsCollector { | 140 | struct RawItemsCollector { |
@@ -215,9 +206,7 @@ impl RawItemsCollector { | |||
215 | } | 206 | } |
216 | 207 | ||
217 | fn add_use_item(&mut self, current_module: Option<Module>, use_item: &ast::UseItem) { | 208 | fn add_use_item(&mut self, current_module: Option<Module>, use_item: &ast::UseItem) { |
218 | let is_prelude = use_item | 209 | let is_prelude = use_item.has_atom_attr("prelude_import"); |
219 | .attrs() | ||
220 | .any(|attr| attr.as_atom().map(|s| s == "prelude_import").unwrap_or(false)); | ||
221 | 210 | ||
222 | Path::expand_use_item(use_item, |path, segment, alias| { | 211 | Path::expand_use_item(use_item, |path, segment, alias| { |
223 | let import = self.raw_items.imports.alloc(ImportData { | 212 | let import = self.raw_items.imports.alloc(ImportData { |
@@ -261,7 +250,8 @@ impl RawItemsCollector { | |||
261 | 250 | ||
262 | let name = m.name().map(|it| it.as_name()); | 251 | let name = m.name().map(|it| it.as_name()); |
263 | let source_item_id = self.source_file_items.id_of_unchecked(m.syntax()); | 252 | let source_item_id = self.source_file_items.id_of_unchecked(m.syntax()); |
264 | let m = self.raw_items.macros.alloc(MacroData { source_item_id, path, arg, name }); | 253 | let export = m.has_atom_attr("macro_export"); |
254 | let m = self.raw_items.macros.alloc(MacroData { source_item_id, path, arg, name, export }); | ||
265 | self.push_item(current_module, RawItem::Macro(m)); | 255 | self.push_item(current_module, RawItem::Macro(m)); |
266 | } | 256 | } |
267 | 257 | ||