Skip to content

Commit ae60882

Browse files
VLanvinfacebook-github-bot
authored andcommitted
Add support for improper list patterns
Summary: Remove a crash when elaborating an improper list pattern. Reviewed By: ilya-klyuchnikov Differential Revision: D41551007 fbshipit-source-id: c765558fe3472654d4ec94f9b009191b543e64c6
1 parent 9843792 commit ae60882

File tree

7 files changed

+31
-20
lines changed

7 files changed

+31
-20
lines changed

eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/ElabPat.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ final class ElabPat(pipelineContext: PipelineContext) {
8282
case Some(ListType(elemType)) =>
8383
val (hType, env1) = elabPat(hPat, elemType, env)
8484
val (tType, env2) = elabPat(tPat, ListType(elemType), env1)
85-
val ListType(refinedT) = narrow.asListType(tType).get
86-
(ListType(subtype.join(hType, refinedT)), env2)
85+
narrow.asListType(tType) match {
86+
case Some(ListType(refinedT)) => (ListType(subtype.join(hType, refinedT)), env2)
87+
case None => (AnyType, env2)
88+
}
8789
}
8890
case PatMatch(p1: PatVar, p2) =>
8991
val (t2, env1) = elabPat(p2, t, env)

eqwalizer/test_projects/_cli/checkable_funs.cli

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
all funs:
2-
All : 2838
3-
Checkable : 2573
4-
Well-typed checkable : 1642
2+
All : 2839
3+
Checkable : 2574
4+
Well-typed checkable : 1643
55
Checkable ratio : 91%
66
Health ratio of checkable : 64%
77
error count : 930
@@ -26,18 +26,18 @@ generated non-test funs:
2626

2727
--------------------------------------------
2828
non-generated funs:
29-
All : 2838
30-
Checkable : 2573
31-
Well-typed checkable : 1642
29+
All : 2839
30+
Checkable : 2574
31+
Well-typed checkable : 1643
3232
Checkable ratio : 91%
3333
Health ratio of checkable : 64%
3434
error count : 930
3535

3636
--------------------------------------------
3737
non-generated non-test funs (most important):
38-
All : 2836
39-
Checkable : 2571
40-
Well-typed checkable : 1641
38+
All : 2837
39+
Checkable : 2572
40+
Well-typed checkable : 1642
4141
Checkable ratio : 91%
4242
Health ratio of checkable : 64%
4343
error count : 929

eqwalizer/test_projects/_cli/discarded_specs.cli

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@ type_aliases:uses_trans_unbound_var/2
4949
type_aliases:uses_ty_w_unbound_var/2
5050
type_aliases:uses_ty_w_unbound_var2/0
5151
Discarded specs: 49
52-
Total specs: 2711
53-
Discarded ratio: 1.8075 %
52+
Total specs: 2712
53+
Discarded ratio: 1.8068 %

eqwalizer/test_projects/_cli/misc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2563,7 +2563,8 @@
25632563
"f/1",
25642564
"g/1",
25652565
"fuzz01/0",
2566-
"fuzz02/0"
2566+
"fuzz02/0",
2567+
"fuzz03/1"
25672568
]
25682569
},
25692570
{

eqwalizer/test_projects/_cli/numbers.cli

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
all specs:
2-
containing number: 13.16%
3-
containing integer: 10.72%
2+
containing number: 13.15%
3+
containing integer: 10.71%
44
containing pos_integer: 3.25%
5-
containing non_neg_integer: 2.00%
5+
containing non_neg_integer: 1.99%
66
containing neg_integer: 1.48%
77
containing byte: 0.26%
88
containing char: 0.22%
@@ -21,10 +21,10 @@ generated specs:
2121
containing range: 0.00%
2222
containing int lit: 0.00%
2323
non-generated specs:
24-
containing number: 13.16%
25-
containing integer: 10.72%
24+
containing number: 13.15%
25+
containing integer: 10.71%
2626
containing pos_integer: 3.25%
27-
containing non_neg_integer: 2.00%
27+
containing non_neg_integer: 1.99%
2828
containing neg_integer: 1.48%
2929
containing byte: 0.26%
3030
containing char: 0.22%

eqwalizer/test_projects/check_gradual/src/gradual_misc.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ fuzz01() when #{(true andalso false) => {}} ->
3636
-spec fuzz02() -> ok.
3737
fuzz02() ->
3838
<<X || X <- [], (X ++ X) >>.
39+
40+
-spec fuzz03(term()) -> ok.
41+
fuzz03([_ | {}]) ->
42+
ok.

eqwalizer/test_projects/check_gradual/src/gradual_misc.erl.check

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,7 @@ fuzz02() -> | ERROR |
4040
<<X || X <- [], (X ++ X) >>. | | << || >>.
4141
| | Expected: 'ok'
4242
| | Got : binary()
43+
| |
44+
-spec fuzz03(term()) -> ok. | |
45+
fuzz03([_ | {}]) -> | OK |
46+
ok. | |

0 commit comments

Comments
 (0)