aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_hir/src/ty.rs1
-rw-r--r--crates/ra_hir/src/ty/snapshots/tests__infer_binary_op.snap72
-rw-r--r--crates/ra_hir/src/ty/tests.rs1
-rw-r--r--crates/ra_syntax/src/ast.rs5
4 files changed, 44 insertions, 35 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs
index 562ad1f49..e1f369a20 100644
--- a/crates/ra_hir/src/ty.rs
+++ b/crates/ra_hir/src/ty.rs
@@ -811,6 +811,7 @@ fn binary_op_return_ty(op: BinaryOp, rhs_ty: Ty) -> Ty {
811 BinaryOp::BooleanOr 811 BinaryOp::BooleanOr
812 | BinaryOp::BooleanAnd 812 | BinaryOp::BooleanAnd
813 | BinaryOp::EqualityTest 813 | BinaryOp::EqualityTest
814 | BinaryOp::NegatedEqualityTest
814 | BinaryOp::LesserEqualTest 815 | BinaryOp::LesserEqualTest
815 | BinaryOp::GreaterEqualTest 816 | BinaryOp::GreaterEqualTest
816 | BinaryOp::LesserTest 817 | BinaryOp::LesserTest
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 b9dda2bc0..80ffe6e11 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,13 +1,13 @@
1--- 1---
2created: "2019-01-26T17:46:03.853259898+00:00" 2created: "2019-02-18T07:03:52.524808301Z"
3creator: [email protected] 3creator: [email protected]
4expression: "&result"
5source: crates/ra_hir/src/ty/tests.rs 4source: crates/ra_hir/src/ty/tests.rs
5expression: "&result"
6--- 6---
7[6; 7) 'x': bool 7[6; 7) 'x': bool
8[22; 34) '{ 0i32 }': i32 8[22; 34) '{ 0i32 }': i32
9[28; 32) '0i32': i32 9[28; 32) '0i32': i32
10[54; 350) '{ ... < 3 }': bool 10[54; 370) '{ ... < 3 }': bool
11[64; 65) 'x': bool 11[64; 65) 'x': bool
12[68; 69) 'a': bool 12[68; 69) 'a': bool
13[68; 74) 'a && b': bool 13[68; 74) 'a && b': bool
@@ -20,34 +20,38 @@ source: crates/ra_hir/src/ty/tests.rs
20[115; 116) 'x': bool 20[115; 116) 'x': bool
21[115; 121) 'x == y': bool 21[115; 121) 'x == y': bool
22[120; 121) 'y': bool 22[120; 121) 'y': bool
23[131; 142) 'minus_forty': isize 23[131; 132) 't': bool
24[152; 160) '-40isize': isize 24[135; 136) 'x': bool
25[153; 160) '40isize': isize 25[135; 141) 'x != y': bool
26[170; 171) 'h': bool 26[140; 141) 'y': bool
27[174; 185) 'minus_forty': isize 27[151; 162) 'minus_forty': isize
28[174; 196) 'minus_...ONST_2': bool 28[172; 180) '-40isize': isize
29[189; 196) 'CONST_2': isize 29[173; 180) '40isize': isize
30[206; 207) 'c': i32 30[190; 191) 'h': bool
31[210; 211) 'f': fn f(bool) -> i32 31[194; 205) 'minus_forty': isize
32[210; 219) 'f(z || y)': i32 32[194; 216) 'minus_...ONST_2': bool
33[210; 223) 'f(z || y) + 5': i32 33[209; 216) 'CONST_2': isize
34[212; 213) 'z': bool 34[226; 227) 'c': i32
35[212; 218) 'z || y': bool 35[230; 231) 'f': fn f(bool) -> i32
36[217; 218) 'y': bool 36[230; 239) 'f(z || y)': i32
37[222; 223) '5': i32 37[230; 243) 'f(z || y) + 5': i32
38[233; 234) 'd': [unknown] 38[232; 233) 'z': bool
39[237; 238) 'b': [unknown] 39[232; 238) 'z || y': bool
40[248; 249) 'g': () 40[237; 238) 'y': bool
41[252; 263) 'minus_forty': isize 41[242; 243) '5': i32
42[252; 268) 'minus_...y ^= i': () 42[253; 254) 'd': [unknown]
43[267; 268) 'i': isize 43[257; 258) 'b': [unknown]
44[278; 281) 'ten': usize 44[268; 269) 'g': ()
45[291; 293) '10': usize 45[272; 283) 'minus_forty': isize
46[303; 316) 'ten_is_eleven': bool 46[272; 288) 'minus_...y ^= i': ()
47[319; 322) 'ten': usize 47[287; 288) 'i': isize
48[319; 334) 'ten == some_num': bool 48[298; 301) 'ten': usize
49[326; 334) 'some_num': usize 49[311; 313) '10': usize
50[341; 344) 'ten': usize 50[323; 336) 'ten_is_eleven': bool
51[341; 348) 'ten < 3': bool 51[339; 342) 'ten': usize
52[347; 348) '3': usize 52[339; 354) 'ten == some_num': bool
53[346; 354) 'some_num': usize
54[361; 364) 'ten': usize
55[361; 368) 'ten < 3': bool
56[367; 368) '3': usize
53 57
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs
index 5eb9c4f5b..4ab442b8a 100644
--- a/crates/ra_hir/src/ty/tests.rs
+++ b/crates/ra_hir/src/ty/tests.rs
@@ -239,6 +239,7 @@ fn test() -> bool {
239 let x = a && b; 239 let x = a && b;
240 let y = true || false; 240 let y = true || false;
241 let z = x == y; 241 let z = x == y;
242 let t = x != y;
242 let minus_forty: isize = -40isize; 243 let minus_forty: isize = -40isize;
243 let h = minus_forty <= CONST_2; 244 let h = minus_forty <= CONST_2;
244 let c = f(z || y) + 5; 245 let c = f(z || y) + 5;
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs
index 350f01f33..62641c9fe 100644
--- a/crates/ra_syntax/src/ast.rs
+++ b/crates/ra_syntax/src/ast.rs
@@ -535,6 +535,8 @@ pub enum BinOp {
535 BooleanAnd, 535 BooleanAnd,
536 /// The `==` operator for equality testing 536 /// The `==` operator for equality testing
537 EqualityTest, 537 EqualityTest,
538 /// The `!=` operator for equality testing
539 NegatedEqualityTest,
538 /// The `<=` operator for lesser-equal testing 540 /// The `<=` operator for lesser-equal testing
539 LesserEqualTest, 541 LesserEqualTest,
540 /// The `>=` operator for greater-equal testing 542 /// The `>=` operator for greater-equal testing
@@ -569,7 +571,7 @@ pub enum BinOp {
569 RangeRightClosed, 571 RangeRightClosed,
570 /// The `=` operator for assignment 572 /// The `=` operator for assignment
571 Assignment, 573 Assignment,
572 /// The `+=` operator for assignment after additon 574 /// The `+=` operator for assignment after addition
573 AddAssign, 575 AddAssign,
574 /// The `/=` operator for assignment after division 576 /// The `/=` operator for assignment after division
575 DivAssign, 577 DivAssign,
@@ -599,6 +601,7 @@ impl BinExpr {
599 PIPEPIPE => Some(BinOp::BooleanOr), 601 PIPEPIPE => Some(BinOp::BooleanOr),
600 AMPAMP => Some(BinOp::BooleanAnd), 602 AMPAMP => Some(BinOp::BooleanAnd),
601 EQEQ => Some(BinOp::EqualityTest), 603 EQEQ => Some(BinOp::EqualityTest),
604 NEQ => Some(BinOp::NegatedEqualityTest),
602 LTEQ => Some(BinOp::LesserEqualTest), 605 LTEQ => Some(BinOp::LesserEqualTest),
603 GTEQ => Some(BinOp::GreaterEqualTest), 606 GTEQ => Some(BinOp::GreaterEqualTest),
604 L_ANGLE => Some(BinOp::LesserTest), 607 L_ANGLE => Some(BinOp::LesserTest),