From 5d54aa678153d0af0edc8b4dd2d74709d10ca66c Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 23 May 2019 20:18:47 +0300 Subject: add union to code_model --- crates/ra_hir/src/nameres/collector.rs | 6 +++++- crates/ra_hir/src/nameres/raw.rs | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'crates/ra_hir/src/nameres') diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs index c615d80c3..621236551 100644 --- a/crates/ra_hir/src/nameres/collector.rs +++ b/crates/ra_hir/src/nameres/collector.rs @@ -6,7 +6,7 @@ use ra_db::FileId; use ra_syntax::ast; use crate::{ - Function, Module, Struct, Enum, Const, Static, Trait, TypeAlias, + Function, Module, Struct, Union, Enum, Const, Static, Trait, TypeAlias, DefDatabase, HirFileId, Name, Path, KnownName, nameres::{ @@ -495,6 +495,10 @@ where let s = def!(Struct, ast_id); PerNs::both(s, s) } + raw::DefKind::Union(ast_id) => { + let s = def!(Union, ast_id); + PerNs::both(s, s) + } raw::DefKind::Enum(ast_id) => PerNs::types(def!(Enum, ast_id)), raw::DefKind::Const(ast_id) => PerNs::values(def!(Const, ast_id)), raw::DefKind::Static(ast_id) => PerNs::values(def!(Static, ast_id)), diff --git a/crates/ra_hir/src/nameres/raw.rs b/crates/ra_hir/src/nameres/raw.rs index bd32b264b..1b4dcbb7a 100644 --- a/crates/ra_hir/src/nameres/raw.rs +++ b/crates/ra_hir/src/nameres/raw.rs @@ -1,7 +1,4 @@ -use std::{ - sync::Arc, - ops::Index, -}; +use std::{sync::Arc, ops::Index}; use test_utils::tested_by; use ra_arena::{Arena, impl_arena_id, RawId, map::ArenaMap}; @@ -10,10 +7,7 @@ use ra_syntax::{ ast::{self, NameOwner, AttrsOwner}, }; -use crate::{ - DefDatabase, Name, AsName, Path, HirFileId, ModuleSource, - AstIdMap, FileAstId, Either, -}; +use crate::{DefDatabase, Name, AsName, Path, HirFileId, ModuleSource, AstIdMap, FileAstId, Either}; /// `RawItems` is a set of top-level items in a file (except for impls). /// @@ -161,6 +155,7 @@ pub(super) struct DefData { pub(super) enum DefKind { Function(FileAstId), Struct(FileAstId), + Union(FileAstId), Enum(FileAstId), Const(FileAstId), Static(FileAstId), @@ -215,7 +210,13 @@ impl RawItemsCollector { return; } ast::ModuleItemKind::StructDef(it) => { - (DefKind::Struct(self.source_ast_id_map.ast_id(it)), it.name()) + let id = self.source_ast_id_map.ast_id(it); + let name = it.name(); + if it.is_union() { + (DefKind::Union(id), name) + } else { + (DefKind::Struct(id), name) + } } ast::ModuleItemKind::EnumDef(it) => { (DefKind::Enum(self.source_ast_id_map.ast_id(it)), it.name()) -- cgit v1.2.3