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.rs84
1 files changed, 37 insertions, 47 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs
index 62301e4ab..45fa4cd11 100644
--- a/crates/ra_hir/src/code_model_api.rs
+++ b/crates/ra_hir/src/code_model_api.rs
@@ -6,7 +6,7 @@ use ra_syntax::{ast::self, TreeArc, SyntaxNode};
6 6
7use crate::{ 7use crate::{
8 Name, ScopesWithSourceMap, Ty, HirFileId, 8 Name, ScopesWithSourceMap, Ty, HirFileId,
9 HirDatabase, PersistentHirDatabase, 9 HirDatabase, DefDatabase,
10 type_ref::TypeRef, 10 type_ref::TypeRef,
11 nameres::{ModuleScope, Namespace, ImportId, CrateModuleId}, 11 nameres::{ModuleScope, Namespace, ImportId, CrateModuleId},
12 expr::{Body, BodySourceMap}, 12 expr::{Body, BodySourceMap},
@@ -38,24 +38,21 @@ impl Crate {
38 self.crate_id 38 self.crate_id
39 } 39 }
40 40
41 pub fn dependencies(&self, db: &impl PersistentHirDatabase) -> Vec<CrateDependency> { 41 pub fn dependencies(&self, db: &impl DefDatabase) -> Vec<CrateDependency> {
42 self.dependencies_impl(db) 42 self.dependencies_impl(db)
43 } 43 }
44 44
45 pub fn root_module(&self, db: &impl PersistentHirDatabase) -> Option<Module> { 45 pub fn root_module(&self, db: &impl DefDatabase) -> Option<Module> {
46 self.root_module_impl(db) 46 self.root_module_impl(db)
47 } 47 }
48 48
49 pub fn edition(&self, db: &impl PersistentHirDatabase) -> Edition { 49 pub fn edition(&self, db: &impl DefDatabase) -> Edition {
50 let crate_graph = db.crate_graph(); 50 let crate_graph = db.crate_graph();
51 crate_graph.edition(self.crate_id) 51 crate_graph.edition(self.crate_id)
52 } 52 }
53 53
54 // FIXME: should this be in source_binder? 54 // FIXME: should this be in source_binder?
55 pub fn source_root_crates( 55 pub fn source_root_crates(db: &impl DefDatabase, source_root: SourceRootId) -> Vec<Crate> {
56 db: &impl PersistentHirDatabase,
57 source_root: SourceRootId,
58 ) -> Vec<Crate> {
59 let crate_ids = db.source_root_crates(source_root); 56 let crate_ids = db.source_root_crates(source_root);
60 crate_ids.iter().map(|&crate_id| Crate { crate_id }).collect() 57 crate_ids.iter().map(|&crate_id| Crate { crate_id }).collect()
61 } 58 }
@@ -101,7 +98,6 @@ pub enum ModuleSource {
101#[derive(Clone, Debug, Hash, PartialEq, Eq)] 98#[derive(Clone, Debug, Hash, PartialEq, Eq)]
102pub enum Problem { 99pub enum Problem {
103 UnresolvedModule { candidate: RelativePathBuf }, 100 UnresolvedModule { candidate: RelativePathBuf },
104 NotDirOwner { move_to: RelativePathBuf, candidate: RelativePathBuf },
105} 101}
106 102
107impl Module { 103impl Module {
@@ -111,7 +107,7 @@ impl Module {
111 } 107 }
112 108
113 /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items. 109 /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items.
114 pub fn definition_source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, ModuleSource) { 110 pub fn definition_source(&self, db: &impl DefDatabase) -> (HirFileId, ModuleSource) {
115 self.definition_source_impl(db) 111 self.definition_source_impl(db)
116 } 112 }
117 113
@@ -134,14 +130,14 @@ impl Module {
134 } 130 }
135 131
136 /// Returns the crate this module is part of. 132 /// Returns the crate this module is part of.
137 pub fn krate(&self, _db: &impl PersistentHirDatabase) -> Option<Crate> { 133 pub fn krate(&self, _db: &impl DefDatabase) -> Option<Crate> {
138 Some(self.krate) 134 Some(self.krate)
139 } 135 }
140 136
141 /// Topmost parent of this module. Every module has a `crate_root`, but some 137 /// Topmost parent of this module. Every module has a `crate_root`, but some
142 /// might be missing `krate`. This can happen if a module's file is not included 138 /// might be missing `krate`. This can happen if a module's file is not included
143 /// in the module tree of any target in `Cargo.toml`. 139 /// in the module tree of any target in `Cargo.toml`.
144 pub fn crate_root(&self, db: &impl PersistentHirDatabase) -> Module { 140 pub fn crate_root(&self, db: &impl DefDatabase) -> Module {
145 self.crate_root_impl(db) 141 self.crate_root_impl(db)
146 } 142 }
147 143
@@ -151,12 +147,12 @@ impl Module {
151 } 147 }
152 148
153 /// Iterates over all child modules. 149 /// Iterates over all child modules.
154 pub fn children(&self, db: &impl PersistentHirDatabase) -> impl Iterator<Item = Module> { 150 pub fn children(&self, db: &impl DefDatabase) -> impl Iterator<Item = Module> {
155 self.children_impl(db) 151 self.children_impl(db)
156 } 152 }
157 153
158 /// Finds a parent module. 154 /// Finds a parent module.
159 pub fn parent(&self, db: &impl PersistentHirDatabase) -> Option<Module> { 155 pub fn parent(&self, db: &impl DefDatabase) -> Option<Module> {
160 self.parent_impl(db) 156 self.parent_impl(db)
161 } 157 }
162 158
@@ -229,7 +225,7 @@ impl StructField {
229 self.parent.variant_data(db).fields().unwrap()[self.id].name.clone() 225 self.parent.variant_data(db).fields().unwrap()[self.id].name.clone()
230 } 226 }
231 227
232 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, FieldSource) { 228 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, FieldSource) {
233 self.source_impl(db) 229 self.source_impl(db)
234 } 230 }
235 231
@@ -257,7 +253,7 @@ pub struct Struct {
257} 253}
258 254
259impl Struct { 255impl Struct {
260 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::StructDef>) { 256 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) {
261 self.id.source(db) 257 self.id.source(db)
262 } 258 }
263 259
@@ -289,7 +285,7 @@ impl Struct {
289 .map(|(id, _)| StructField { parent: (*self).into(), id }) 285 .map(|(id, _)| StructField { parent: (*self).into(), id })
290 } 286 }
291 287
292 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> { 288 pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
293 db.generic_params((*self).into()) 289 db.generic_params((*self).into())
294 } 290 }
295 291
@@ -325,7 +321,7 @@ pub struct Enum {
325} 321}
326 322
327impl Enum { 323impl Enum {
328 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) { 324 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) {
329 self.id.source(db) 325 self.id.source(db)
330 } 326 }
331 327
@@ -337,7 +333,7 @@ impl Enum {
337 db.enum_data(*self).name.clone() 333 db.enum_data(*self).name.clone()
338 } 334 }
339 335
340 pub fn variants(&self, db: &impl PersistentHirDatabase) -> Vec<EnumVariant> { 336 pub fn variants(&self, db: &impl DefDatabase) -> Vec<EnumVariant> {
341 db.enum_data(*self) 337 db.enum_data(*self)
342 .variants 338 .variants
343 .iter() 339 .iter()
@@ -345,7 +341,7 @@ impl Enum {
345 .collect() 341 .collect()
346 } 342 }
347 343
348 pub fn variant(&self, db: &impl PersistentHirDatabase, name: &Name) -> Option<EnumVariant> { 344 pub fn variant(&self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> {
349 db.enum_data(*self) 345 db.enum_data(*self)
350 .variants 346 .variants
351 .iter() 347 .iter()
@@ -353,7 +349,7 @@ impl Enum {
353 .map(|(id, _)| EnumVariant { parent: *self, id }) 349 .map(|(id, _)| EnumVariant { parent: *self, id })
354 } 350 }
355 351
356 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> { 352 pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
357 db.generic_params((*self).into()) 353 db.generic_params((*self).into())
358 } 354 }
359 355
@@ -386,20 +382,17 @@ pub struct EnumVariant {
386} 382}
387 383
388impl EnumVariant { 384impl EnumVariant {
389 pub fn source( 385 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumVariant>) {
390 &self,
391 db: &impl PersistentHirDatabase,
392 ) -> (HirFileId, TreeArc<ast::EnumVariant>) {
393 self.source_impl(db) 386 self.source_impl(db)
394 } 387 }
395 pub fn module(&self, db: &impl HirDatabase) -> Module { 388 pub fn module(&self, db: &impl HirDatabase) -> Module {
396 self.parent.module(db) 389 self.parent.module(db)
397 } 390 }
398 pub fn parent_enum(&self, _db: &impl PersistentHirDatabase) -> Enum { 391 pub fn parent_enum(&self, _db: &impl DefDatabase) -> Enum {
399 self.parent 392 self.parent
400 } 393 }
401 394
402 pub fn name(&self, db: &impl PersistentHirDatabase) -> Option<Name> { 395 pub fn name(&self, db: &impl DefDatabase) -> Option<Name> {
403 db.enum_data(self.parent).variants[self.id].name.clone() 396 db.enum_data(self.parent).variants[self.id].name.clone()
404 } 397 }
405 398
@@ -465,11 +458,11 @@ impl FnSignature {
465} 458}
466 459
467impl Function { 460impl Function {
468 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::FnDef>) { 461 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::FnDef>) {
469 self.id.source(db) 462 self.id.source(db)
470 } 463 }
471 464
472 pub fn module(&self, db: &impl PersistentHirDatabase) -> Module { 465 pub fn module(&self, db: &impl DefDatabase) -> Module {
473 self.id.module(db) 466 self.id.module(db)
474 } 467 }
475 468
@@ -503,12 +496,12 @@ impl Function {
503 db.infer(*self) 496 db.infer(*self)
504 } 497 }
505 498
506 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> { 499 pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
507 db.generic_params((*self).into()) 500 db.generic_params((*self).into())
508 } 501 }
509 502
510 /// The containing impl block, if this is a method. 503 /// The containing impl block, if this is a method.
511 pub fn impl_block(&self, db: &impl PersistentHirDatabase) -> Option<ImplBlock> { 504 pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> {
512 let module_impls = db.impls_in_module(self.module(db)); 505 let module_impls = db.impls_in_module(self.module(db));
513 ImplBlock::containing(module_impls, (*self).into()) 506 ImplBlock::containing(module_impls, (*self).into())
514 } 507 }
@@ -540,11 +533,11 @@ pub struct Const {
540} 533}
541 534
542impl Const { 535impl Const {
543 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) { 536 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) {
544 self.id.source(db) 537 self.id.source(db)
545 } 538 }
546 539
547 pub fn module(&self, db: &impl PersistentHirDatabase) -> Module { 540 pub fn module(&self, db: &impl DefDatabase) -> Module {
548 self.id.module(db) 541 self.id.module(db)
549 } 542 }
550 543
@@ -553,7 +546,7 @@ impl Const {
553 } 546 }
554 547
555 /// The containing impl block, if this is a method. 548 /// The containing impl block, if this is a method.
556 pub fn impl_block(&self, db: &impl PersistentHirDatabase) -> Option<ImplBlock> { 549 pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> {
557 let module_impls = db.impls_in_module(self.module(db)); 550 let module_impls = db.impls_in_module(self.module(db));
558 ImplBlock::containing(module_impls, (*self).into()) 551 ImplBlock::containing(module_impls, (*self).into())
559 } 552 }
@@ -599,11 +592,11 @@ pub struct Static {
599} 592}
600 593
601impl Static { 594impl Static {
602 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) { 595 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) {
603 self.id.source(db) 596 self.id.source(db)
604 } 597 }
605 598
606 pub fn module(&self, db: &impl PersistentHirDatabase) -> Module { 599 pub fn module(&self, db: &impl DefDatabase) -> Module {
607 self.id.module(db) 600 self.id.module(db)
608 } 601 }
609 602
@@ -630,15 +623,15 @@ pub struct Trait {
630} 623}
631 624
632impl Trait { 625impl Trait {
633 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) { 626 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) {
634 self.id.source(db) 627 self.id.source(db)
635 } 628 }
636 629
637 pub fn module(&self, db: &impl PersistentHirDatabase) -> Module { 630 pub fn module(&self, db: &impl DefDatabase) -> Module {
638 self.id.module(db) 631 self.id.module(db)
639 } 632 }
640 633
641 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> { 634 pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
642 db.generic_params((*self).into()) 635 db.generic_params((*self).into())
643 } 636 }
644} 637}
@@ -655,28 +648,25 @@ pub struct TypeAlias {
655} 648}
656 649
657impl TypeAlias { 650impl TypeAlias {
658 pub fn source( 651 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TypeAliasDef>) {
659 &self,
660 db: &impl PersistentHirDatabase,
661 ) -> (HirFileId, TreeArc<ast::TypeAliasDef>) {
662 self.id.source(db) 652 self.id.source(db)
663 } 653 }
664 654
665 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> { 655 pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
666 db.generic_params((*self).into()) 656 db.generic_params((*self).into())
667 } 657 }
668 658
669 pub fn module(&self, db: &impl PersistentHirDatabase) -> Module { 659 pub fn module(&self, db: &impl DefDatabase) -> Module {
670 self.id.module(db) 660 self.id.module(db)
671 } 661 }
672 662
673 /// The containing impl block, if this is a method. 663 /// The containing impl block, if this is a method.
674 pub fn impl_block(&self, db: &impl PersistentHirDatabase) -> Option<ImplBlock> { 664 pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> {
675 let module_impls = db.impls_in_module(self.module(db)); 665 let module_impls = db.impls_in_module(self.module(db));
676 ImplBlock::containing(module_impls, (*self).into()) 666 ImplBlock::containing(module_impls, (*self).into())
677 } 667 }
678 668
679 pub fn type_ref(self, db: &impl PersistentHirDatabase) -> Arc<TypeRef> { 669 pub fn type_ref(self, db: &impl DefDatabase) -> Arc<TypeRef> {
680 db.type_alias_ref(self) 670 db.type_alias_ref(self)
681 } 671 }
682 672