aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model_api.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r--crates/ra_hir/src/code_model_api.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs
index 5a05b5822..1e88bff8b 100644
--- a/crates/ra_hir/src/code_model_api.rs
+++ b/crates/ra_hir/src/code_model_api.rs
@@ -10,8 +10,8 @@ use crate::{
10 nameres::{ModuleScope, lower::ImportId}, 10 nameres::{ModuleScope, lower::ImportId},
11 db::HirDatabase, 11 db::HirDatabase,
12 expr::BodySyntaxMapping, 12 expr::BodySyntaxMapping,
13 ty::{InferenceResult, VariantDef}, 13 ty::InferenceResult,
14 adt::{EnumVariantId, StructFieldId}, 14 adt::{EnumVariantId, StructFieldId, VariantDef},
15 generics::GenericParams, 15 generics::GenericParams,
16 docs::{Documentation, Docs, docs_from_ast}, 16 docs::{Documentation, Docs, docs_from_ast},
17 module_tree::ModuleId, 17 module_tree::ModuleId,
@@ -186,10 +186,16 @@ impl Docs for Module {
186 186
187#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 187#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
188pub struct StructField { 188pub struct StructField {
189 parent: VariantDef, 189 pub(crate) parent: VariantDef,
190 pub(crate) id: StructFieldId, 190 pub(crate) id: StructFieldId,
191} 191}
192 192
193#[derive(Debug)]
194pub enum FieldSource {
195 Named(TreeArc<ast::NamedFieldDef>),
196 Pos(TreeArc<ast::PosField>),
197}
198
193impl StructField { 199impl StructField {
194 pub fn name(&self, db: &impl HirDatabase) -> Name { 200 pub fn name(&self, db: &impl HirDatabase) -> Name {
195 self.parent.variant_data(db).fields().unwrap()[self.id] 201 self.parent.variant_data(db).fields().unwrap()[self.id]
@@ -197,6 +203,10 @@ impl StructField {
197 .clone() 203 .clone()
198 } 204 }
199 205
206 pub fn source(&self, db: &impl HirDatabase) -> (HirFileId, FieldSource) {
207 self.source_impl(db)
208 }
209
200 pub fn ty(&self, db: &impl HirDatabase) -> Ty { 210 pub fn ty(&self, db: &impl HirDatabase) -> Ty {
201 db.type_for_field(*self) 211 db.type_for_field(*self)
202 } 212 }