aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Schievink <[email protected]>2021-04-07 02:12:40 +0100
committerJonas Schievink <[email protected]>2021-04-07 02:12:40 +0100
commitf04f38d3d79c3cc51956bc530a34e32945cdb294 (patch)
tree130dca17ca576146796b1877a81e17def36f2f02
parent3e7ac2b830f692fd993a9b30b6be96a4206b8229 (diff)
nameres: collect unnamed consts
-rw-r--r--crates/hir_def/src/item_scope.rs9
-rw-r--r--crates/hir_def/src/nameres/collector.rs34
2 files changed, 29 insertions, 14 deletions
diff --git a/crates/hir_def/src/item_scope.rs b/crates/hir_def/src/item_scope.rs
index a8ee5eeac..08feee1e7 100644
--- a/crates/hir_def/src/item_scope.rs
+++ b/crates/hir_def/src/item_scope.rs
@@ -11,7 +11,7 @@ use rustc_hash::{FxHashMap, FxHashSet};
11use stdx::format_to; 11use stdx::format_to;
12 12
13use crate::{ 13use crate::{
14 db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, ImplId, 14 db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, ConstId, ImplId,
15 LocalModuleId, MacroDefId, ModuleDefId, ModuleId, TraitId, 15 LocalModuleId, MacroDefId, ModuleDefId, ModuleId, TraitId,
16}; 16};
17 17
@@ -37,6 +37,7 @@ pub struct ItemScope {
37 37
38 defs: Vec<ModuleDefId>, 38 defs: Vec<ModuleDefId>,
39 impls: Vec<ImplId>, 39 impls: Vec<ImplId>,
40 unnamed_consts: Vec<ConstId>,
40 /// Traits imported via `use Trait as _;`. 41 /// Traits imported via `use Trait as _;`.
41 unnamed_trait_imports: FxHashMap<TraitId, Visibility>, 42 unnamed_trait_imports: FxHashMap<TraitId, Visibility>,
42 /// Macros visible in current module in legacy textual scope 43 /// Macros visible in current module in legacy textual scope
@@ -156,6 +157,10 @@ impl ItemScope {
156 self.impls.push(imp) 157 self.impls.push(imp)
157 } 158 }
158 159
160 pub(crate) fn define_unnamed_const(&mut self, konst: ConstId) {
161 self.unnamed_consts.push(konst);
162 }
163
159 pub(crate) fn define_legacy_macro(&mut self, name: Name, mac: MacroDefId) { 164 pub(crate) fn define_legacy_macro(&mut self, name: Name, mac: MacroDefId) {
160 self.legacy_macros.insert(name, mac); 165 self.legacy_macros.insert(name, mac);
161 } 166 }
@@ -295,6 +300,7 @@ impl ItemScope {
295 unresolved, 300 unresolved,
296 defs, 301 defs,
297 impls, 302 impls,
303 unnamed_consts,
298 unnamed_trait_imports, 304 unnamed_trait_imports,
299 legacy_macros, 305 legacy_macros,
300 } = self; 306 } = self;
@@ -304,6 +310,7 @@ impl ItemScope {
304 unresolved.shrink_to_fit(); 310 unresolved.shrink_to_fit();
305 defs.shrink_to_fit(); 311 defs.shrink_to_fit();
306 impls.shrink_to_fit(); 312 impls.shrink_to_fit();
313 unnamed_consts.shrink_to_fit();
307 unnamed_trait_imports.shrink_to_fit(); 314 unnamed_trait_imports.shrink_to_fit();
308 legacy_macros.shrink_to_fit(); 315 legacy_macros.shrink_to_fit();
309 } 316 }
diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs
index f42f92702..492d8c71f 100644
--- a/crates/hir_def/src/nameres/collector.rs
+++ b/crates/hir_def/src/nameres/collector.rs
@@ -1163,19 +1163,27 @@ impl ModCollector<'_, '_> {
1163 } 1163 }
1164 ModItem::Const(id) => { 1164 ModItem::Const(id) => {
1165 let it = &self.item_tree[id]; 1165 let it = &self.item_tree[id];
1166 1166 let const_id = ConstLoc {
1167 if let Some(name) = &it.name { 1167 container: module.into(),
1168 def = Some(DefData { 1168 id: ItemTreeId::new(self.file_id, id),
1169 id: ConstLoc { 1169 }
1170 container: module.into(), 1170 .intern(self.def_collector.db);
1171 id: ItemTreeId::new(self.file_id, id), 1171
1172 } 1172 match &it.name {
1173 .intern(self.def_collector.db) 1173 Some(name) => {
1174 .into(), 1174 def = Some(DefData {
1175 name, 1175 id: const_id.into(),
1176 visibility: &self.item_tree[it.visibility], 1176 name,
1177 has_constructor: false, 1177 visibility: &self.item_tree[it.visibility],
1178 }); 1178 has_constructor: false,
1179 });
1180 }
1181 None => {
1182 // const _: T = ...;
1183 self.def_collector.def_map.modules[self.module_id]
1184 .scope
1185 .define_unnamed_const(const_id);
1186 }
1179 } 1187 }
1180 } 1188 }
1181 ModItem::Static(id) => { 1189 ModItem::Static(id) => {