diff options
author | Aleksey Kladov <[email protected]> | 2020-08-25 13:44:15 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-08-25 13:44:15 +0100 |
commit | 66e5ced894e430117d4d040e13721313237936ab (patch) | |
tree | 7db11f5c8abbcef1f6c847bd47dcae02a2d96583 /crates/hir/src/attrs.rs | |
parent | 8a845eda7bfd24aa4d85f1656bd053db05446a3e (diff) |
Remove AttrDef
Diffstat (limited to 'crates/hir/src/attrs.rs')
-rw-r--r-- | crates/hir/src/attrs.rs | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/crates/hir/src/attrs.rs b/crates/hir/src/attrs.rs index 953960e14..36027d183 100644 --- a/crates/hir/src/attrs.rs +++ b/crates/hir/src/attrs.rs | |||
@@ -4,60 +4,63 @@ use hir_def::{ | |||
4 | db::DefDatabase, | 4 | db::DefDatabase, |
5 | docs::Documentation, | 5 | docs::Documentation, |
6 | resolver::{HasResolver, Resolver}, | 6 | resolver::{HasResolver, Resolver}, |
7 | AdtId, FunctionId, GenericDefId, ModuleId, StaticId, TraitId, VariantId, | 7 | AdtId, AttrDefId, FunctionId, GenericDefId, ModuleId, StaticId, TraitId, VariantId, |
8 | }; | 8 | }; |
9 | use hir_ty::db::HirDatabase; | 9 | use hir_ty::db::HirDatabase; |
10 | use stdx::impl_from; | ||
11 | 10 | ||
12 | use crate::{ | 11 | use crate::{ |
13 | doc_links::Resolvable, Adt, Const, Enum, EnumVariant, Field, Function, GenericDef, ImplDef, | 12 | doc_links::Resolvable, Adt, Const, Enum, EnumVariant, Field, Function, GenericDef, ImplDef, |
14 | Local, MacroDef, Module, ModuleDef, Static, Struct, Trait, TypeAlias, TypeParam, Union, | 13 | Local, MacroDef, Module, ModuleDef, Static, Struct, Trait, TypeAlias, TypeParam, Union, |
15 | }; | 14 | }; |
16 | 15 | ||
17 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | ||
18 | pub enum AttrDef { | ||
19 | Module(Module), | ||
20 | Field(Field), | ||
21 | Adt(Adt), | ||
22 | Function(Function), | ||
23 | EnumVariant(EnumVariant), | ||
24 | Static(Static), | ||
25 | Const(Const), | ||
26 | Trait(Trait), | ||
27 | TypeAlias(TypeAlias), | ||
28 | MacroDef(MacroDef), | ||
29 | } | ||
30 | |||
31 | impl_from!( | ||
32 | Module, | ||
33 | Field, | ||
34 | Adt(Struct, Enum, Union), | ||
35 | EnumVariant, | ||
36 | Static, | ||
37 | Const, | ||
38 | Function, | ||
39 | Trait, | ||
40 | TypeAlias, | ||
41 | MacroDef | ||
42 | for AttrDef | ||
43 | ); | ||
44 | |||
45 | pub trait HasAttrs { | 16 | pub trait HasAttrs { |
46 | fn attrs(self, db: &dyn HirDatabase) -> Attrs; | 17 | fn attrs(self, db: &dyn HirDatabase) -> Attrs; |
47 | fn docs(self, db: &dyn HirDatabase) -> Option<Documentation>; | 18 | fn docs(self, db: &dyn HirDatabase) -> Option<Documentation>; |
48 | } | 19 | } |
49 | 20 | ||
50 | impl<T: Into<AttrDef>> HasAttrs for T { | 21 | macro_rules! impl_has_attrs { |
51 | fn attrs(self, db: &dyn HirDatabase) -> Attrs { | 22 | ($(($def:ident, $def_id:ident),)*) => {$( |
52 | let def: AttrDef = self.into(); | 23 | impl HasAttrs for $def { |
53 | db.attrs(def.into()) | 24 | fn attrs(self, db: &dyn HirDatabase) -> Attrs { |
54 | } | 25 | let def = AttrDefId::$def_id(self.into()); |
55 | fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> { | 26 | db.attrs(def) |
56 | let def: AttrDef = self.into(); | 27 | } |
57 | db.documentation(def.into()) | 28 | fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> { |
58 | } | 29 | let def = AttrDefId::$def_id(self.into()); |
30 | db.documentation(def) | ||
31 | } | ||
32 | } | ||
33 | )*}; | ||
34 | } | ||
35 | |||
36 | impl_has_attrs![ | ||
37 | (Field, FieldId), | ||
38 | (EnumVariant, EnumVariantId), | ||
39 | (Static, StaticId), | ||
40 | (Const, ConstId), | ||
41 | (Trait, TraitId), | ||
42 | (TypeAlias, TypeAliasId), | ||
43 | (MacroDef, MacroDefId), | ||
44 | (Function, FunctionId), | ||
45 | (Adt, AdtId), | ||
46 | (Module, ModuleId), | ||
47 | ]; | ||
48 | |||
49 | macro_rules! impl_has_attrs_adt { | ||
50 | ($($adt:ident),*) => {$( | ||
51 | impl HasAttrs for $adt { | ||
52 | fn attrs(self, db: &dyn HirDatabase) -> Attrs { | ||
53 | Adt::$adt(self).attrs(db) | ||
54 | } | ||
55 | fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> { | ||
56 | Adt::$adt(self).docs(db) | ||
57 | } | ||
58 | } | ||
59 | )*}; | ||
59 | } | 60 | } |
60 | 61 | ||
62 | impl_has_attrs_adt![Struct, Union, Enum]; | ||
63 | |||
61 | impl Resolvable for ModuleDef { | 64 | impl Resolvable for ModuleDef { |
62 | fn resolver<D: DefDatabase + HirDatabase>(&self, db: &D) -> Option<Resolver> { | 65 | fn resolver<D: DefDatabase + HirDatabase>(&self, db: &D) -> Option<Resolver> { |
63 | Some(match self { | 66 | Some(match self { |