]> git.lizzy.rs Git - rust.git/commitdiff
Make legacy macros private
authorAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 20 Dec 2019 16:09:13 +0000 (17:09 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 20 Dec 2019 16:12:20 +0000 (17:12 +0100)
crates/ra_hir_def/src/item_scope.rs
crates/ra_hir_def/src/nameres/collector.rs
crates/ra_hir_def/src/nameres/tests.rs
crates/ra_hir_def/src/nameres/tests/incremental.rs

index f51e97ef9d851ee28aa44a41478485b60a3a8ed7..6b9be8325d498f3e481273742a353772d242795c 100644 (file)
@@ -23,7 +23,7 @@ pub struct ItemScope {
     /// Module scoped macros will be inserted into `items` instead of here.
     // FIXME: Macro shadowing in one module is not properly handled. Non-item place macros will
     // be all resolved to the last one defined if shadowing happens.
-    pub(crate) legacy_macros: FxHashMap<Name, MacroDefId>,
+    legacy_macros: FxHashMap<Name, MacroDefId>,
 }
 
 static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| {
@@ -108,6 +108,10 @@ pub(crate) fn define_impl(&mut self, imp: ImplId) {
         self.impls.push(imp)
     }
 
+    pub(crate) fn define_legacy_macro(&mut self, name: Name, mac: MacroDefId) {
+        self.legacy_macros.insert(name, mac);
+    }
+
     pub(crate) fn push_res(
         &mut self,
         name: Name,
@@ -146,6 +150,10 @@ pub(crate) fn push_res(
     pub(crate) fn collect_resolutions(&self) -> Vec<(Name, Resolution)> {
         self.items.iter().map(|(name, res)| (name.clone(), res.clone())).collect()
     }
+
+    pub(crate) fn collect_legacy_macros(&self) -> FxHashMap<Name, MacroDefId> {
+        self.legacy_macros.clone()
+    }
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Default)]
index b064ccc9c9f1208cebfb70a1933b25a1f6bd267b..8b641d8b561519f0d5d5a4376c601506af2fe13a 100644 (file)
@@ -231,9 +231,9 @@ fn define_macro(
     /// the definition of current module.
     /// And also, `macro_use` on a module will import all legacy macros visible inside to
     /// current legacy scope, with possible shadowing.
-    fn define_legacy_macro(&mut self, module_id: LocalModuleId, name: Name, macro_: MacroDefId) {
+    fn define_legacy_macro(&mut self, module_id: LocalModuleId, name: Name, mac: MacroDefId) {
         // Always shadowing
-        self.def_map.modules[module_id].scope.legacy_macros.insert(name, macro_);
+        self.def_map.modules[module_id].scope.define_legacy_macro(name, mac);
     }
 
     /// Import macros from `#[macro_use] extern crate`.
@@ -711,7 +711,9 @@ fn push_child_module(
         let res = modules.alloc(ModuleData::default());
         modules[res].parent = Some(self.module_id);
         modules[res].origin = ModuleOrigin::not_sure_file(definition, declaration);
-        modules[res].scope.legacy_macros = modules[self.module_id].scope.legacy_macros.clone();
+        for (name, mac) in modules[self.module_id].scope.collect_legacy_macros() {
+            modules[res].scope.define_legacy_macro(name, mac)
+        }
         modules[self.module_id].children.insert(name.clone(), res);
         let resolution = Resolution {
             def: PerNs::types(
@@ -875,7 +877,7 @@ fn collect_macro(&mut self, mac: &raw::MacroData) {
     }
 
     fn import_all_legacy_macros(&mut self, module_id: LocalModuleId) {
-        let macros = self.def_collector.def_map[module_id].scope.legacy_macros.clone();
+        let macros = self.def_collector.def_map[module_id].scope.collect_legacy_macros();
         for (name, macro_) in macros {
             self.def_collector.define_legacy_macro(self.module_id, name.clone(), macro_);
         }
index 61cdd768e87b5bf30f2de680526599e97798b218..4e968bcc842dfa079f1a792d72a082dafb1219f0 100644 (file)
@@ -32,27 +32,22 @@ fn go(buf: &mut String, map: &CrateDefMap, path: &str, module: LocalModuleId) {
         *buf += path;
         *buf += "\n";
 
-        let mut entries = map.modules[module]
-            .scope
-            .items
-            .iter()
-            .map(|(name, res)| (name, res.def))
-            .collect::<Vec<_>>();
-        entries.sort_by_key(|(name, _)| *name);
+        let mut entries = map.modules[module].scope.collect_resolutions();
+        entries.sort_by_key(|(name, _)| name.clone());
 
         for (name, res) in entries {
             *buf += &format!("{}:", name);
 
-            if res.types.is_some() {
+            if res.def.types.is_some() {
                 *buf += " t";
             }
-            if res.values.is_some() {
+            if res.def.values.is_some() {
                 *buf += " v";
             }
-            if res.macros.is_some() {
+            if res.def.macros.is_some() {
                 *buf += " m";
             }
-            if res.is_none() {
+            if res.def.is_none() {
                 *buf += " _";
             }
 
@@ -587,6 +582,6 @@ mod b {
     ⋮T: v
     ⋮
     ⋮crate::a
-    ⋮T: t v    
+    ⋮T: t v
 "###);
 }
index 903a2277193874c6bf7f28d77666dd2e4f540d91..ef2e9435cf64b4f57926e25d65d0167accde5afd 100644 (file)
@@ -116,7 +116,7 @@ fn f() {
         let events = db.log_executed(|| {
             let crate_def_map = db.crate_def_map(krate);
             let (_, module_data) = crate_def_map.modules.iter().last().unwrap();
-            assert_eq!(module_data.scope.items.len(), 1);
+            assert_eq!(module_data.scope.collect_resolutions().len(), 1);
         });
         assert!(format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)
     }
@@ -126,7 +126,7 @@ fn f() {
         let events = db.log_executed(|| {
             let crate_def_map = db.crate_def_map(krate);
             let (_, module_data) = crate_def_map.modules.iter().last().unwrap();
-            assert_eq!(module_data.scope.items.len(), 1);
+            assert_eq!(module_data.scope.collect_resolutions().len(), 1);
         });
         assert!(!format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)
     }