From 60a607d33f1c50acd0a4218da32abe35b2941e38 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 24 Jan 2019 17:54:18 +0300 Subject: new struct id --- crates/ra_hir/src/generics.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/generics.rs') diff --git a/crates/ra_hir/src/generics.rs b/crates/ra_hir/src/generics.rs index 88c53705f..e10b85ec9 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use ra_syntax::ast::{self, AstNode, NameOwner, TypeParamsOwner}; -use crate::{db::HirDatabase, DefId, Name, AsName, Function}; +use crate::{db::HirDatabase, DefId, Name, AsName, Function, Struct}; /// Data about a generic parameter (to a function, struct, impl, ...). #[derive(Clone, PartialEq, Eq, Debug)] @@ -25,6 +25,7 @@ pub struct GenericParams { #[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] pub enum GenericDef { Function(Function), + Struct(Struct), Def(DefId), } @@ -34,6 +35,12 @@ impl From for GenericDef { } } +impl From for GenericDef { + fn from(func: Struct) -> GenericDef { + GenericDef::Struct(func) + } +} + impl From for GenericDef { fn from(def_id: DefId) -> GenericDef { GenericDef::Def(def_id) @@ -53,6 +60,12 @@ impl GenericParams { generics.fill(type_param_list) } } + GenericDef::Struct(s) => { + let (_, struct_def) = s.source(db); + if let Some(type_param_list) = struct_def.type_param_list() { + generics.fill(type_param_list) + } + } GenericDef::Def(def_id) => { let (_file_id, node) = def_id.source(db); if let Some(type_param_list) = node.children().find_map(ast::TypeParamList::cast) { -- cgit v1.2.3