diff options
7 files changed, 94 insertions, 68 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 3cf3eaded..9332aca9a 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs | |||
@@ -34,7 +34,7 @@ use test_utils::tested_by; | |||
34 | 34 | ||
35 | use crate::{ | 35 | use crate::{ |
36 | Module, Function, Struct, StructField, Enum, EnumVariant, Path, Name, ImplBlock, | 36 | Module, Function, Struct, StructField, Enum, EnumVariant, Path, Name, ImplBlock, |
37 | FnScopes, ModuleDef, AdtDef, | 37 | FnSignature, FnScopes, ModuleDef, AdtDef, |
38 | db::HirDatabase, | 38 | db::HirDatabase, |
39 | type_ref::{TypeRef, Mutability}, | 39 | type_ref::{TypeRef, Mutability}, |
40 | name::KnownName, | 40 | name::KnownName, |
@@ -225,6 +225,8 @@ pub enum Ty { | |||
225 | def: Function, | 225 | def: Function, |
226 | /// For display | 226 | /// For display |
227 | name: Name, | 227 | name: Name, |
228 | /// Parameters and return type | ||
229 | sig: Arc<FnSig>, | ||
228 | /// Substitutions for the generic parameters of the type | 230 | /// Substitutions for the generic parameters of the type |
229 | substs: Substs, | 231 | substs: Substs, |
230 | }, | 232 | }, |
@@ -544,7 +546,12 @@ impl Ty { | |||
544 | name, | 546 | name, |
545 | substs, | 547 | substs, |
546 | }, | 548 | }, |
547 | Ty::FnDef { def, name, .. } => Ty::FnDef { def, name, substs }, | 549 | Ty::FnDef { def, name, sig, .. } => Ty::FnDef { |
550 | def, | ||
551 | name, | ||
552 | sig, | ||
553 | substs, | ||
554 | }, | ||
548 | _ => self, | 555 | _ => self, |
549 | } | 556 | } |
550 | } | 557 | } |
@@ -607,7 +614,9 @@ impl fmt::Display for Ty { | |||
607 | .to_fmt(f)?; | 614 | .to_fmt(f)?; |
608 | write!(f, " -> {}", sig.output) | 615 | write!(f, " -> {}", sig.output) |
609 | } | 616 | } |
610 | Ty::FnDef { name, substs, .. } => { | 617 | Ty::FnDef { |
618 | name, substs, sig, .. | ||
619 | } => { | ||
611 | // don't have access to the param types here :-( | 620 | // don't have access to the param types here :-( |
612 | // we could store them in the def, but not sure if it | 621 | // we could store them in the def, but not sure if it |
613 | // is worth it | 622 | // is worth it |
@@ -618,7 +627,11 @@ impl fmt::Display for Ty { | |||
618 | .separator(", ") | 627 | .separator(", ") |
619 | .to_fmt(f)?; | 628 | .to_fmt(f)?; |
620 | } | 629 | } |
621 | Ok(()) | 630 | join(sig.input.iter()) |
631 | .surround_with("(", ")") | ||
632 | .separator(", ") | ||
633 | .to_fmt(f)?; | ||
634 | write!(f, " -> {}", sig.output) | ||
622 | } | 635 | } |
623 | Ty::Adt { name, substs, .. } => { | 636 | Ty::Adt { name, substs, .. } => { |
624 | write!(f, "{}", name)?; | 637 | write!(f, "{}", name)?; |
@@ -641,12 +654,29 @@ impl fmt::Display for Ty { | |||
641 | 654 | ||
642 | /// Compute the declared type of a function. This should not need to look at the | 655 | /// Compute the declared type of a function. This should not need to look at the |
643 | /// function body. | 656 | /// function body. |
644 | fn type_for_fn(db: &impl HirDatabase, f: Function) -> Ty { | 657 | fn type_for_fn(db: &impl HirDatabase, def: Function) -> Ty { |
645 | let generics = f.generic_params(db); | 658 | let signature = def.signature(db); |
659 | let module = def.module(db); | ||
660 | let impl_block = def.impl_block(db); | ||
661 | let generics = def.generic_params(db); | ||
662 | let input = signature | ||
663 | .params() | ||
664 | .iter() | ||
665 | .map(|tr| Ty::from_hir(db, &module, impl_block.as_ref(), &generics, tr)) | ||
666 | .collect::<Vec<_>>(); | ||
667 | let output = Ty::from_hir( | ||
668 | db, | ||
669 | &module, | ||
670 | impl_block.as_ref(), | ||
671 | &generics, | ||
672 | signature.ret_type(), | ||
673 | ); | ||
674 | let sig = Arc::new(FnSig { input, output }); | ||
646 | let substs = make_substs(&generics); | 675 | let substs = make_substs(&generics); |
647 | let name = f.name(db); | 676 | let name = def.name(db); |
648 | Ty::FnDef { | 677 | Ty::FnDef { |
649 | def: f.into(), | 678 | def, |
679 | sig, | ||
650 | name, | 680 | name, |
651 | substs, | 681 | substs, |
652 | } | 682 | } |
@@ -923,7 +953,9 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
923 | self.type_of_pat.insert(pat, ty); | 953 | self.type_of_pat.insert(pat, ty); |
924 | } | 954 | } |
925 | 955 | ||
926 | fn make_ty(&mut self, type_ref: &TypeRef, generics: &GenericParams) -> Ty { | 956 | fn make_ty(&mut self, type_ref: &TypeRef) -> Ty { |
957 | // TODO provide generics of function | ||
958 | let generics = GenericParams::default(); | ||
927 | let ty = Ty::from_hir( | 959 | let ty = Ty::from_hir( |
928 | self.db, | 960 | self.db, |
929 | &self.module, | 961 | &self.module, |
@@ -1337,7 +1369,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1337 | 1369 | ||
1338 | for (arg_pat, arg_type) in args.iter().zip(arg_types.iter()) { | 1370 | for (arg_pat, arg_type) in args.iter().zip(arg_types.iter()) { |
1339 | let expected = if let Some(type_ref) = arg_type { | 1371 | let expected = if let Some(type_ref) = arg_type { |
1340 | let ty = self.make_ty(type_ref, &GenericParams::default()); | 1372 | let ty = self.make_ty(type_ref); |
1341 | ty | 1373 | ty |
1342 | } else { | 1374 | } else { |
1343 | Ty::Unknown | 1375 | Ty::Unknown |
@@ -1355,16 +1387,14 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1355 | let callee_ty = self.infer_expr(*callee, &Expectation::none()); | 1387 | let callee_ty = self.infer_expr(*callee, &Expectation::none()); |
1356 | let (param_tys, ret_ty) = match &callee_ty { | 1388 | let (param_tys, ret_ty) = match &callee_ty { |
1357 | Ty::FnPtr(sig) => (sig.input.clone(), sig.output.clone()), | 1389 | Ty::FnPtr(sig) => (sig.input.clone(), sig.output.clone()), |
1358 | Ty::FnDef { def, substs, .. } => { | 1390 | Ty::FnDef { |
1359 | let fn_sig = def.signature(self.db); | 1391 | def, substs, sig, .. |
1360 | let generic_params = def.generic_params(self.db); | 1392 | } => { |
1361 | let ret_ty = self | 1393 | let ret_ty = sig.output.clone().subst(&substs); |
1362 | .make_ty(fn_sig.ret_type(), &generic_params) | 1394 | let param_tys = sig |
1363 | .subst(&substs); | 1395 | .input |
1364 | let param_tys = fn_sig | ||
1365 | .params() | ||
1366 | .iter() | 1396 | .iter() |
1367 | .map(|type_ref| self.make_ty(type_ref, &generic_params).subst(&substs)) | 1397 | .map(|ty| ty.clone().subst(&substs)) |
1368 | .collect(); | 1398 | .collect(); |
1369 | (param_tys, ret_ty) | 1399 | (param_tys, ret_ty) |
1370 | } | 1400 | } |
@@ -1407,17 +1437,13 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1407 | (Ty::Unknown, Vec::new(), sig.output.clone()) | 1437 | (Ty::Unknown, Vec::new(), sig.output.clone()) |
1408 | } | 1438 | } |
1409 | } | 1439 | } |
1410 | Ty::FnDef { def, substs, .. } => { | 1440 | Ty::FnDef { |
1411 | let fn_sig = def.signature(self.db); | 1441 | def, substs, sig, .. |
1412 | let generic_params = def.generic_params(self.db); | 1442 | } => { |
1413 | let ret_ty = self | 1443 | let ret_ty = sig.output.clone().subst(&substs); |
1414 | .make_ty(fn_sig.ret_type(), &generic_params) | 1444 | |
1415 | .subst(&substs); | 1445 | if sig.input.len() > 0 { |
1416 | 1446 | let mut arg_iter = sig.input.iter().map(|ty| ty.clone().subst(&substs)); | |
1417 | if fn_sig.params().len() > 0 { | ||
1418 | let mut arg_iter = fn_sig.params().iter().map(|type_ref| { | ||
1419 | self.make_ty(type_ref, &generic_params).subst(&substs) | ||
1420 | }); | ||
1421 | let receiver_ty = arg_iter.next().unwrap(); | 1447 | let receiver_ty = arg_iter.next().unwrap(); |
1422 | (receiver_ty, arg_iter.collect(), ret_ty) | 1448 | (receiver_ty, arg_iter.collect(), ret_ty) |
1423 | } else { | 1449 | } else { |
@@ -1515,7 +1541,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1515 | } | 1541 | } |
1516 | Expr::Cast { expr, type_ref } => { | 1542 | Expr::Cast { expr, type_ref } => { |
1517 | let _inner_ty = self.infer_expr(*expr, &Expectation::none()); | 1543 | let _inner_ty = self.infer_expr(*expr, &Expectation::none()); |
1518 | let cast_ty = self.make_ty(type_ref, &GenericParams::default()); | 1544 | let cast_ty = self.make_ty(type_ref); |
1519 | // TODO check the cast... | 1545 | // TODO check the cast... |
1520 | cast_ty | 1546 | cast_ty |
1521 | } | 1547 | } |
@@ -1629,7 +1655,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1629 | } => { | 1655 | } => { |
1630 | let decl_ty = type_ref | 1656 | let decl_ty = type_ref |
1631 | .as_ref() | 1657 | .as_ref() |
1632 | .map(|tr| self.make_ty(tr, &GenericParams::default())) | 1658 | .map(|tr| self.make_ty(tr)) |
1633 | .unwrap_or(Ty::Unknown); | 1659 | .unwrap_or(Ty::Unknown); |
1634 | let decl_ty = self.insert_type_vars(decl_ty); | 1660 | let decl_ty = self.insert_type_vars(decl_ty); |
1635 | let ty = if let Some(expr) = initializer { | 1661 | let ty = if let Some(expr) = initializer { |
@@ -1654,16 +1680,14 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1654 | ty | 1680 | ty |
1655 | } | 1681 | } |
1656 | 1682 | ||
1657 | fn collect_fn_signature(&mut self, func: Function) { | 1683 | fn collect_fn_signature(&mut self, signature: &FnSignature) { |
1658 | let body = Arc::clone(&self.body); // avoid borrow checker problem | 1684 | let body = Arc::clone(&self.body); // avoid borrow checker problem |
1659 | let signature = func.signature(self.db); | ||
1660 | let generics = func.generic_params(self.db); | ||
1661 | for (type_ref, pat) in signature.params().iter().zip(body.params()) { | 1685 | for (type_ref, pat) in signature.params().iter().zip(body.params()) { |
1662 | let ty = self.make_ty(type_ref, &generics); | 1686 | let ty = self.make_ty(type_ref); |
1663 | 1687 | ||
1664 | self.infer_pat(*pat, &ty); | 1688 | self.infer_pat(*pat, &ty); |
1665 | } | 1689 | } |
1666 | self.return_ty = self.make_ty(signature.ret_type(), &generics); | 1690 | self.return_ty = self.make_ty(signature.ret_type()); |
1667 | } | 1691 | } |
1668 | 1692 | ||
1669 | fn infer_body(&mut self) { | 1693 | fn infer_body(&mut self) { |
@@ -1682,7 +1706,9 @@ pub fn infer(db: &impl HirDatabase, func: Function) -> Arc<InferenceResult> { | |||
1682 | let impl_block = func.impl_block(db); | 1706 | let impl_block = func.impl_block(db); |
1683 | let mut ctx = InferenceContext::new(db, body, scopes, module, impl_block); | 1707 | let mut ctx = InferenceContext::new(db, body, scopes, module, impl_block); |
1684 | 1708 | ||
1685 | ctx.collect_fn_signature(func); | 1709 | let signature = func.signature(db); |
1710 | ctx.collect_fn_signature(&signature); | ||
1711 | |||
1686 | ctx.infer_body(); | 1712 | ctx.infer_body(); |
1687 | 1713 | ||
1688 | Arc::new(ctx.resolve_all()) | 1714 | Arc::new(ctx.resolve_all()) |
diff --git a/crates/ra_hir/src/ty/snapshots/tests__generic_fn.snap b/crates/ra_hir/src/ty/snapshots/tests__generic_fn.snap index 4436dd8aa..84fbe6e4c 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__generic_fn.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__generic_fn.snap | |||
@@ -1,23 +1,23 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-25T23:18:55.019197432+00:00" | 2 | created: "2019-01-26T17:46:03.963745056+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: "&result" | 4 | expression: "&result" |
5 | source: crates/ra_hir/src/ty/tests.rs | 5 | source: crates/ra_hir/src/ty/tests.rs |
6 | --- | 6 | --- |
7 | [10; 11) 'x': T | 7 | [10; 11) 'x': [unknown] |
8 | [21; 30) '{ x }': T | 8 | [21; 30) '{ x }': [unknown] |
9 | [27; 28) 'x': T | 9 | [27; 28) 'x': [unknown] |
10 | [44; 45) 'x': &T | 10 | [44; 45) 'x': &[unknown] |
11 | [56; 65) '{ x }': &T | 11 | [56; 65) '{ x }': &[unknown] |
12 | [62; 63) 'x': &T | 12 | [62; 63) 'x': &[unknown] |
13 | [77; 138) '{ ...(z); }': () | 13 | [77; 138) '{ ...(z); }': () |
14 | [87; 88) 'y': u32 | 14 | [87; 88) 'y': u32 |
15 | [91; 96) '10u32': u32 | 15 | [91; 96) '10u32': u32 |
16 | [102; 104) 'id': fn id<u32> | 16 | [102; 104) 'id': fn id<u32>(T) -> T |
17 | [102; 107) 'id(y)': u32 | 17 | [102; 107) 'id(y)': u32 |
18 | [105; 106) 'y': u32 | 18 | [105; 106) 'y': u32 |
19 | [117; 118) 'x': bool | 19 | [117; 118) 'x': bool |
20 | [127; 132) 'clone': fn clone<bool> | 20 | [127; 132) 'clone': fn clone<bool>(&T) -> T |
21 | [127; 135) 'clone(z)': bool | 21 | [127; 135) 'clone(z)': bool |
22 | [133; 134) 'z': &bool | 22 | [133; 134) 'z': &bool |
23 | 23 | ||
diff --git a/crates/ra_hir/src/ty/snapshots/tests__infer_backwards.snap b/crates/ra_hir/src/ty/snapshots/tests__infer_backwards.snap index e6b39f151..f5840a934 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__infer_backwards.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__infer_backwards.snap | |||
@@ -1,5 +1,5 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-25T23:18:54.943309491+00:00" | 2 | created: "2019-01-26T17:46:03.842478456+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: "&result" | 4 | expression: "&result" |
5 | source: crates/ra_hir/src/ty/tests.rs | 5 | source: crates/ra_hir/src/ty/tests.rs |
@@ -10,7 +10,7 @@ source: crates/ra_hir/src/ty/tests.rs | |||
10 | [88; 89) 'a': u32 | 10 | [88; 89) 'a': u32 |
11 | [92; 108) 'unknow...nction': [unknown] | 11 | [92; 108) 'unknow...nction': [unknown] |
12 | [92; 110) 'unknow...tion()': u32 | 12 | [92; 110) 'unknow...tion()': u32 |
13 | [116; 125) 'takes_u32': fn takes_u32 | 13 | [116; 125) 'takes_u32': fn takes_u32(u32) -> () |
14 | [116; 128) 'takes_u32(a)': () | 14 | [116; 128) 'takes_u32(a)': () |
15 | [126; 127) 'a': u32 | 15 | [126; 127) 'a': u32 |
16 | [138; 139) 'b': i32 | 16 | [138; 139) 'b': i32 |
diff --git a/crates/ra_hir/src/ty/snapshots/tests__infer_binary_op.snap b/crates/ra_hir/src/ty/snapshots/tests__infer_binary_op.snap index 895c13ae6..b9dda2bc0 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__infer_binary_op.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__infer_binary_op.snap | |||
@@ -1,5 +1,5 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-25T23:18:54.949540810+00:00" | 2 | created: "2019-01-26T17:46:03.853259898+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: "&result" | 4 | expression: "&result" |
5 | source: crates/ra_hir/src/ty/tests.rs | 5 | source: crates/ra_hir/src/ty/tests.rs |
@@ -28,7 +28,7 @@ source: crates/ra_hir/src/ty/tests.rs | |||
28 | [174; 196) 'minus_...ONST_2': bool | 28 | [174; 196) 'minus_...ONST_2': bool |
29 | [189; 196) 'CONST_2': isize | 29 | [189; 196) 'CONST_2': isize |
30 | [206; 207) 'c': i32 | 30 | [206; 207) 'c': i32 |
31 | [210; 211) 'f': fn f | 31 | [210; 211) 'f': fn f(bool) -> i32 |
32 | [210; 219) 'f(z || y)': i32 | 32 | [210; 219) 'f(z || y)': i32 |
33 | [210; 223) 'f(z || y) + 5': i32 | 33 | [210; 223) 'f(z || y) + 5': i32 |
34 | [212; 213) 'z': bool | 34 | [212; 213) 'z': bool |
diff --git a/crates/ra_hir/src/ty/snapshots/tests__infer_function_generics.snap b/crates/ra_hir/src/ty/snapshots/tests__infer_function_generics.snap index efe0e7adf..369705f84 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__infer_function_generics.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__infer_function_generics.snap | |||
@@ -1,21 +1,21 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-25T23:18:54.962273460+00:00" | 2 | created: "2019-01-26T17:46:03.856278205+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: "&result" | 4 | expression: "&result" |
5 | source: crates/ra_hir/src/ty/tests.rs | 5 | source: crates/ra_hir/src/ty/tests.rs |
6 | --- | 6 | --- |
7 | [10; 11) 't': T | 7 | [10; 11) 't': [unknown] |
8 | [21; 26) '{ t }': T | 8 | [21; 26) '{ t }': [unknown] |
9 | [23; 24) 't': T | 9 | [23; 24) 't': [unknown] |
10 | [38; 98) '{ ...(1); }': () | 10 | [38; 98) '{ ...(1); }': () |
11 | [44; 46) 'id': fn id<u32> | 11 | [44; 46) 'id': fn id<u32>(T) -> T |
12 | [44; 52) 'id(1u32)': u32 | 12 | [44; 52) 'id(1u32)': u32 |
13 | [47; 51) '1u32': u32 | 13 | [47; 51) '1u32': u32 |
14 | [58; 68) 'id::<i128>': fn id<i32> | 14 | [58; 68) 'id::<i128>': fn id<i32>(T) -> T |
15 | [58; 71) 'id::<i128>(1)': i32 | 15 | [58; 71) 'id::<i128>(1)': i32 |
16 | [69; 70) '1': i32 | 16 | [69; 70) '1': i32 |
17 | [81; 82) 'x': u64 | 17 | [81; 82) 'x': u64 |
18 | [90; 92) 'id': fn id<u64> | 18 | [90; 92) 'id': fn id<u64>(T) -> T |
19 | [90; 95) 'id(1)': u64 | 19 | [90; 95) 'id(1)': u64 |
20 | [93; 94) '1': u64 | 20 | [93; 94) '1': u64 |
21 | 21 | ||
diff --git a/crates/ra_hir/src/ty/snapshots/tests__infer_generic_chain.snap b/crates/ra_hir/src/ty/snapshots/tests__infer_generic_chain.snap index aaf8ccea5..f21bffa75 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__infer_generic_chain.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__infer_generic_chain.snap | |||
@@ -1,5 +1,5 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-25T23:18:54.978506051+00:00" | 2 | created: "2019-01-26T17:46:03.866825843+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: "&result" | 4 | expression: "&result" |
5 | source: crates/ra_hir/src/ty/tests.rs | 5 | source: crates/ra_hir/src/ty/tests.rs |
@@ -8,23 +8,23 @@ source: crates/ra_hir/src/ty/tests.rs | |||
8 | [65; 87) '{ ... }': [unknown] | 8 | [65; 87) '{ ... }': [unknown] |
9 | [75; 79) 'self': A<[unknown]> | 9 | [75; 79) 'self': A<[unknown]> |
10 | [75; 81) 'self.x': [unknown] | 10 | [75; 81) 'self.x': [unknown] |
11 | [99; 100) 't': T | 11 | [99; 100) 't': [unknown] |
12 | [110; 115) '{ t }': T | 12 | [110; 115) '{ t }': [unknown] |
13 | [112; 113) 't': T | 13 | [112; 113) 't': [unknown] |
14 | [135; 261) '{ ....x() }': i128 | 14 | [135; 261) '{ ....x() }': i128 |
15 | [146; 147) 'x': i32 | 15 | [146; 147) 'x': i32 |
16 | [150; 151) '1': i32 | 16 | [150; 151) '1': i32 |
17 | [162; 163) 'y': i32 | 17 | [162; 163) 'y': i32 |
18 | [166; 168) 'id': fn id<i32> | 18 | [166; 168) 'id': fn id<i32>(T) -> T |
19 | [166; 171) 'id(x)': i32 | 19 | [166; 171) 'id(x)': i32 |
20 | [169; 170) 'x': i32 | 20 | [169; 170) 'x': i32 |
21 | [182; 183) 'a': A<i32> | 21 | [182; 183) 'a': A<i32> |
22 | [186; 200) 'A { x: id(y) }': A<i32> | 22 | [186; 200) 'A { x: id(y) }': A<i32> |
23 | [193; 195) 'id': fn id<i32> | 23 | [193; 195) 'id': fn id<i32>(T) -> T |
24 | [193; 198) 'id(y)': i32 | 24 | [193; 198) 'id(y)': i32 |
25 | [196; 197) 'y': i32 | 25 | [196; 197) 'y': i32 |
26 | [211; 212) 'z': i32 | 26 | [211; 212) 'z': i32 |
27 | [215; 217) 'id': fn id<i32> | 27 | [215; 217) 'id': fn id<i32>(T) -> T |
28 | [215; 222) 'id(a.x)': i32 | 28 | [215; 222) 'id(a.x)': i32 |
29 | [218; 219) 'a': A<i32> | 29 | [218; 219) 'a': A<i32> |
30 | [218; 221) 'a.x': i32 | 30 | [218; 221) 'a.x': i32 |
diff --git a/crates/ra_hir/src/ty/snapshots/tests__infer_paths.snap b/crates/ra_hir/src/ty/snapshots/tests__infer_paths.snap index efca36058..afbe2f747 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__infer_paths.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__infer_paths.snap | |||
@@ -1,5 +1,5 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-25T23:18:54.985011010+00:00" | 2 | created: "2019-01-26T17:46:03.928773630+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: "&result" | 4 | expression: "&result" |
5 | source: crates/ra_hir/src/ty/tests.rs | 5 | source: crates/ra_hir/src/ty/tests.rs |
@@ -9,8 +9,8 @@ source: crates/ra_hir/src/ty/tests.rs | |||
9 | [48; 53) '{ 1 }': u32 | 9 | [48; 53) '{ 1 }': u32 |
10 | [50; 51) '1': u32 | 10 | [50; 51) '1': u32 |
11 | [67; 91) '{ ...c(); }': () | 11 | [67; 91) '{ ...c(); }': () |
12 | [73; 74) 'a': fn a | 12 | [73; 74) 'a': fn a() -> u32 |
13 | [73; 76) 'a()': u32 | 13 | [73; 76) 'a()': u32 |
14 | [82; 86) 'b::c': fn c | 14 | [82; 86) 'b::c': fn c() -> u32 |
15 | [82; 88) 'b::c()': u32 | 15 | [82; 88) 'b::c()': u32 |
16 | 16 | ||