aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
authorSeivan Heidari <[email protected]>2019-10-31 16:40:39 +0000
committerSeivan Heidari <[email protected]>2019-10-31 16:40:39 +0000
commit1b6c68e51fcbba59c2e99c31d1400cbd6d44f928 (patch)
treebdf28d44b2908a62b49a3f2bb1995187f45e42c4 /crates/ra_hir/src/code_model.rs
parenta437f0e5849d8ce0a14d40a55f2ac2166f5ec343 (diff)
parent5451bfb9a1c6482822bdd7883434b9230affd2ea (diff)
Merge branch 'master' into feature/themes
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs31
1 files changed, 20 insertions, 11 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index b32aa145e..ae6ef7606 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -6,16 +6,17 @@ pub(crate) mod docs;
6use std::sync::Arc; 6use std::sync::Arc;
7 7
8use hir_def::{ 8use hir_def::{
9 adt::VariantData,
9 builtin_type::BuiltinType, 10 builtin_type::BuiltinType,
10 type_ref::{Mutability, TypeRef}, 11 type_ref::{Mutability, TypeRef},
11 CrateModuleId, LocalEnumVariantId, ModuleId, 12 CrateModuleId, LocalEnumVariantId, LocalStructFieldId, ModuleId,
12}; 13};
13use hir_expand::name::{self, AsName}; 14use hir_expand::name::{self, AsName};
14use ra_db::{CrateId, Edition}; 15use ra_db::{CrateId, Edition};
15use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner}; 16use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner};
16 17
17use crate::{ 18use crate::{
18 adt::{StructFieldId, VariantDef}, 19 adt::VariantDef,
19 db::{AstDatabase, DefDatabase, HirDatabase}, 20 db::{AstDatabase, DefDatabase, HirDatabase},
20 diagnostics::DiagnosticSink, 21 diagnostics::DiagnosticSink,
21 expr::{validation::ExprValidator, Body, BodySourceMap}, 22 expr::{validation::ExprValidator, Body, BodySourceMap},
@@ -250,7 +251,7 @@ impl Module {
250#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 251#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
251pub struct StructField { 252pub struct StructField {
252 pub(crate) parent: VariantDef, 253 pub(crate) parent: VariantDef,
253 pub(crate) id: StructFieldId, 254 pub(crate) id: LocalStructFieldId,
254} 255}
255 256
256#[derive(Debug, PartialEq, Eq)] 257#[derive(Debug, PartialEq, Eq)]
@@ -288,11 +289,11 @@ impl Struct {
288 } 289 }
289 290
290 pub fn name(self, db: &impl DefDatabase) -> Option<Name> { 291 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
291 db.struct_data(self).name.clone() 292 db.struct_data(self.id).name.clone()
292 } 293 }
293 294
294 pub fn fields(self, db: &impl HirDatabase) -> Vec<StructField> { 295 pub fn fields(self, db: &impl HirDatabase) -> Vec<StructField> {
295 db.struct_data(self) 296 db.struct_data(self.id)
296 .variant_data 297 .variant_data
297 .fields() 298 .fields()
298 .into_iter() 299 .into_iter()
@@ -302,7 +303,7 @@ impl Struct {
302 } 303 }
303 304
304 pub fn field(self, db: &impl HirDatabase, name: &Name) -> Option<StructField> { 305 pub fn field(self, db: &impl HirDatabase, name: &Name) -> Option<StructField> {
305 db.struct_data(self) 306 db.struct_data(self.id)
306 .variant_data 307 .variant_data
307 .fields() 308 .fields()
308 .into_iter() 309 .into_iter()
@@ -338,7 +339,7 @@ pub struct Union {
338 339
339impl Union { 340impl Union {
340 pub fn name(self, db: &impl DefDatabase) -> Option<Name> { 341 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
341 db.struct_data(Struct { id: self.id }).name.clone() 342 db.struct_data(self.id).name.clone()
342 } 343 }
343 344
344 pub fn module(self, db: &impl HirDatabase) -> Module { 345 pub fn module(self, db: &impl HirDatabase) -> Module {
@@ -376,15 +377,19 @@ impl Enum {
376 } 377 }
377 378
378 pub fn name(self, db: &impl DefDatabase) -> Option<Name> { 379 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
379 db.enum_data(self).name.clone() 380 db.enum_data(self.id).name.clone()
380 } 381 }
381 382
382 pub fn variants(self, db: &impl DefDatabase) -> Vec<EnumVariant> { 383 pub fn variants(self, db: &impl DefDatabase) -> Vec<EnumVariant> {
383 db.enum_data(self).variants.iter().map(|(id, _)| EnumVariant { parent: self, id }).collect() 384 db.enum_data(self.id)
385 .variants
386 .iter()
387 .map(|(id, _)| EnumVariant { parent: self, id })
388 .collect()
384 } 389 }
385 390
386 pub fn variant(self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> { 391 pub fn variant(self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> {
387 db.enum_data(self) 392 db.enum_data(self.id)
388 .variants 393 .variants
389 .iter() 394 .iter()
390 .find(|(_id, data)| data.name.as_ref() == Some(name)) 395 .find(|(_id, data)| data.name.as_ref() == Some(name))
@@ -422,7 +427,7 @@ impl EnumVariant {
422 } 427 }
423 428
424 pub fn name(self, db: &impl DefDatabase) -> Option<Name> { 429 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
425 db.enum_data(self.parent).variants[self.id].name.clone() 430 db.enum_data(self.parent.id).variants[self.id].name.clone()
426 } 431 }
427 432
428 pub fn fields(self, db: &impl HirDatabase) -> Vec<StructField> { 433 pub fn fields(self, db: &impl HirDatabase) -> Vec<StructField> {
@@ -442,6 +447,10 @@ impl EnumVariant {
442 .find(|(_id, data)| data.name == *name) 447 .find(|(_id, data)| data.name == *name)
443 .map(|(id, _)| StructField { parent: self.into(), id }) 448 .map(|(id, _)| StructField { parent: self.into(), id })
444 } 449 }
450
451 pub(crate) fn variant_data(self, db: &impl DefDatabase) -> Arc<VariantData> {
452 db.enum_data(self.parent.id).variants[self.id].variant_data.clone()
453 }
445} 454}
446 455
447/// A Data Type 456/// A Data Type