diff options
author | Florian Diebold <[email protected]> | 2019-05-12 16:53:44 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-06-15 17:21:23 +0100 |
commit | 49489dc20cc9f340d43acb467677b9bc59495ed2 (patch) | |
tree | e8e76acb07e646957a20c8ce5262d893ea7b7b03 /crates/ra_hir/src/type_alias.rs | |
parent | 6f946f96563bac1f214f86f463287d94968e3688 (diff) |
Add basic infrastructure for assoc type projection
Diffstat (limited to 'crates/ra_hir/src/type_alias.rs')
-rw-r--r-- | crates/ra_hir/src/type_alias.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/crates/ra_hir/src/type_alias.rs b/crates/ra_hir/src/type_alias.rs index 87b9caa8a..eada37274 100644 --- a/crates/ra_hir/src/type_alias.rs +++ b/crates/ra_hir/src/type_alias.rs | |||
@@ -2,12 +2,22 @@ | |||
2 | 2 | ||
3 | use std::sync::Arc; | 3 | use std::sync::Arc; |
4 | 4 | ||
5 | use crate::{TypeAlias, DefDatabase, AstDatabase, HasSource, type_ref::TypeRef}; | 5 | use ra_syntax::ast::NameOwner; |
6 | 6 | ||
7 | pub(crate) fn type_alias_ref_query( | 7 | use crate::{TypeAlias, db::{DefDatabase, AstDatabase}, type_ref::TypeRef, name::{Name, AsName}, HasSource}; |
8 | |||
9 | #[derive(Debug, Clone, PartialEq, Eq)] | ||
10 | pub struct TypeAliasData { | ||
11 | pub(crate) name: Name, | ||
12 | pub(crate) type_ref: Option<TypeRef>, | ||
13 | } | ||
14 | |||
15 | pub(crate) fn type_alias_data_query( | ||
8 | db: &(impl DefDatabase + AstDatabase), | 16 | db: &(impl DefDatabase + AstDatabase), |
9 | typ: TypeAlias, | 17 | typ: TypeAlias, |
10 | ) -> Arc<TypeRef> { | 18 | ) -> Arc<TypeAliasData> { |
11 | let node = typ.source(db).ast; | 19 | let node = typ.source(db).ast; |
12 | Arc::new(TypeRef::from_ast_opt(node.type_ref())) | 20 | let name = node.name().map_or_else(Name::missing, |n| n.as_name()); |
21 | let type_ref = node.type_ref().map(TypeRef::from_ast); | ||
22 | Arc::new(TypeAliasData { name, type_ref }) | ||
13 | } | 23 | } |