diff options
author | WizardOfMenlo <[email protected]> | 2019-01-28 14:52:43 +0000 |
---|---|---|
committer | WizardOfMenlo <[email protected]> | 2019-01-28 14:52:43 +0000 |
commit | 9416904d148129a6e0315fd139ae5ae516ff104c (patch) | |
tree | b6a2754810348a9675cd86e4343e4a6bd725111e | |
parent | ebb19bb95c79671d5ef1e21a8fcb4daafc356490 (diff) |
Added support for primitive types type inference when using std::ops::Not
-rw-r--r-- | crates/ra_hir/src/ty.rs | 14 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/snapshots/tests__infer_unary_op.snap | 37 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/tests.rs | 5 |
3 files changed, 41 insertions, 15 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 37715a903..81cff8c47 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs | |||
@@ -1588,9 +1588,17 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
1588 | _ => Ty::Unknown, | 1588 | _ => Ty::Unknown, |
1589 | } | 1589 | } |
1590 | } | 1590 | } |
1591 | UnaryOp::Not if inner_ty == Ty::Bool => Ty::Bool, | 1591 | UnaryOp::Not => { |
1592 | // TODO: resolve ops::Not trait for inner_ty | 1592 | match inner_ty { |
1593 | UnaryOp::Not => Ty::Unknown, | 1593 | Ty::Bool |
1594 | | Ty::Int(primitive::UncertainIntTy::Unknown) | ||
1595 | | Ty::Int(primitive::UncertainIntTy::Signed(..)) | ||
1596 | | Ty::Int(primitive::UncertainIntTy::Unsigned(..)) | ||
1597 | | Ty::Infer(InferTy::IntVar(..)) => inner_ty, | ||
1598 | // TODO: resolve ops::Not trait for inner_ty | ||
1599 | _ => Ty::Unknown, | ||
1600 | } | ||
1601 | } | ||
1594 | } | 1602 | } |
1595 | } | 1603 | } |
1596 | Expr::BinaryOp { lhs, rhs, op } => match op { | 1604 | Expr::BinaryOp { lhs, rhs, op } => match op { |
diff --git a/crates/ra_hir/src/ty/snapshots/tests__infer_unary_op.snap b/crates/ra_hir/src/ty/snapshots/tests__infer_unary_op.snap index 10aa61954..5021d0eeb 100644 --- a/crates/ra_hir/src/ty/snapshots/tests__infer_unary_op.snap +++ b/crates/ra_hir/src/ty/snapshots/tests__infer_unary_op.snap | |||
@@ -1,11 +1,11 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-22T14:45:00.059676600+00:00" | 2 | created: "2019-01-28T14:51:16.185273502+00:00" |
3 | creator: insta@0.4.0 | 3 | creator: insta@0.5.2 |
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 | [27; 28) 'x': SomeType | 7 | [27; 28) 'x': SomeType |
8 | [40; 197) '{ ...lo"; }': () | 8 | [40; 272) '{ ...lo"; }': () |
9 | [50; 51) 'b': bool | 9 | [50; 51) 'b': bool |
10 | [54; 59) 'false': bool | 10 | [54; 59) 'false': bool |
11 | [69; 70) 'c': bool | 11 | [69; 70) 'c': bool |
@@ -24,12 +24,25 @@ source: "crates\\ra_hir\\src\\ty\\tests.rs" | |||
24 | [147; 153) '!!true': bool | 24 | [147; 153) '!!true': bool |
25 | [148; 153) '!true': bool | 25 | [148; 153) '!true': bool |
26 | [149; 153) 'true': bool | 26 | [149; 153) 'true': bool |
27 | [159; 164) '-3.14': f64 | 27 | [163; 164) 'g': i32 |
28 | [160; 164) '3.14': f64 | 28 | [167; 170) '!42': i32 |
29 | [170; 172) '-x': [unknown] | 29 | [168; 170) '42': i32 |
30 | [171; 172) 'x': SomeType | 30 | [180; 181) 'h': u32 |
31 | [178; 180) '!x': [unknown] | 31 | [184; 190) '!10u32': u32 |
32 | [179; 180) 'x': SomeType | 32 | [185; 190) '10u32': u32 |
33 | [186; 194) '-"hello"': [unknown] | 33 | [200; 201) 'j': i128 |
34 | [187; 194) '"hello"': &str | 34 | [204; 206) '!a': i128 |
35 | [205; 206) 'a': i128 | ||
36 | [212; 217) '-3.14': f64 | ||
37 | [213; 217) '3.14': f64 | ||
38 | [223; 225) '!3': i32 | ||
39 | [224; 225) '3': i32 | ||
40 | [231; 233) '-x': [unknown] | ||
41 | [232; 233) 'x': SomeType | ||
42 | [239; 241) '!x': [unknown] | ||
43 | [240; 241) 'x': SomeType | ||
44 | [247; 255) '-"hello"': [unknown] | ||
45 | [248; 255) '"hello"': &str | ||
46 | [261; 269) '!"hello"': [unknown] | ||
47 | [262; 269) '"hello"': &str | ||
35 | 48 | ||
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index ac12d974b..b36e6ec47 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs | |||
@@ -166,10 +166,15 @@ fn test(x: SomeType) { | |||
166 | let d: i128 = -a; | 166 | let d: i128 = -a; |
167 | let e = -100; | 167 | let e = -100; |
168 | let f = !!!true; | 168 | let f = !!!true; |
169 | let g = !42; | ||
170 | let h = !10u32; | ||
171 | let j = !a; | ||
169 | -3.14; | 172 | -3.14; |
173 | !3; | ||
170 | -x; | 174 | -x; |
171 | !x; | 175 | !x; |
172 | -"hello"; | 176 | -"hello"; |
177 | !"hello"; | ||
173 | } | 178 | } |
174 | "#, | 179 | "#, |
175 | ); | 180 | ); |