WhatsApp / eqwalizer

A type-checker for Erlang
Apache License 2.0
507 stars 27 forks source link

Exhaustiveness checking #1

Open michallepicki opened 2 years ago

michallepicki commented 2 years ago

Is there a plan to have exhaustiveness checking of case expressions?

Currently this code doesn't result in any errors:

-module(testmod).
-export([testfun/0]).

-spec testfun() -> pos_integer().
testfun() ->
  case a() of
    ok -> 1
  end.

-spec a() -> ok | number().
a() ->
  case rand:uniform(10) rem 2 of
    0 -> ok;
    1 -> 1
  end.
$ rebar3 compile
===> Verifying dependencies...
===> Analyzing applications...
===> Compiling myapp
$ elp eqwalize-all
  Loading rebar3 build_info
  Loading applications      ████████████████████ 2/2
  Seeding database
  Compiling dependencies
NO ERRORS
ilya-klyuchnikov commented 2 years ago

Is there a plan to have exhaustiveness checking of case expressions?

In the short term - no. The main rationale for the current design choice: Erlang "let it crash philosophy" - for real world programs such checks may be rather noisy. - Consider implementations of gen_server - such checks would force users to add "default clauses".

We can re-consider this in future.

ilya-klyuchnikov commented 2 years ago

It will be clarified as part of documentation soon.