Packages

A high-performance, analytical Datalog engine for Gleam

Current section

Files

Jump to
aarondb src coverage_ffi.erl
Raw

src/coverage_ffi.erl

-module(coverage_ffi).
-export([start/0, compile/1, analyze/1, stop/0]).
start() ->
cover:start().
compile(Dir) ->
Results = cover:compile_beam_directory(binary_to_list(Dir)),
Modules = [M || {ok, M} <- Results],
{ok, Modules}.
analyze(Modules) ->
Results = lists:map(fun(M) ->
case cover:analyze(M, coverage, line) of
{ok, {M, Lines}} ->
process_lines(M, Lines);
{ok, Lines} when is_list(Lines) ->
process_lines(M, Lines);
_ -> {M, 0, 0}
end
end, Modules),
Results.
process_lines(M, Lines) ->
{Cov, NonCov} = lists:foldl(fun(LineData, {C, N}) ->
case LineData of
{{M, _}, Count} when Count == 0 -> {C, N + 1};
{{M, _}, _Count} -> {C + 1, N};
_ -> {C, N}
end
end, {0, 0}, Lines),
{atom_to_binary(M, utf8), Cov, NonCov}.
stop() ->
cover:stop().