convert_cli_options_to_config.ex (1937B)
1 defmodule Credo.Execution.Task.ConvertCLIOptionsToConfig do 2 @moduledoc false 3 4 use Credo.Execution.Task 5 6 alias Credo.CLI.Output.UI 7 alias Credo.ConfigBuilder 8 9 @exit_status Credo.CLI.ExitStatus.config_parser_error() 10 11 def call(exec, _opts) do 12 exec 13 |> ConfigBuilder.parse() 14 |> halt_on_error(exec) 15 end 16 17 def error(exec, _opts) do 18 exec 19 |> Execution.get_halt_message() 20 |> puts_error_message() 21 22 put_exit_status(exec, @exit_status) 23 end 24 25 defp halt_on_error({:error, error}, exec) do 26 Execution.halt(exec, error) 27 end 28 29 defp halt_on_error(exec, _) do 30 exec 31 end 32 33 defp puts_error_message({:badconfig, filename, line_no, description, trigger}) 34 when not is_nil(filename) do 35 lines = 36 filename 37 |> File.read!() 38 |> Credo.Code.to_lines() 39 |> Enum.filter(fn {line_no2, _line} -> 40 line_no2 >= line_no - 2 and line_no2 <= line_no + 2 41 end) 42 43 UI.warn([:red, "** (config) Error while loading config file!"]) 44 UI.warn("") 45 46 UI.warn([:cyan, " file: ", :reset, filename]) 47 UI.warn([:cyan, " line: ", :reset, "#{line_no}"]) 48 UI.warn("") 49 50 UI.warn([" ", description, :reset, :cyan, :bright, trigger]) 51 52 UI.warn("") 53 54 Enum.each(lines, fn {line_no2, line} -> 55 color = color_list(line_no, line_no2) 56 57 UI.warn([color, String.pad_leading("#{line_no2}", 5), :reset, " ", color, line]) 58 end) 59 60 UI.warn("") 61 end 62 63 defp puts_error_message({:notfound, message}) do 64 UI.warn([:red, "** (config) #{message}"]) 65 UI.warn("") 66 end 67 68 defp puts_error_message({:config_name_not_found, message}) do 69 UI.warn([:red, "** (config) #{message}"]) 70 UI.warn("") 71 end 72 73 defp puts_error_message(error) do 74 IO.warn("Execution halted during #{__MODULE__}! Unrecognized error: #{inspect(error)}") 75 end 76 77 defp color_list(line_no, line_no2) when line_no == line_no2, do: [:bright, :cyan] 78 defp color_list(_, _), do: [:faint] 79 end