diff options
Diffstat (limited to 'crates/ra_hir/src')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 23 | ||||
-rw-r--r-- | crates/ra_hir/src/lib.rs | 19 | ||||
-rw-r--r-- | crates/ra_hir/src/semantics/source_to_def.rs | 5 |
3 files changed, 16 insertions, 31 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 04fd335fe..9222009fe 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -38,6 +38,7 @@ use ra_syntax::{ | |||
38 | AstNode, | 38 | AstNode, |
39 | }; | 39 | }; |
40 | use rustc_hash::FxHashSet; | 40 | use rustc_hash::FxHashSet; |
41 | use stdx::impl_from; | ||
41 | 42 | ||
42 | use crate::{ | 43 | use crate::{ |
43 | db::{DefDatabase, HirDatabase}, | 44 | db::{DefDatabase, HirDatabase}, |
@@ -142,8 +143,8 @@ pub enum ModuleDef { | |||
142 | TypeAlias(TypeAlias), | 143 | TypeAlias(TypeAlias), |
143 | BuiltinType(BuiltinType), | 144 | BuiltinType(BuiltinType), |
144 | } | 145 | } |
145 | impl_froms!( | 146 | impl_from!( |
146 | ModuleDef: Module, | 147 | Module, |
147 | Function, | 148 | Function, |
148 | Adt(Struct, Enum, Union), | 149 | Adt(Struct, Enum, Union), |
149 | EnumVariant, | 150 | EnumVariant, |
@@ -152,6 +153,7 @@ impl_froms!( | |||
152 | Trait, | 153 | Trait, |
153 | TypeAlias, | 154 | TypeAlias, |
154 | BuiltinType | 155 | BuiltinType |
156 | for ModuleDef | ||
155 | ); | 157 | ); |
156 | 158 | ||
157 | impl ModuleDef { | 159 | impl ModuleDef { |
@@ -541,7 +543,7 @@ pub enum Adt { | |||
541 | Union(Union), | 543 | Union(Union), |
542 | Enum(Enum), | 544 | Enum(Enum), |
543 | } | 545 | } |
544 | impl_froms!(Adt: Struct, Union, Enum); | 546 | impl_from!(Struct, Union, Enum for Adt); |
545 | 547 | ||
546 | impl Adt { | 548 | impl Adt { |
547 | pub fn has_non_default_type_params(self, db: &dyn HirDatabase) -> bool { | 549 | pub fn has_non_default_type_params(self, db: &dyn HirDatabase) -> bool { |
@@ -584,7 +586,7 @@ pub enum VariantDef { | |||
584 | Union(Union), | 586 | Union(Union), |
585 | EnumVariant(EnumVariant), | 587 | EnumVariant(EnumVariant), |
586 | } | 588 | } |
587 | impl_froms!(VariantDef: Struct, Union, EnumVariant); | 589 | impl_from!(Struct, Union, EnumVariant for VariantDef); |
588 | 590 | ||
589 | impl VariantDef { | 591 | impl VariantDef { |
590 | pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> { | 592 | pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> { |
@@ -627,8 +629,7 @@ pub enum DefWithBody { | |||
627 | Static(Static), | 629 | Static(Static), |
628 | Const(Const), | 630 | Const(Const), |
629 | } | 631 | } |
630 | 632 | impl_from!(Function, Const, Static for DefWithBody); | |
631 | impl_froms!(DefWithBody: Function, Const, Static); | ||
632 | 633 | ||
633 | impl DefWithBody { | 634 | impl DefWithBody { |
634 | pub fn module(self, db: &dyn HirDatabase) -> Module { | 635 | pub fn module(self, db: &dyn HirDatabase) -> Module { |
@@ -930,14 +931,15 @@ pub enum GenericDef { | |||
930 | // consts can have type parameters from their parents (i.e. associated consts of traits) | 931 | // consts can have type parameters from their parents (i.e. associated consts of traits) |
931 | Const(Const), | 932 | Const(Const), |
932 | } | 933 | } |
933 | impl_froms!( | 934 | impl_from!( |
934 | GenericDef: Function, | 935 | Function, |
935 | Adt(Struct, Enum, Union), | 936 | Adt(Struct, Enum, Union), |
936 | Trait, | 937 | Trait, |
937 | TypeAlias, | 938 | TypeAlias, |
938 | ImplDef, | 939 | ImplDef, |
939 | EnumVariant, | 940 | EnumVariant, |
940 | Const | 941 | Const |
942 | for GenericDef | ||
941 | ); | 943 | ); |
942 | 944 | ||
943 | impl GenericDef { | 945 | impl GenericDef { |
@@ -1578,8 +1580,8 @@ pub enum AttrDef { | |||
1578 | MacroDef(MacroDef), | 1580 | MacroDef(MacroDef), |
1579 | } | 1581 | } |
1580 | 1582 | ||
1581 | impl_froms!( | 1583 | impl_from!( |
1582 | AttrDef: Module, | 1584 | Module, |
1583 | Field, | 1585 | Field, |
1584 | Adt(Struct, Enum, Union), | 1586 | Adt(Struct, Enum, Union), |
1585 | EnumVariant, | 1587 | EnumVariant, |
@@ -1589,6 +1591,7 @@ impl_froms!( | |||
1589 | Trait, | 1591 | Trait, |
1590 | TypeAlias, | 1592 | TypeAlias, |
1591 | MacroDef | 1593 | MacroDef |
1594 | for AttrDef | ||
1592 | ); | 1595 | ); |
1593 | 1596 | ||
1594 | pub trait HasAttrs { | 1597 | pub trait HasAttrs { |
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 3364a822f..7d9b174b4 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs | |||
@@ -19,25 +19,6 @@ | |||
19 | 19 | ||
20 | #![recursion_limit = "512"] | 20 | #![recursion_limit = "512"] |
21 | 21 | ||
22 | macro_rules! impl_froms { | ||
23 | ($e:ident: $($v:ident $(($($sv:ident),*))?),*$(,)?) => { | ||
24 | $( | ||
25 | impl From<$v> for $e { | ||
26 | fn from(it: $v) -> $e { | ||
27 | $e::$v(it) | ||
28 | } | ||
29 | } | ||
30 | $($( | ||
31 | impl From<$sv> for $e { | ||
32 | fn from(it: $sv) -> $e { | ||
33 | $e::$v($v::$sv(it)) | ||
34 | } | ||
35 | } | ||
36 | )*)? | ||
37 | )* | ||
38 | } | ||
39 | } | ||
40 | |||
41 | mod semantics; | 22 | mod semantics; |
42 | pub mod db; | 23 | pub mod db; |
43 | mod source_analyzer; | 24 | mod source_analyzer; |
diff --git a/crates/ra_hir/src/semantics/source_to_def.rs b/crates/ra_hir/src/semantics/source_to_def.rs index 0e1d92fb3..42e5a1bdb 100644 --- a/crates/ra_hir/src/semantics/source_to_def.rs +++ b/crates/ra_hir/src/semantics/source_to_def.rs | |||
@@ -16,6 +16,7 @@ use ra_syntax::{ | |||
16 | match_ast, AstNode, SyntaxNode, | 16 | match_ast, AstNode, SyntaxNode, |
17 | }; | 17 | }; |
18 | use rustc_hash::FxHashMap; | 18 | use rustc_hash::FxHashMap; |
19 | use stdx::impl_from; | ||
19 | 20 | ||
20 | use crate::{db::HirDatabase, InFile, MacroDefId}; | 21 | use crate::{db::HirDatabase, InFile, MacroDefId}; |
21 | 22 | ||
@@ -255,8 +256,7 @@ pub(crate) enum ChildContainer { | |||
255 | /// here the children generic parameters, and not, eg enum variants. | 256 | /// here the children generic parameters, and not, eg enum variants. |
256 | GenericDefId(GenericDefId), | 257 | GenericDefId(GenericDefId), |
257 | } | 258 | } |
258 | impl_froms! { | 259 | impl_from! { |
259 | ChildContainer: | ||
260 | DefWithBodyId, | 260 | DefWithBodyId, |
261 | ModuleId, | 261 | ModuleId, |
262 | TraitId, | 262 | TraitId, |
@@ -265,6 +265,7 @@ impl_froms! { | |||
265 | VariantId, | 265 | VariantId, |
266 | TypeAliasId, | 266 | TypeAliasId, |
267 | GenericDefId | 267 | GenericDefId |
268 | for ChildContainer | ||
268 | } | 269 | } |
269 | 270 | ||
270 | impl ChildContainer { | 271 | impl ChildContainer { |