aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir')
-rw-r--r--crates/ra_hir/src/code_model.rs46
-rw-r--r--crates/ra_hir/src/db.rs16
-rw-r--r--crates/ra_hir/src/lib.rs4
-rw-r--r--crates/ra_hir/src/ty/infer.rs25
-rw-r--r--crates/ra_hir/src/ty/lower.rs15
-rw-r--r--crates/ra_hir/src/ty/method_resolution.rs8
6 files changed, 55 insertions, 59 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 6602d1220..10f975b31 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -519,9 +519,8 @@ pub struct Function {
519 pub(crate) id: FunctionId, 519 pub(crate) id: FunctionId,
520} 520}
521 521
522/// The declared signature of a function.
523#[derive(Debug, Clone, PartialEq, Eq)] 522#[derive(Debug, Clone, PartialEq, Eq)]
524pub struct FnSignature { 523pub struct FnData {
525 pub(crate) name: Name, 524 pub(crate) name: Name,
526 pub(crate) params: Vec<TypeRef>, 525 pub(crate) params: Vec<TypeRef>,
527 pub(crate) ret_type: TypeRef, 526 pub(crate) ret_type: TypeRef,
@@ -530,11 +529,11 @@ pub struct FnSignature {
530 pub(crate) has_self_param: bool, 529 pub(crate) has_self_param: bool,
531} 530}
532 531
533impl FnSignature { 532impl FnData {
534 pub(crate) fn fn_signature_query( 533 pub(crate) fn fn_data_query(
535 db: &(impl DefDatabase + AstDatabase), 534 db: &(impl DefDatabase + AstDatabase),
536 func: Function, 535 func: Function,
537 ) -> Arc<FnSignature> { 536 ) -> Arc<FnData> {
538 let src = func.source(db); 537 let src = func.source(db);
539 let name = src.ast.name().map(|n| n.as_name()).unwrap_or_else(Name::missing); 538 let name = src.ast.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
540 let mut params = Vec::new(); 539 let mut params = Vec::new();
@@ -569,7 +568,7 @@ impl FnSignature {
569 TypeRef::unit() 568 TypeRef::unit()
570 }; 569 };
571 570
572 let sig = FnSignature { name, params, ret_type, has_self_param }; 571 let sig = FnData { name, params, ret_type, has_self_param };
573 Arc::new(sig) 572 Arc::new(sig)
574 } 573 }
575 pub fn name(&self) -> &Name { 574 pub fn name(&self) -> &Name {
@@ -597,7 +596,7 @@ impl Function {
597 } 596 }
598 597
599 pub fn name(self, db: &impl HirDatabase) -> Name { 598 pub fn name(self, db: &impl HirDatabase) -> Name {
600 self.signature(db).name.clone() 599 self.data(db).name.clone()
601 } 600 }
602 601
603 pub(crate) fn body_source_map(self, db: &impl HirDatabase) -> Arc<BodySourceMap> { 602 pub(crate) fn body_source_map(self, db: &impl HirDatabase) -> Arc<BodySourceMap> {
@@ -612,8 +611,8 @@ impl Function {
612 db.type_for_def(self.into(), Namespace::Values) 611 db.type_for_def(self.into(), Namespace::Values)
613 } 612 }
614 613
615 pub fn signature(self, db: &impl HirDatabase) -> Arc<FnSignature> { 614 pub fn data(self, db: &impl HirDatabase) -> Arc<FnData> {
616 db.fn_signature(self) 615 db.fn_data(self)
617 } 616 }
618 617
619 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> { 618 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
@@ -670,8 +669,8 @@ impl Const {
670 self.id.module(db) 669 self.id.module(db)
671 } 670 }
672 671
673 pub fn signature(self, db: &impl HirDatabase) -> Arc<ConstSignature> { 672 pub fn data(self, db: &impl HirDatabase) -> Arc<ConstData> {
674 db.const_signature(self) 673 db.const_data(self)
675 } 674 }
676 675
677 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> { 676 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
@@ -696,14 +695,13 @@ impl Const {
696 } 695 }
697} 696}
698 697
699/// The declared signature of a const.
700#[derive(Debug, Clone, PartialEq, Eq)] 698#[derive(Debug, Clone, PartialEq, Eq)]
701pub struct ConstSignature { 699pub struct ConstData {
702 pub(crate) name: Name, 700 pub(crate) name: Name,
703 pub(crate) type_ref: TypeRef, 701 pub(crate) type_ref: TypeRef,
704} 702}
705 703
706impl ConstSignature { 704impl ConstData {
707 pub fn name(&self) -> &Name { 705 pub fn name(&self) -> &Name {
708 &self.name 706 &self.name
709 } 707 }
@@ -712,27 +710,27 @@ impl ConstSignature {
712 &self.type_ref 710 &self.type_ref
713 } 711 }
714 712
715 pub(crate) fn const_signature_query( 713 pub(crate) fn const_data_query(
716 db: &(impl DefDatabase + AstDatabase), 714 db: &(impl DefDatabase + AstDatabase),
717 konst: Const, 715 konst: Const,
718 ) -> Arc<ConstSignature> { 716 ) -> Arc<ConstData> {
719 let node = konst.source(db).ast; 717 let node = konst.source(db).ast;
720 const_signature_for(&*node) 718 const_data_for(&*node)
721 } 719 }
722 720
723 pub(crate) fn static_signature_query( 721 pub(crate) fn static_data_query(
724 db: &(impl DefDatabase + AstDatabase), 722 db: &(impl DefDatabase + AstDatabase),
725 konst: Static, 723 konst: Static,
726 ) -> Arc<ConstSignature> { 724 ) -> Arc<ConstData> {
727 let node = konst.source(db).ast; 725 let node = konst.source(db).ast;
728 const_signature_for(&*node) 726 const_data_for(&*node)
729 } 727 }
730} 728}
731 729
732fn const_signature_for<N: NameOwner + TypeAscriptionOwner>(node: &N) -> Arc<ConstSignature> { 730fn const_data_for<N: NameOwner + TypeAscriptionOwner>(node: &N) -> Arc<ConstData> {
733 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing); 731 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
734 let type_ref = TypeRef::from_ast_opt(node.ascribed_type()); 732 let type_ref = TypeRef::from_ast_opt(node.ascribed_type());
735 let sig = ConstSignature { name, type_ref }; 733 let sig = ConstData { name, type_ref };
736 Arc::new(sig) 734 Arc::new(sig)
737} 735}
738 736
@@ -746,8 +744,8 @@ impl Static {
746 self.id.module(db) 744 self.id.module(db)
747 } 745 }
748 746
749 pub fn signature(self, db: &impl HirDatabase) -> Arc<ConstSignature> { 747 pub fn data(self, db: &impl HirDatabase) -> Arc<ConstData> {
750 db.static_signature(self) 748 db.static_data(self)
751 } 749 }
752 750
753 /// Builds a resolver for code inside this item. 751 /// Builds a resolver for code inside this item.
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs
index c4dd54596..23c36014b 100644
--- a/crates/ra_hir/src/db.rs
+++ b/crates/ra_hir/src/db.rs
@@ -6,9 +6,9 @@ use ra_db::{SourceDatabase, salsa};
6 6
7use crate::{ 7use crate::{
8 HirFileId, MacroDefId, AstIdMap, ErasedFileAstId, Crate, Module, MacroCallLoc, 8 HirFileId, MacroDefId, AstIdMap, ErasedFileAstId, Crate, Module, MacroCallLoc,
9 Function, FnSignature, ExprScopes, TypeAlias, 9 Function, FnData, ExprScopes, TypeAlias,
10 Struct, Enum, StructField, 10 Struct, Enum, StructField,
11 Const, ConstSignature, Static, 11 Const, ConstData, Static,
12 DefWithBody, Trait, 12 DefWithBody, Trait,
13 ids, 13 ids,
14 nameres::{Namespace, ImportSourceMap, RawItems, CrateDefMap}, 14 nameres::{Namespace, ImportSourceMap, RawItems, CrateDefMap},
@@ -109,17 +109,17 @@ pub trait DefDatabase: SourceDatabase {
109 #[salsa::invoke(crate::generics::GenericParams::generic_params_query)] 109 #[salsa::invoke(crate::generics::GenericParams::generic_params_query)]
110 fn generic_params(&self, def: GenericDef) -> Arc<GenericParams>; 110 fn generic_params(&self, def: GenericDef) -> Arc<GenericParams>;
111 111
112 #[salsa::invoke(crate::FnSignature::fn_signature_query)] 112 #[salsa::invoke(crate::FnData::fn_data_query)]
113 fn fn_signature(&self, func: Function) -> Arc<FnSignature>; 113 fn fn_data(&self, func: Function) -> Arc<FnData>;
114 114
115 #[salsa::invoke(crate::type_alias::type_alias_data_query)] 115 #[salsa::invoke(crate::type_alias::type_alias_data_query)]
116 fn type_alias_data(&self, typ: TypeAlias) -> Arc<TypeAliasData>; 116 fn type_alias_data(&self, typ: TypeAlias) -> Arc<TypeAliasData>;
117 117
118 #[salsa::invoke(crate::ConstSignature::const_signature_query)] 118 #[salsa::invoke(crate::ConstData::const_data_query)]
119 fn const_signature(&self, konst: Const) -> Arc<ConstSignature>; 119 fn const_data(&self, konst: Const) -> Arc<ConstData>;
120 120
121 #[salsa::invoke(crate::ConstSignature::static_signature_query)] 121 #[salsa::invoke(crate::ConstData::static_data_query)]
122 fn static_signature(&self, konst: Static) -> Arc<ConstSignature>; 122 fn static_data(&self, konst: Static) -> Arc<ConstData>;
123 123
124 #[salsa::invoke(crate::lang_item::LangItems::lang_items_query)] 124 #[salsa::invoke(crate::lang_item::LangItems::lang_items_query)]
125 fn lang_items(&self, krate: Crate) -> Arc<LangItems>; 125 fn lang_items(&self, krate: Crate) -> Arc<LangItems>;
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs
index 2e99bdac8..f07a36926 100644
--- a/crates/ra_hir/src/lib.rs
+++ b/crates/ra_hir/src/lib.rs
@@ -75,9 +75,9 @@ pub use self::code_model::{
75 DefWithBody, 75 DefWithBody,
76 Module, ModuleDef, ModuleSource, 76 Module, ModuleDef, ModuleSource,
77 Struct, Union, Enum, EnumVariant, 77 Struct, Union, Enum, EnumVariant,
78 Function, FnSignature, 78 Function, FnData,
79 StructField, FieldSource, 79 StructField, FieldSource,
80 Static, Const, ConstSignature, 80 Static, Const, ConstData,
81 Trait, TypeAlias, MacroDef, Container, 81 Trait, TypeAlias, MacroDef, Container,
82 BuiltinType, 82 BuiltinType,
83 src::{Source, HasSource}, 83 src::{Source, HasSource},
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs
index 1ee40c70a..2c05ca734 100644
--- a/crates/ra_hir/src/ty/infer.rs
+++ b/crates/ra_hir/src/ty/infer.rs
@@ -27,7 +27,7 @@ use ra_prof::profile;
27use test_utils::tested_by; 27use test_utils::tested_by;
28 28
29use crate::{ 29use crate::{
30 Function, StructField, Path, Name, FnSignature, AdtDef, ConstSignature, HirDatabase, 30 Function, StructField, Path, Name, FnData, AdtDef, ConstData, HirDatabase,
31 DefWithBody, ImplItem, 31 DefWithBody, ImplItem,
32 type_ref::{TypeRef, Mutability}, 32 type_ref::{TypeRef, Mutability},
33 expr::{ 33 expr::{
@@ -59,9 +59,9 @@ pub fn infer_query(db: &impl HirDatabase, def: DefWithBody) -> Arc<InferenceResu
59 let mut ctx = InferenceContext::new(db, body, resolver); 59 let mut ctx = InferenceContext::new(db, body, resolver);
60 60
61 match def { 61 match def {
62 DefWithBody::Const(ref c) => ctx.collect_const_signature(&c.signature(db)), 62 DefWithBody::Const(ref c) => ctx.collect_const(&c.data(db)),
63 DefWithBody::Function(ref f) => ctx.collect_fn_signature(&f.signature(db)), 63 DefWithBody::Function(ref f) => ctx.collect_fn(&f.data(db)),
64 DefWithBody::Static(ref s) => ctx.collect_const_signature(&s.signature(db)), 64 DefWithBody::Static(ref s) => ctx.collect_const(&s.data(db)),
65 } 65 }
66 66
67 ctx.infer_body(); 67 ctx.infer_body();
@@ -509,8 +509,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
509 let item: crate::ModuleDef = ty.iterate_impl_items(self.db, krate, |item| { 509 let item: crate::ModuleDef = ty.iterate_impl_items(self.db, krate, |item| {
510 let matching_def: Option<crate::ModuleDef> = match item { 510 let matching_def: Option<crate::ModuleDef> = match item {
511 crate::ImplItem::Method(func) => { 511 crate::ImplItem::Method(func) => {
512 let sig = func.signature(self.db); 512 if segment.name == func.name(self.db) {
513 if segment.name == *sig.name() {
514 Some(func.into()) 513 Some(func.into())
515 } else { 514 } else {
516 None 515 None
@@ -518,8 +517,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
518 } 517 }
519 518
520 crate::ImplItem::Const(konst) => { 519 crate::ImplItem::Const(konst) => {
521 let sig = konst.signature(self.db); 520 let data = konst.data(self.db);
522 if segment.name == *sig.name() { 521 if segment.name == *data.name() {
523 Some(konst.into()) 522 Some(konst.into())
524 } else { 523 } else {
525 None 524 None
@@ -1283,18 +1282,18 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
1283 ty 1282 ty
1284 } 1283 }
1285 1284
1286 fn collect_const_signature(&mut self, signature: &ConstSignature) { 1285 fn collect_const(&mut self, data: &ConstData) {
1287 self.return_ty = self.make_ty(signature.type_ref()); 1286 self.return_ty = self.make_ty(data.type_ref());
1288 } 1287 }
1289 1288
1290 fn collect_fn_signature(&mut self, signature: &FnSignature) { 1289 fn collect_fn(&mut self, data: &FnData) {
1291 let body = Arc::clone(&self.body); // avoid borrow checker problem 1290 let body = Arc::clone(&self.body); // avoid borrow checker problem
1292 for (type_ref, pat) in signature.params().iter().zip(body.params()) { 1291 for (type_ref, pat) in data.params().iter().zip(body.params()) {
1293 let ty = self.make_ty(type_ref); 1292 let ty = self.make_ty(type_ref);
1294 1293
1295 self.infer_pat(*pat, &ty, BindingMode::default()); 1294 self.infer_pat(*pat, &ty, BindingMode::default());
1296 } 1295 }
1297 self.return_ty = self.make_ty(signature.ret_type()); 1296 self.return_ty = self.make_ty(data.ret_type());
1298 } 1297 }
1299 1298
1300 fn infer_body(&mut self) { 1299 fn infer_body(&mut self) {
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs
index 300616a53..cb494baf4 100644
--- a/crates/ra_hir/src/ty/lower.rs
+++ b/crates/ra_hir/src/ty/lower.rs
@@ -353,11 +353,10 @@ pub(crate) fn generic_defaults(db: &impl HirDatabase, def: GenericDef) -> Substs
353} 353}
354 354
355fn fn_sig_for_fn(db: &impl HirDatabase, def: Function) -> FnSig { 355fn fn_sig_for_fn(db: &impl HirDatabase, def: Function) -> FnSig {
356 let signature = def.signature(db); 356 let data = def.data(db);
357 let resolver = def.resolver(db); 357 let resolver = def.resolver(db);
358 let params = 358 let params = data.params().iter().map(|tr| Ty::from_hir(db, &resolver, tr)).collect::<Vec<_>>();
359 signature.params().iter().map(|tr| Ty::from_hir(db, &resolver, tr)).collect::<Vec<_>>(); 359 let ret = Ty::from_hir(db, &resolver, data.ret_type());
360 let ret = Ty::from_hir(db, &resolver, signature.ret_type());
361 FnSig::from_params_and_return(params, ret) 360 FnSig::from_params_and_return(params, ret)
362} 361}
363 362
@@ -371,18 +370,18 @@ fn type_for_fn(db: &impl HirDatabase, def: Function) -> Ty {
371 370
372/// Build the declared type of a const. 371/// Build the declared type of a const.
373fn type_for_const(db: &impl HirDatabase, def: Const) -> Ty { 372fn type_for_const(db: &impl HirDatabase, def: Const) -> Ty {
374 let signature = def.signature(db); 373 let data = def.data(db);
375 let resolver = def.resolver(db); 374 let resolver = def.resolver(db);
376 375
377 Ty::from_hir(db, &resolver, signature.type_ref()) 376 Ty::from_hir(db, &resolver, data.type_ref())
378} 377}
379 378
380/// Build the declared type of a static. 379/// Build the declared type of a static.
381fn type_for_static(db: &impl HirDatabase, def: Static) -> Ty { 380fn type_for_static(db: &impl HirDatabase, def: Static) -> Ty {
382 let signature = def.signature(db); 381 let data = def.data(db);
383 let resolver = def.resolver(db); 382 let resolver = def.resolver(db);
384 383
385 Ty::from_hir(db, &resolver, signature.type_ref()) 384 Ty::from_hir(db, &resolver, data.type_ref())
386} 385}
387 386
388/// Build the declared type of a static. 387/// Build the declared type of a static.
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs
index ad26d591c..46ec136bd 100644
--- a/crates/ra_hir/src/ty/method_resolution.rs
+++ b/crates/ra_hir/src/ty/method_resolution.rs
@@ -192,8 +192,8 @@ fn iterate_trait_method_candidates<T>(
192 let mut known_implemented = false; 192 let mut known_implemented = false;
193 for item in data.items() { 193 for item in data.items() {
194 if let TraitItem::Function(m) = *item { 194 if let TraitItem::Function(m) = *item {
195 let sig = m.signature(db); 195 let data = m.data(db);
196 if name.map_or(true, |name| sig.name() == name) && sig.has_self_param() { 196 if name.map_or(true, |name| data.name() == name) && data.has_self_param() {
197 if !known_implemented { 197 if !known_implemented {
198 let trait_ref = canonical_trait_ref(db, t, ty.clone()); 198 let trait_ref = canonical_trait_ref(db, t, ty.clone());
199 if db.implements(krate, trait_ref).is_none() { 199 if db.implements(krate, trait_ref).is_none() {
@@ -227,8 +227,8 @@ fn iterate_inherent_methods<T>(
227 for impl_block in impls.lookup_impl_blocks(&ty.value) { 227 for impl_block in impls.lookup_impl_blocks(&ty.value) {
228 for item in impl_block.items(db) { 228 for item in impl_block.items(db) {
229 if let ImplItem::Method(f) = item { 229 if let ImplItem::Method(f) = item {
230 let sig = f.signature(db); 230 let data = f.data(db);
231 if name.map_or(true, |name| sig.name() == name) && sig.has_self_param() { 231 if name.map_or(true, |name| data.name() == name) && data.has_self_param() {
232 if let Some(result) = callback(&ty.value, f) { 232 if let Some(result) = callback(&ty.value, f) {
233 return Some(result); 233 return Some(result);
234 } 234 }