From 2d0ab52212f62345ba9f9d5040c553e59460b349 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 8 Jan 2019 15:27:00 +0300 Subject: move variants to API --- crates/ra_hir/src/adt.rs | 30 +++--------------------------- crates/ra_hir/src/code_model_api.rs | 31 ++++++++++++++++++++++++++++++- crates/ra_hir/src/lib.rs | 2 +- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index 935f39959..58deea1c7 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use ra_syntax::ast::{self, NameOwner, StructFlavor}; use crate::{ - DefId, Name, AsName, Struct, Enum, + DefId, Name, AsName, Struct, Enum, VariantData, StructField, type_ref::TypeRef, }; @@ -67,30 +67,6 @@ impl EnumData { } } -/// A single field of an enum variant or struct -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct StructField { - name: Name, - type_ref: TypeRef, -} - -impl StructField { - pub fn name(&self) -> Name { - self.name.clone() - } - pub fn type_ref(&self) -> &TypeRef { - &self.type_ref - } -} - -/// Fields of an enum variant or struct -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum VariantData { - Struct(Vec), - Tuple(Vec), - Unit, -} - impl VariantData { pub fn new(flavor: StructFlavor) -> Self { match flavor { @@ -122,8 +98,8 @@ impl VariantData { pub(crate) fn get_field_type_ref(&self, field_name: &Name) -> Option<&TypeRef> { self.fields() .iter() - .find(|f| f.name == *field_name) - .map(|f| &f.type_ref) + .find(|f| f.name() == field_name) + .map(|f| f.type_ref()) } pub fn fields(&self) -> &[StructField] { diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 25d710c73..3bb42ac58 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -4,7 +4,12 @@ use relative_path::RelativePathBuf; use ra_db::{CrateId, Cancelable, FileId}; use ra_syntax::{ast, TreePtr, SyntaxNode}; -use crate::{Name, db::HirDatabase, DefId, Path, PerNs, nameres::ModuleScope, adt::VariantData}; +use crate::{ + Name, DefId, Path, PerNs, + type_ref::TypeRef, + nameres::ModuleScope, + db::HirDatabase, +}; /// hir::Crate describes a single crate. It's the main inteface with which /// crate's dependencies interact. Mostly, it should be just a proxy for the @@ -114,6 +119,30 @@ impl Module { } } +/// A single field of an enum variant or struct +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct StructField { + pub(crate) name: Name, + pub(crate) type_ref: TypeRef, +} + +impl StructField { + pub fn name(&self) -> &Name { + &self.name + } + pub fn type_ref(&self) -> &TypeRef { + &self.type_ref + } +} + +/// Fields of an enum variant or struct +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum VariantData { + Struct(Vec), + Tuple(Vec), + Unit, +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Struct { pub(crate) def_id: DefId, diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 8eff2aea5..cd04575d1 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -59,7 +59,7 @@ pub use self::function::FnSignatureInfo; pub use self::code_model_api::{ Crate, CrateDependency, Module, ModuleSource, Problem, - Struct, Enum, + Struct, Enum, VariantData, StructField, }; pub enum Def { -- cgit v1.2.3