Packages
excoveralls
0.12.3
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
Coverage report tool for Elixir with coveralls.io integration.
Current section
Files
Jump to
Current section
Files
lib/excoveralls/ignore.ex
defmodule ExCoveralls.Ignore do
@moduledoc """
Handles comments to start/stop ignoring lines from coverage.
"""
@doc """
Filters out lines between start and end comment.
"""
def filter(info) do
Enum.map(info, &do_filter/1)
end
defp do_filter(%{name: name, source: source, coverage: coverage}) do
lines = String.split(source, "\n")
list = Enum.zip(lines, coverage)
|> Enum.map_reduce(false, &check_and_swap/2)
|> elem(0)
|> List.zip
|> Enum.map(&Tuple.to_list(&1))
[source, coverage] = parse_filter_list(list)
%{name: name, source: source, coverage: coverage}
end
defp check_and_swap({line, coverage}, ignore) do
{
coverage_for_line({line, coverage}, ignore),
ignore_next?(line, ignore)
}
end
defp parse_filter_list([]), do: ["", []]
defp parse_filter_list([lines, coverage]), do: [Enum.join(lines, "\n"), coverage]
defp coverage_for_line({line, coverage}, ignore) do
if ignore == false do
{line, coverage}
else
{line, nil}
end
end
defp ignore_next?(line, ignore) do
case Regex.run(~r/coveralls-ignore-(start|stop)/, line, capture: :all_but_first) do
["start"] -> true
["stop"] -> false
_sth -> ignore
end
end
end