From e30c533eb67ba8a24708a94385849854c17e67f9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 8 Jan 2019 15:19:37 +0300 Subject: move stuct to code_model_api --- crates/ra_hir/src/code_model_api.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/code_model_api.rs') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 43cddb504..12947da2d 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -1,8 +1,10 @@ +use std::sync::Arc; + 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}; +use crate::{Name, db::HirDatabase, DefId, Path, PerNs, nameres::ModuleScope, adt::VariantData}; /// 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 @@ -111,3 +113,21 @@ impl Module { self.problems_impl(db) } } + +pub struct Struct { + pub(crate) def_id: DefId, +} + +impl Struct { + pub fn def_id(&self) -> DefId { + self.def_id + } + + pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable> { + Ok(self.struct_data(db)?.variant_data.clone()) + } + + pub fn name(&self, db: &impl HirDatabase) -> Cancelable> { + Ok(self.struct_data(db)?.name.clone()) + } +} -- cgit v1.2.3 From 2d4dc22af8db8f9ebb5f2e95cd25c473494a4b70 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 8 Jan 2019 15:22:57 +0300 Subject: move enum to code_model_api --- crates/ra_hir/src/code_model_api.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'crates/ra_hir/src/code_model_api.rs') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 12947da2d..43bd2003c 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -114,6 +114,7 @@ impl Module { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Struct { pub(crate) def_id: DefId, } @@ -124,10 +125,29 @@ impl Struct { } pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable> { - Ok(self.struct_data(db)?.variant_data.clone()) + Ok(db.struct_data(self.def_id)?.variant_data.clone()) } pub fn name(&self, db: &impl HirDatabase) -> Cancelable> { - Ok(self.struct_data(db)?.name.clone()) + Ok(db.struct_data(self.def_id)?.name.clone()) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct Enum { + pub(crate) def_id: DefId, +} + +impl Enum { + pub fn def_id(&self) -> DefId { + self.def_id + } + + pub fn name(&self, db: &impl HirDatabase) -> Cancelable> { + Ok(db.enum_data(self.def_id)?.name.clone()) + } + + pub fn variants(&self, db: &impl HirDatabase) -> Cancelable)>> { + Ok(db.enum_data(self.def_id)?.variants.clone()) } } -- cgit v1.2.3 From 71c7936932c7471ce968223c20fd9bb812524c7a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 8 Jan 2019 15:23:56 +0300 Subject: minor --- crates/ra_hir/src/code_model_api.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'crates/ra_hir/src/code_model_api.rs') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 43bd2003c..25d710c73 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -124,13 +124,13 @@ impl Struct { self.def_id } - pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable> { - Ok(db.struct_data(self.def_id)?.variant_data.clone()) - } - pub fn name(&self, db: &impl HirDatabase) -> Cancelable> { Ok(db.struct_data(self.def_id)?.name.clone()) } + + pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable> { + Ok(db.struct_data(self.def_id)?.variant_data.clone()) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -- cgit v1.2.3 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/code_model_api.rs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/code_model_api.rs') 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, -- cgit v1.2.3 From 64f202bdd7f74b081e08f2b5faee4bd91c9b44a8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 8 Jan 2019 15:32:27 +0300 Subject: move variant public api to api --- crates/ra_hir/src/code_model_api.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'crates/ra_hir/src/code_model_api.rs') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 3bb42ac58..f06f1ae66 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -143,6 +143,33 @@ pub enum VariantData { Unit, } +impl VariantData { + pub fn fields(&self) -> &[StructField] { + match self { + VariantData::Struct(fields) | VariantData::Tuple(fields) => fields, + _ => &[], + } + } + pub fn is_struct(&self) -> bool { + match self { + VariantData::Struct(..) => true, + _ => false, + } + } + pub fn is_tuple(&self) -> bool { + match self { + VariantData::Tuple(..) => true, + _ => false, + } + } + pub fn is_unit(&self) -> bool { + match self { + VariantData::Unit => true, + _ => false, + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Struct { pub(crate) def_id: DefId, -- cgit v1.2.3