diff options
author | Aleksey Kladov <[email protected]> | 2019-11-22 09:57:40 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-11-22 10:13:51 +0000 |
commit | 4fc900deb121539a5311059e1ebb83ef73b190df (patch) | |
tree | 3dab5ec4164b9af8d9f921648ce495f8cd607986 /crates/ra_hir_def/src/type_alias.rs | |
parent | d59bf33b9e1c20d6ef3fd9b72f3cf4730172b5a8 (diff) |
Move TypeAlias to hir_def
Diffstat (limited to 'crates/ra_hir_def/src/type_alias.rs')
-rw-r--r-- | crates/ra_hir_def/src/type_alias.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/crates/ra_hir_def/src/type_alias.rs b/crates/ra_hir_def/src/type_alias.rs new file mode 100644 index 000000000..c0b49aa7c --- /dev/null +++ b/crates/ra_hir_def/src/type_alias.rs | |||
@@ -0,0 +1,27 @@ | |||
1 | //! HIR for type aliases (i.e. the `type` keyword). | ||
2 | |||
3 | use std::sync::Arc; | ||
4 | |||
5 | use hir_expand::name::{AsName, Name}; | ||
6 | |||
7 | use ra_syntax::ast::NameOwner; | ||
8 | |||
9 | use crate::{db::DefDatabase2, type_ref::TypeRef, HasSource, Lookup, TypeAliasId}; | ||
10 | |||
11 | #[derive(Debug, Clone, PartialEq, Eq)] | ||
12 | pub struct TypeAliasData { | ||
13 | pub name: Name, | ||
14 | pub type_ref: Option<TypeRef>, | ||
15 | } | ||
16 | |||
17 | impl TypeAliasData { | ||
18 | pub(crate) fn type_alias_data_query( | ||
19 | db: &impl DefDatabase2, | ||
20 | typ: TypeAliasId, | ||
21 | ) -> Arc<TypeAliasData> { | ||
22 | let node = typ.lookup(db).source(db).value; | ||
23 | let name = node.name().map_or_else(Name::missing, |n| n.as_name()); | ||
24 | let type_ref = node.type_ref().map(TypeRef::from_ast); | ||
25 | Arc::new(TypeAliasData { name, type_ref }) | ||
26 | } | ||
27 | } | ||