diff options
Diffstat (limited to 'crates/ra_hir/src/generics.rs')
-rw-r--r-- | crates/ra_hir/src/generics.rs | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/crates/ra_hir/src/generics.rs b/crates/ra_hir/src/generics.rs index a8cacbb4a..64c20a462 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs | |||
@@ -5,9 +5,9 @@ | |||
5 | 5 | ||
6 | use std::sync::Arc; | 6 | use std::sync::Arc; |
7 | 7 | ||
8 | use ra_syntax::ast::{self, AstNode, NameOwner, TypeParamsOwner}; | 8 | use ra_syntax::ast::{self, NameOwner, TypeParamsOwner}; |
9 | 9 | ||
10 | use crate::{db::HirDatabase, DefId, Name, AsName, Function, Struct, Enum}; | 10 | use crate::{db::HirDatabase, Name, AsName, Function, Struct, Enum, Trait, Type}; |
11 | 11 | ||
12 | /// Data about a generic parameter (to a function, struct, impl, ...). | 12 | /// Data about a generic parameter (to a function, struct, impl, ...). |
13 | #[derive(Clone, PartialEq, Eq, Debug)] | 13 | #[derive(Clone, PartialEq, Eq, Debug)] |
@@ -27,15 +27,10 @@ pub enum GenericDef { | |||
27 | Function(Function), | 27 | Function(Function), |
28 | Struct(Struct), | 28 | Struct(Struct), |
29 | Enum(Enum), | 29 | Enum(Enum), |
30 | Def(DefId), | 30 | Trait(Trait), |
31 | } | 31 | Type(Type), |
32 | impl_froms!(GenericDef: Function, Struct, Enum); | ||
33 | |||
34 | impl From<DefId> for GenericDef { | ||
35 | fn from(def_id: DefId) -> GenericDef { | ||
36 | GenericDef::Def(def_id) | ||
37 | } | ||
38 | } | 32 | } |
33 | impl_froms!(GenericDef: Function, Struct, Enum, Trait, Type); | ||
39 | 34 | ||
40 | impl GenericParams { | 35 | impl GenericParams { |
41 | pub(crate) fn generic_params_query( | 36 | pub(crate) fn generic_params_query( |
@@ -47,12 +42,8 @@ impl GenericParams { | |||
47 | GenericDef::Function(it) => generics.fill(&*it.source(db).1), | 42 | GenericDef::Function(it) => generics.fill(&*it.source(db).1), |
48 | GenericDef::Struct(it) => generics.fill(&*it.source(db).1), | 43 | GenericDef::Struct(it) => generics.fill(&*it.source(db).1), |
49 | GenericDef::Enum(it) => generics.fill(&*it.source(db).1), | 44 | GenericDef::Enum(it) => generics.fill(&*it.source(db).1), |
50 | GenericDef::Def(def_id) => { | 45 | GenericDef::Trait(it) => generics.fill(&*it.source(db).1), |
51 | let (_file_id, node) = def_id.source(db); | 46 | GenericDef::Type(it) => generics.fill(&*it.source(db).1), |
52 | if let Some(type_param_list) = node.children().find_map(ast::TypeParamList::cast) { | ||
53 | generics.fill_params(type_param_list) | ||
54 | } | ||
55 | } | ||
56 | } | 47 | } |
57 | 48 | ||
58 | Arc::new(generics) | 49 | Arc::new(generics) |