Packages

Really just Credo. Plus some additional functionality.

Current section

Files

Jump to
credo_plus lib credo cli command report_card output console.ex
Raw

lib/credo/cli/command/report_card/output/console.ex

defmodule Credo.CLI.Command.ReportCard.Output.Console do
@moduledoc false
alias Credo.Execution
def print_before_info(_source_files, _exec), do: nil
def print_after_info(_source_files, exec, _time_load, _time_run) do
exec
|> Execution.get_issues()
|> print_issues()
end
alias Credo.CLI.Output.UI
defp print_issues(issues) do
UI.puts()
issues
|> Enum.reduce(Map.new(), &Credo.CLI.Output.Formatter.ReportCard.categorize_module/2)
|> Enum.map(&score_module/1)
|> Enum.sort_by(fn {n, g, rs, ic} -> {g, rs, ic, n} end)
|> Enum.reverse()
|> Enum.each(fn item -> write_console(item) end)
end
defp write_console({n, g, rs, ic}) do
{grade_bg, grade_fg} = grade_colors(g)
UI.puts([
grade_bg,
grade_fg,
" ",
g,
" ",
:reset,
" ",
n
])
UI.puts([" ", "Issues: ", Integer.to_string(ic)])
UI.puts([
" ",
"Remediation Time: ",
Credo.CLI.Output.Formatter.ReportCard.format_remediation_time(rs)
])
UI.puts()
end
defp score_module({k, v}) do
{issue_count, raw_score} = Credo.CLI.Output.Formatter.ReportCard.score_issues(k, v)
mod_grade = Credo.CLI.Output.Formatter.ReportCard.grade(raw_score)
{k, mod_grade, raw_score, issue_count}
end
defp grade_colors("A") do
{:green_background, :bright}
end
defp grade_colors("B") do
{:magenta_background, :bright}
end
defp grade_colors("C") do
{:blue_background, :bright}
end
defp grade_colors("D") do
{:yellow_background, :bright}
end
defp grade_colors("E") do
{:orange_background, :bright}
end
defp grade_colors(_) do
{:red_background, :bright}
end
end