Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/builtin_derive.rs')
-rw-r--r--crates/hir-def/src/builtin_derive.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/crates/hir-def/src/builtin_derive.rs b/crates/hir-def/src/builtin_derive.rs
index 32385516ab..946f08ec36 100644
--- a/crates/hir-def/src/builtin_derive.rs
+++ b/crates/hir-def/src/builtin_derive.rs
@@ -8,7 +8,8 @@ use intern::{Symbol, sym};
use tt::TextRange;
use crate::{
- AdtId, BuiltinDeriveImplId, BuiltinDeriveImplLoc, FunctionId, HasModule, db::DefDatabase,
+ AdtId, BuiltinDeriveImplId, BuiltinDeriveImplLoc, FunctionId, HasModule, MacroId,
+ db::DefDatabase, lang_item::LangItems,
};
macro_rules! declare_enum {
@@ -86,6 +87,25 @@ declare_enum!(
DispatchFromDyn => [],
);
+impl BuiltinDeriveImplTrait {
+ pub fn derive_macro(self, lang_items: &LangItems) -> Option<MacroId> {
+ match self {
+ BuiltinDeriveImplTrait::Copy => lang_items.CopyDerive,
+ BuiltinDeriveImplTrait::Clone => lang_items.CloneDerive,
+ BuiltinDeriveImplTrait::Default => lang_items.DefaultDerive,
+ BuiltinDeriveImplTrait::Debug => lang_items.DebugDerive,
+ BuiltinDeriveImplTrait::Hash => lang_items.HashDerive,
+ BuiltinDeriveImplTrait::Ord => lang_items.OrdDerive,
+ BuiltinDeriveImplTrait::PartialOrd => lang_items.PartialOrdDerive,
+ BuiltinDeriveImplTrait::Eq => lang_items.EqDerive,
+ BuiltinDeriveImplTrait::PartialEq => lang_items.PartialEqDerive,
+ BuiltinDeriveImplTrait::CoerceUnsized | BuiltinDeriveImplTrait::DispatchFromDyn => {
+ lang_items.CoercePointeeDerive
+ }
+ }
+ }
+}
+
impl BuiltinDeriveImplMethod {
pub fn trait_method(
self,