diff options
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r-- | crates/ra_hir/src/code_model_api.rs | 84 |
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 | ||
7 | use crate::{ | 7 | use 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)] |
102 | pub enum Problem { | 99 | pub enum Problem { |
103 | UnresolvedModule { candidate: RelativePathBuf }, | 100 | UnresolvedModule { candidate: RelativePathBuf }, |
104 | NotDirOwner { move_to: RelativePathBuf, candidate: RelativePathBuf }, | ||
105 | } | 101 | } |
106 | 102 | ||
107 | impl Module { | 103 | impl 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 | ||
259 | impl Struct { | 255 | impl 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 | ||
327 | impl Enum { | 323 | impl 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 | ||
388 | impl EnumVariant { | 384 | impl 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 | ||
467 | impl Function { | 460 | impl 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 | ||
542 | impl Const { | 535 | impl 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 | ||
601 | impl Static { | 594 | impl 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 | ||
632 | impl Trait { | 625 | impl 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 | ||
657 | impl TypeAlias { | 650 | impl 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 | ||