diff options
author | Aleksey Kladov <[email protected]> | 2019-09-12 22:31:04 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-09-12 22:31:04 +0100 |
commit | bcf30d389c3744ab517372431eb7e1e1dfcc50df (patch) | |
tree | 8b34525b463ba62d9b1acc90a790a438ba8f9ee0 | |
parent | 45117c63884366ee82102a782a62a09fefff746b (diff) |
generalize impl_froms to nested enums
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 20 | ||||
-rw-r--r-- | crates/ra_hir/src/generics.rs | 27 | ||||
-rw-r--r-- | crates/ra_hir/src/lib.rs | 9 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/lower.rs | 28 |
4 files changed, 26 insertions, 58 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 026753c9f..a10e795ce 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -139,7 +139,7 @@ pub enum ModuleDef { | |||
139 | impl_froms!( | 139 | impl_froms!( |
140 | ModuleDef: Module, | 140 | ModuleDef: Module, |
141 | Function, | 141 | Function, |
142 | AdtDef, | 142 | AdtDef(Struct, Enum, Union), |
143 | EnumVariant, | 143 | EnumVariant, |
144 | Const, | 144 | Const, |
145 | Static, | 145 | Static, |
@@ -148,24 +148,6 @@ impl_froms!( | |||
148 | BuiltinType | 148 | BuiltinType |
149 | ); | 149 | ); |
150 | 150 | ||
151 | impl From<Struct> for ModuleDef { | ||
152 | fn from(it: Struct) -> ModuleDef { | ||
153 | ModuleDef::AdtDef(AdtDef::Struct(it)) | ||
154 | } | ||
155 | } | ||
156 | |||
157 | impl From<Enum> for ModuleDef { | ||
158 | fn from(it: Enum) -> ModuleDef { | ||
159 | ModuleDef::AdtDef(AdtDef::Enum(it)) | ||
160 | } | ||
161 | } | ||
162 | |||
163 | impl From<Union> for ModuleDef { | ||
164 | fn from(it: Union) -> ModuleDef { | ||
165 | ModuleDef::AdtDef(AdtDef::Union(it)) | ||
166 | } | ||
167 | } | ||
168 | |||
169 | pub enum ModuleSource { | 151 | pub enum ModuleSource { |
170 | SourceFile(ast::SourceFile), | 152 | SourceFile(ast::SourceFile), |
171 | Module(ast::Module), | 153 | Module(ast::Module), |
diff --git a/crates/ra_hir/src/generics.rs b/crates/ra_hir/src/generics.rs index 0e89941f3..74435c20a 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs | |||
@@ -55,25 +55,14 @@ pub enum GenericDef { | |||
55 | // can, and this makes some code easier to write | 55 | // can, and this makes some code easier to write |
56 | EnumVariant(EnumVariant), | 56 | EnumVariant(EnumVariant), |
57 | } | 57 | } |
58 | impl_froms!(GenericDef: Function, AdtDef, Trait, TypeAlias, ImplBlock, EnumVariant); | 58 | impl_froms!( |
59 | 59 | GenericDef: Function, | |
60 | impl From<Struct> for GenericDef { | 60 | AdtDef(Struct, Enum, Union), |
61 | fn from(it: Struct) -> GenericDef { | 61 | Trait, |
62 | GenericDef::AdtDef(AdtDef::Struct(it)) | 62 | TypeAlias, |
63 | } | 63 | ImplBlock, |
64 | } | 64 | EnumVariant |
65 | 65 | ); | |
66 | impl From<Enum> for GenericDef { | ||
67 | fn from(it: Enum) -> GenericDef { | ||
68 | GenericDef::AdtDef(AdtDef::Enum(it)) | ||
69 | } | ||
70 | } | ||
71 | |||
72 | impl From<Union> for GenericDef { | ||
73 | fn from(it: Union) -> GenericDef { | ||
74 | GenericDef::AdtDef(AdtDef::Union(it)) | ||
75 | } | ||
76 | } | ||
77 | 66 | ||
78 | impl GenericParams { | 67 | impl GenericParams { |
79 | pub(crate) fn generic_params_query( | 68 | pub(crate) fn generic_params_query( |
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 2fe1a658e..639e97c3d 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs | |||
@@ -8,13 +8,20 @@ | |||
8 | //! applied. So, the relation between syntax and HIR is many-to-one. | 8 | //! applied. So, the relation between syntax and HIR is many-to-one. |
9 | 9 | ||
10 | macro_rules! impl_froms { | 10 | macro_rules! impl_froms { |
11 | ($e:ident: $($v:ident),*) => { | 11 | ($e:ident: $($v:ident $(($($sv:ident),*))?),*) => { |
12 | $( | 12 | $( |
13 | impl From<$v> for $e { | 13 | impl From<$v> for $e { |
14 | fn from(it: $v) -> $e { | 14 | fn from(it: $v) -> $e { |
15 | $e::$v(it) | 15 | $e::$v(it) |
16 | } | 16 | } |
17 | } | 17 | } |
18 | $($( | ||
19 | impl From<$sv> for $e { | ||
20 | fn from(it: $sv) -> $e { | ||
21 | $e::$v($v::$sv(it)) | ||
22 | } | ||
23 | } | ||
24 | )*)? | ||
18 | )* | 25 | )* |
19 | } | 26 | } |
20 | } | 27 | } |
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs index 587dc12ee..105c893f0 100644 --- a/crates/ra_hir/src/ty/lower.rs +++ b/crates/ra_hir/src/ty/lower.rs | |||
@@ -611,25 +611,15 @@ pub enum TypableDef { | |||
611 | Static(Static), | 611 | Static(Static), |
612 | BuiltinType(BuiltinType), | 612 | BuiltinType(BuiltinType), |
613 | } | 613 | } |
614 | impl_froms!(TypableDef: Function, AdtDef, EnumVariant, TypeAlias, Const, Static, BuiltinType); | 614 | impl_froms!( |
615 | 615 | TypableDef: Function, | |
616 | impl From<Struct> for TypableDef { | 616 | AdtDef(Struct, Enum, Union), |
617 | fn from(it: Struct) -> TypableDef { | 617 | EnumVariant, |
618 | TypableDef::AdtDef(AdtDef::Struct(it)) | 618 | TypeAlias, |
619 | } | 619 | Const, |
620 | } | 620 | Static, |
621 | 621 | BuiltinType | |
622 | impl From<Enum> for TypableDef { | 622 | ); |
623 | fn from(it: Enum) -> TypableDef { | ||
624 | TypableDef::AdtDef(AdtDef::Enum(it)) | ||
625 | } | ||
626 | } | ||
627 | |||
628 | impl From<Union> for TypableDef { | ||
629 | fn from(it: Union) -> TypableDef { | ||
630 | TypableDef::AdtDef(AdtDef::Union(it)) | ||
631 | } | ||
632 | } | ||
633 | 623 | ||
634 | impl From<ModuleDef> for Option<TypableDef> { | 624 | impl From<ModuleDef> for Option<TypableDef> { |
635 | fn from(def: ModuleDef) -> Option<TypableDef> { | 625 | fn from(def: ModuleDef) -> Option<TypableDef> { |