josefs/Gradualizer

Gradualizer results from top 24 Hex.pm Erlang libraries

erszcz opened this issue · 4 comments

I've run Gradualizer using the Rebar3 plugin on the top Hex.pm Erlang libs and here are the results. The log is more than 4000 lines long. I consider this another source of feedback on Gradualizer's fit for practical use. Some very general conclusions so far:

  • not a single Gradualizer crash - we're already very robust
  • there's plenty of can't find include file warnings; most likely due to incomplete non-otp-libraries repo setup, so it could use a bit more work on that front
  • type errors are quite common in community projects :)

Some examples of the last point follow. For example, a typo in a spec in meck:

/Users/erszcz/work/erszcz/non-otp-libraries/apps/meck/src/meck.erl: The function call on line 352 at column 5 is expected to have type [{atom(), atom(), 0..255}] but it has type [{atom(), atom(), byte}]

      ExcludePassthrough :: boolean().
expects(Mod, ExcludePassthrough) when is_atom(Mod) ->
    meck_proc:list_expects(Mod, ExcludePassthrough);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Confusion between binary() and bitstring() in hpack:

/Users/erszcz/work/erszcz/non-otp-libraries/apps/hpack_erl/src/hpack.erl: The bit expression on line 124 at column 8 is expected to have type <<_:8, _:_*8>> but it has type <<_:1, _:_*1>>

%% First bit is '1', so it's an 'Indexed Header Feild'
%% http://http2.github.io/http2-spec/compression.html#rfc.section.6.1
decode(<<2#1:1,_/bits>>=B, HeaderAcc, Context) ->
       ^^^^^^^^^^^^^^^^

Some more info:

20:11:05 erszcz @ x6 : ~/work/erszcz/non-otp-libraries (gradualizer %)
$ tokei
===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 AsciiDoc                4          428          295            0          133
 BASH                    2          178          114           20           44
 C++                     3         2524         1933          267          324
 C++ Header              4         1209          913          146          150
 CSS                     1          144          118            2           24
 D                       3            8            8            0            0
 Dockerfile              1           27           21            0            6
 Elixir                 15         3671         3189           20          462
 Erlang                407       195776       163175        20743        11858
 Makefile               13        30950        25069         1029         4852
 Protocol Buffers        1           81           56           12           13
 Shell                   5          107           80           14           13
 Plain Text              3           45            0           42            3
 XML                     5           46           42            4            0
-------------------------------------------------------------------------------
 Markdown               30         4793            0         3427         1366
 |- BASH                 2           10            5            3            2
 |- Elixir               4          350          258           53           39
 |- Erlang              16          917          818           45           54
 |- Shell                2            3            3            0            0
 |- XML                  1          184          163            7           14
 (Total)                           6257         1247         3535         1475
===============================================================================
 Total                 497       239987       195013        25726        19248
===============================================================================

Literally one Gradualizer timeout warning:

$ grep "Timeout checking function" gradualizer.noansi.log | wc -l
       1

Nice!

Running on beams rather than erls would probably eliminate the include not found errors. Have you tried?

I just ran rebar3 gradualizer without looking under the hood this time. I think it runs on the beams, but maybe it needs an extra flag. Good point to check, though.

OK. If it's running on erls, it should be able to access to the include dirs defined in the rebar config too. I guess there are more potential improvements in the rebar plugin.