Add data queries for macros

This commit is contained in:
Lukas Wirth 2022-03-09 00:41:54 +01:00
parent 55ec93a337
commit c37fe779c6
8 changed files with 102 additions and 19 deletions

View file

@ -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()
}
}