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 | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index e0dc921c9f..4d758c7df7 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -103,6 +103,7 @@ pub use { hir_def::{ adt::StructKind, attr::{Attr, Attrs, AttrsWithOwner, Documentation}, + builtin_attr::AttributeTemplate, find_path::PrefixKind, import_map, item_scope::ItemScope, @@ -2024,6 +2025,40 @@ impl Local { } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct BuiltinAttr(usize); + +impl BuiltinAttr { + pub(crate) fn by_name(name: &str) -> Option<Self> { + // FIXME: def maps registered attrs? + hir_def::builtin_attr::find_builtin_attr_idx(name).map(Self) + } + + pub fn name(&self, _: &dyn HirDatabase) -> &str { + // FIXME: Return a `Name` here + hir_def::builtin_attr::INERT_ATTRIBUTES[self.0].name + } + + pub fn template(&self, _: &dyn HirDatabase) -> AttributeTemplate { + hir_def::builtin_attr::INERT_ATTRIBUTES[self.0].template + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct ToolModule(usize); + +impl ToolModule { + pub(crate) fn by_name(name: &str) -> Option<Self> { + // FIXME: def maps registered tools + hir_def::builtin_attr::TOOL_MODULES.iter().position(|&tool| tool == name).map(Self) + } + + pub fn name(&self, _: &dyn HirDatabase) -> &str { + // FIXME: Return a `Name` here + hir_def::builtin_attr::TOOL_MODULES[self.0] + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct Label { pub(crate) parent: DefWithBodyId, pub(crate) label_id: LabelId, |