Packages

Elixir coverage diffing by code block, not by line number. Certitudo snapshots test coverage and compares snapshots block by block, separating real coverage changes from ordinary source movement.

Current section

Files

Jump to
certitudo lib certitudo conspectus encode.ex
Raw

lib/certitudo/conspectus/encode.ex

defmodule Certitudo.Conspectus.Encode do
@moduledoc """
JSON-compatible encoding for conspectus differentia forms.
"""
@spec block_diff(struct()) :: map()
def block_diff(diff) do
%{
"status" => Atom.to_string(diff.status),
"left" => block(diff.left),
"right" => block(diff.right),
"residue" => residue(diff.residue)
}
end
defp block(nil), do: nil
defp block(block) do
%{
"range" => range(block.range),
"lines" => Enum.map(block.lines, &line/1)
}
end
defp range(range) do
%{
"first" => range.first,
"last" => range.last,
"numbers" => range.numbers
}
end
defp line(nil), do: nil
defp line(line) do
%{
"number" => line.number,
"calls" => line.calls,
"covered" => line.covered,
"text" => line.text
}
end
defp residue(nil), do: nil
defp residue(residue) do
%{
"reason" => Atom.to_string(residue.reason),
"entries" => Enum.map(residue.entries || [], &line_diff/1),
"blocks" => Enum.map(residue.blocks || [], &block/1),
"details" => residue.details
}
end
defp line_diff(line_diff) do
%{
"status" => Atom.to_string(line_diff.status),
"left" => line(line_diff.left),
"right" => line(line_diff.right)
}
end
end