aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/type_alias.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-05-12 16:53:44 +0100
committerFlorian Diebold <[email protected]>2019-06-15 17:21:23 +0100
commit49489dc20cc9f340d43acb467677b9bc59495ed2 (patch)
treee8e76acb07e646957a20c8ce5262d893ea7b7b03 /crates/ra_hir/src/type_alias.rs
parent6f946f96563bac1f214f86f463287d94968e3688 (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.rs18
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
3use std::sync::Arc; 3use std::sync::Arc;
4 4
5use crate::{TypeAlias, DefDatabase, AstDatabase, HasSource, type_ref::TypeRef}; 5use ra_syntax::ast::NameOwner;
6 6
7pub(crate) fn type_alias_ref_query( 7use crate::{TypeAlias, db::{DefDatabase, AstDatabase}, type_ref::TypeRef, name::{Name, AsName}, HasSource};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub struct TypeAliasData {
11 pub(crate) name: Name,
12 pub(crate) type_ref: Option<TypeRef>,
13}
14
15pub(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}