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.rs35
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,