Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
| -rw-r--r-- | crates/hir/src/lib.rs | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 25138fcabc..68f3e3ae61 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -340,7 +340,7 @@ impl ModuleDef { ModuleDef::Variant(it) => it.name(db), ModuleDef::TypeAlias(it) => it.name(db), ModuleDef::Static(it) => it.name(db), - ModuleDef::Macro(it) => it.name(db)?, + ModuleDef::Macro(it) => it.name(db), ModuleDef::BuiltinType(it) => it.name(), }; Some(name) @@ -426,8 +426,7 @@ impl HasVisibility for ModuleDef { ModuleDef::Trait(it) => it.visibility(db), ModuleDef::TypeAlias(it) => it.visibility(db), ModuleDef::Variant(it) => it.visibility(db), - // FIXME - ModuleDef::Macro(_) => Visibility::Public, + ModuleDef::Macro(it) => it.visibility(db), ModuleDef::BuiltinType(_) => Visibility::Public, } } @@ -1766,14 +1765,12 @@ impl Macro { Module { id: self.id.module(db.upcast()) } } - pub fn name(self, _db: &dyn HirDatabase) -> Option<Name> { - // match self.id { - // MacroId::Macro2Id(id) => db.macro2_data(id).name.clone(), - // MacroId::MacroRulesId(id) => db.macro_rules_data(id).name.clone(), - // MacroId::ProcMacroId(id) => db.proc_macro_data(id).name.clone(), - // } - // FIXME - None + pub fn name(self, db: &dyn HirDatabase) -> Name { + match self.id { + MacroId::Macro2Id(id) => db.macro2_data(id).name.clone(), + MacroId::MacroRulesId(id) => db.macro_rules_data(id).name.clone(), + MacroId::ProcMacroId(id) => db.proc_macro_data(id).name.clone(), + } } pub fn kind(&self, db: &dyn HirDatabase) -> MacroKind { @@ -1826,6 +1823,20 @@ impl Macro { } } +impl HasVisibility for Macro { + fn visibility(&self, db: &dyn HirDatabase) -> Visibility { + match self.id { + MacroId::Macro2Id(id) => { + let data = db.macro2_data(id); + let visibility = &data.visibility; + visibility.resolve(db.upcast(), &self.id.resolver(db.upcast())) + } + MacroId::MacroRulesId(_) => Visibility::Public, + MacroId::ProcMacroId(_) => Visibility::Public, + } + } +} + #[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] pub enum ItemInNs { Types(ModuleDef), @@ -3374,3 +3385,9 @@ impl HasCrate for Type { self.krate.into() } } + +impl HasCrate for Macro { + fn krate(&self, db: &dyn HirDatabase) -> Crate { + self.module(db).krate() + } +} |