Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Six

<picture>
<img src="./assets/six.png" alt="Six">
</picture>
![Six](https://raw.githubusercontent.com/typicalpixel/six/main/assets/six.png)

## Watch your Coverage

Expand Down Expand Up @@ -31,7 +29,7 @@ def cli do
end

defp deps do
[{:six, "~> 0.2", only: :test}]
[{:six, "~> 0.3", only: :test}]
end
```

Expand Down
7 changes: 5 additions & 2 deletions lib/six/config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ defmodule Six.Config do
detail: false,
filter: nil,
threshold: 90,
track_ignores: false
track_ignores: false,
heatmap: true

@doc """
Reads configuration from application env and returns a config struct.
Expand All @@ -26,7 +27,8 @@ defmodule Six.Config do
detail: get(:detail, false),
filter: get(:filter, nil),
threshold: get(:threshold, 90),
track_ignores: get(:track_ignores, false)
track_ignores: get(:track_ignores, false),
heatmap: get(:heatmap, true)
}
end

Expand All @@ -42,6 +44,7 @@ defmodule Six.Config do
{:filter, val}, acc -> %{acc | filter: val}
{:formatters, val}, acc -> %{acc | formatters: val}
{:track_ignores, val}, acc -> %{acc | track_ignores: val}
{:heatmap, val}, acc -> %{acc | heatmap: val}
{:skip, val}, acc -> %{acc | skip_files: acc.skip_files ++ [val]}
{:skip_files, vals}, acc when is_list(vals) -> %{acc | skip_files: acc.skip_files ++ vals}
{:summary, summary_opts}, acc -> merge_summary_opts(acc, summary_opts)
Expand Down
31 changes: 31 additions & 0 deletions lib/six/cover.ex
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,37 @@ defmodule Six.Cover do
end)
end

@doc """
Analyzes a single module for per-function call counts.
Returns `{:ok, [{{mod, fun, arity}, count}]}` or `{:error, reason}`.
"""
def analyze_functions(module) do
case :cover.analyse(module, :calls, :function) do
{:ok, results} ->
{:ok, results}

# six:ignore:start
{:error, reason} ->
{:error, reason}
# six:ignore:stop
end
end

@doc """
Analyzes per-function call counts for all cover-compiled modules.
Returns a map of module => [{{mod, fun, arity}, count}].
"""
def analyze_all_functions do
:cover.modules()
|> Enum.reduce(%{}, fn module, acc ->
case analyze_functions(module) do
{:ok, results} -> Map.put(acc, module, results)
# six:ignore:next
{:error, _} -> acc
end
end)
end

@doc """
Resolves the source file path for a module, relative to the project root.
Returns nil if the source file doesn't exist.
Expand Down
Loading
Loading