diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-04-13 12:17:48 +0100 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-04-13 12:17:48 +0100 |
commit | 8887782c4ab97d22f3d5c10e142407e4371c5c61 (patch) | |
tree | 80b60b2c0c2f6104b98e16648b95d99d9b1d3463 /crates/ra_hir/src/code_model_api.rs | |
parent | 34a05b7fea4add78446b2d93a64538982abacb9f (diff) | |
parent | 2facb5e061971afbf6bd2fabe3966d5de9d46489 (diff) |
Merge #1129
1129: introduce SourceAnalyzer API for ides r=matklad a=matklad
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r-- | crates/ra_hir/src/code_model_api.rs | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index f13a6b37a..5d8cf57b6 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs | |||
@@ -4,7 +4,7 @@ use ra_db::{CrateId, SourceRootId, Edition}; | |||
4 | use ra_syntax::{ast::self, TreeArc}; | 4 | use ra_syntax::{ast::self, TreeArc}; |
5 | 5 | ||
6 | use crate::{ | 6 | use crate::{ |
7 | Name, ScopesWithSourceMap, Ty, HirFileId, Either, | 7 | Name, Ty, HirFileId, Either, |
8 | HirDatabase, DefDatabase, | 8 | HirDatabase, DefDatabase, |
9 | type_ref::TypeRef, | 9 | type_ref::TypeRef, |
10 | nameres::{ModuleScope, Namespace, ImportId, CrateModuleId}, | 10 | nameres::{ModuleScope, Namespace, ImportId, CrateModuleId}, |
@@ -189,7 +189,7 @@ impl Module { | |||
189 | } | 189 | } |
190 | } | 190 | } |
191 | 191 | ||
192 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 192 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
193 | let def_map = db.crate_def_map(self.krate); | 193 | let def_map = db.crate_def_map(self.krate); |
194 | Resolver::default().push_module_scope(def_map, self.module_id) | 194 | Resolver::default().push_module_scope(def_map, self.module_id) |
195 | } | 195 | } |
@@ -313,7 +313,7 @@ impl Struct { | |||
313 | 313 | ||
314 | // FIXME move to a more general type | 314 | // FIXME move to a more general type |
315 | /// Builds a resolver for type references inside this struct. | 315 | /// Builds a resolver for type references inside this struct. |
316 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 316 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
317 | // take the outer scope... | 317 | // take the outer scope... |
318 | let r = self.module(db).resolver(db); | 318 | let r = self.module(db).resolver(db); |
319 | // ...and add generic params, if present | 319 | // ...and add generic params, if present |
@@ -373,7 +373,7 @@ impl Enum { | |||
373 | 373 | ||
374 | // FIXME: move to a more general type | 374 | // FIXME: move to a more general type |
375 | /// Builds a resolver for type references inside this struct. | 375 | /// Builds a resolver for type references inside this struct. |
376 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 376 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
377 | // take the outer scope... | 377 | // take the outer scope... |
378 | let r = self.module(db).resolver(db); | 378 | let r = self.module(db).resolver(db); |
379 | // ...and add generic params, if present | 379 | // ...and add generic params, if present |
@@ -450,28 +450,22 @@ impl DefWithBody { | |||
450 | db.infer(*self) | 450 | db.infer(*self) |
451 | } | 451 | } |
452 | 452 | ||
453 | pub fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { | ||
454 | db.body_with_source_map(*self).1 | ||
455 | } | ||
456 | |||
457 | pub fn body(&self, db: &impl HirDatabase) -> Arc<Body> { | 453 | pub fn body(&self, db: &impl HirDatabase) -> Arc<Body> { |
458 | db.body_hir(*self) | 454 | db.body_hir(*self) |
459 | } | 455 | } |
460 | 456 | ||
457 | pub fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { | ||
458 | db.body_with_source_map(*self).1 | ||
459 | } | ||
460 | |||
461 | /// Builds a resolver for code inside this item. | 461 | /// Builds a resolver for code inside this item. |
462 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 462 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
463 | match *self { | 463 | match *self { |
464 | DefWithBody::Const(ref c) => c.resolver(db), | 464 | DefWithBody::Const(ref c) => c.resolver(db), |
465 | DefWithBody::Function(ref f) => f.resolver(db), | 465 | DefWithBody::Function(ref f) => f.resolver(db), |
466 | DefWithBody::Static(ref s) => s.resolver(db), | 466 | DefWithBody::Static(ref s) => s.resolver(db), |
467 | } | 467 | } |
468 | } | 468 | } |
469 | |||
470 | pub fn scopes(&self, db: &impl HirDatabase) -> ScopesWithSourceMap { | ||
471 | let scopes = db.expr_scopes(*self); | ||
472 | let source_map = db.body_with_source_map(*self).1; | ||
473 | ScopesWithSourceMap { scopes, source_map } | ||
474 | } | ||
475 | } | 469 | } |
476 | 470 | ||
477 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 471 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
@@ -523,7 +517,7 @@ impl Function { | |||
523 | self.signature(db).name.clone() | 517 | self.signature(db).name.clone() |
524 | } | 518 | } |
525 | 519 | ||
526 | pub fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { | 520 | pub(crate) fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { |
527 | db.body_with_source_map((*self).into()).1 | 521 | db.body_with_source_map((*self).into()).1 |
528 | } | 522 | } |
529 | 523 | ||
@@ -535,12 +529,6 @@ impl Function { | |||
535 | db.type_for_def((*self).into(), Namespace::Values) | 529 | db.type_for_def((*self).into(), Namespace::Values) |
536 | } | 530 | } |
537 | 531 | ||
538 | pub fn scopes(&self, db: &impl HirDatabase) -> ScopesWithSourceMap { | ||
539 | let scopes = db.expr_scopes((*self).into()); | ||
540 | let source_map = db.body_with_source_map((*self).into()).1; | ||
541 | ScopesWithSourceMap { scopes, source_map } | ||
542 | } | ||
543 | |||
544 | pub fn signature(&self, db: &impl HirDatabase) -> Arc<FnSignature> { | 532 | pub fn signature(&self, db: &impl HirDatabase) -> Arc<FnSignature> { |
545 | db.fn_signature(*self) | 533 | db.fn_signature(*self) |
546 | } | 534 | } |
@@ -561,7 +549,7 @@ impl Function { | |||
561 | 549 | ||
562 | // FIXME: move to a more general type for 'body-having' items | 550 | // FIXME: move to a more general type for 'body-having' items |
563 | /// Builds a resolver for code inside this item. | 551 | /// Builds a resolver for code inside this item. |
564 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 552 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
565 | // take the outer scope... | 553 | // take the outer scope... |
566 | let r = self | 554 | let r = self |
567 | .impl_block(db) | 555 | .impl_block(db) |
@@ -606,10 +594,6 @@ impl Const { | |||
606 | db.infer((*self).into()) | 594 | db.infer((*self).into()) |
607 | } | 595 | } |
608 | 596 | ||
609 | pub fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { | ||
610 | db.body_with_source_map((*self).into()).1 | ||
611 | } | ||
612 | |||
613 | /// The containing impl block, if this is a method. | 597 | /// The containing impl block, if this is a method. |
614 | pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> { | 598 | pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> { |
615 | let module_impls = db.impls_in_module(self.module(db)); | 599 | let module_impls = db.impls_in_module(self.module(db)); |
@@ -618,7 +602,7 @@ impl Const { | |||
618 | 602 | ||
619 | // FIXME: move to a more general type for 'body-having' items | 603 | // FIXME: move to a more general type for 'body-having' items |
620 | /// Builds a resolver for code inside this item. | 604 | /// Builds a resolver for code inside this item. |
621 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 605 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
622 | // take the outer scope... | 606 | // take the outer scope... |
623 | let r = self | 607 | let r = self |
624 | .impl_block(db) | 608 | .impl_block(db) |
@@ -670,7 +654,7 @@ impl Static { | |||
670 | } | 654 | } |
671 | 655 | ||
672 | /// Builds a resolver for code inside this item. | 656 | /// Builds a resolver for code inside this item. |
673 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 657 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
674 | // take the outer scope... | 658 | // take the outer scope... |
675 | self.module(db).resolver(db) | 659 | self.module(db).resolver(db) |
676 | } | 660 | } |
@@ -678,10 +662,6 @@ impl Static { | |||
678 | pub fn infer(&self, db: &impl HirDatabase) -> Arc<InferenceResult> { | 662 | pub fn infer(&self, db: &impl HirDatabase) -> Arc<InferenceResult> { |
679 | db.infer((*self).into()) | 663 | db.infer((*self).into()) |
680 | } | 664 | } |
681 | |||
682 | pub fn body_source_map(&self, db: &impl HirDatabase) -> Arc<BodySourceMap> { | ||
683 | db.body_with_source_map((*self).into()).1 | ||
684 | } | ||
685 | } | 665 | } |
686 | 666 | ||
687 | impl Docs for Static { | 667 | impl Docs for Static { |
@@ -756,7 +736,7 @@ impl TypeAlias { | |||
756 | } | 736 | } |
757 | 737 | ||
758 | /// Builds a resolver for the type references in this type alias. | 738 | /// Builds a resolver for the type references in this type alias. |
759 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 739 | pub(crate) fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
760 | // take the outer scope... | 740 | // take the outer scope... |
761 | let r = self | 741 | let r = self |
762 | .impl_block(db) | 742 | .impl_block(db) |