]> git.lizzy.rs Git - rust.git/commitdiff
Store a list of local macros on the resolver; use for resolving intra-doc macro links
authorManish Goregaokar <manishsmail@gmail.com>
Sat, 6 Jan 2018 11:53:33 +0000 (17:23 +0530)
committerManish Goregaokar <manishsmail@gmail.com>
Mon, 22 Jan 2018 09:54:30 +0000 (15:24 +0530)
src/librustc_resolve/lib.rs
src/librustc_resolve/macros.rs
src/librustdoc/clean/mod.rs

index 6b7ad8394601904e91d041416f73247a7b5389c7..c55e23e917a1c856c848947dd5ad620c708e95a7 100644 (file)
@@ -1320,6 +1320,7 @@ pub struct Resolver<'a> {
     crate_loader: &'a mut CrateLoader,
     macro_names: FxHashSet<Ident>,
     global_macros: FxHashMap<Name, &'a NameBinding<'a>>,
+    pub all_macros: FxHashMap<Name, Def>,
     lexical_macro_resolutions: Vec<(Ident, &'a Cell<LegacyScope<'a>>)>,
     macro_map: FxHashMap<DefId, Rc<SyntaxExtension>>,
     macro_defs: FxHashMap<Mark, DefId>,
@@ -1596,6 +1597,7 @@ pub fn new(session: &'a Session,
             crate_loader,
             macro_names: FxHashSet(),
             global_macros: FxHashMap(),
+            all_macros: FxHashMap(),
             lexical_macro_resolutions: Vec::new(),
             macro_map: FxHashMap(),
             macro_exports: Vec::new(),
index e06d7dce4dbef7b05783e3a989063cf303664776..080ef3252a633098a5530f26471806421fce9532 100644 (file)
@@ -755,8 +755,9 @@ pub fn define_macro(&mut self,
             *legacy_scope = LegacyScope::Binding(self.arenas.alloc_legacy_binding(LegacyBinding {
                 parent: Cell::new(*legacy_scope), ident: ident, def_id: def_id, span: item.span,
             }));
+            let def = Def::Macro(def_id, MacroKind::Bang);
+            self.all_macros.insert(ident.name, def);
             if attr::contains_name(&item.attrs, "macro_export") {
-                let def = Def::Macro(def_id, MacroKind::Bang);
                 self.macro_exports.push(Export {
                     ident: ident.modern(),
                     def: def,
index 74d1fd0d14e1478efa885d65f6813edc710c330a..5031dddfdf38fd0b9534d28856d5a4b55f76a93d 100644 (file)
@@ -940,6 +940,8 @@ fn clean(&self, cx: &DocContext) -> Attributes {
                                 .resolve_macro_to_def_inner(mark, &path, MacroKind::Bang, false);
                             if let Ok(def) = res {
                                 def
+                            } else if let Some(def) = resolver.all_macros.get(&path_str.into()) {
+                                *def
                             } else {
                                 continue;
                             }