defmodule Credo.CLI.Output.FormatDelegator do @moduledoc """ This module can be used to easily delegate print-statements for different formats to different modules. Example: use Credo.CLI.Output.FormatDelegator, default: Credo.CLI.Command.Suggest.Output.Default, flycheck: Credo.CLI.Command.Suggest.Output.FlyCheck, oneline: Credo.CLI.Command.Suggest.Output.Oneline, json: Credo.CLI.Command.Suggest.Output.Json """ @doc false defmacro __using__(format_list) do format_mods = Enum.map(format_list, fn {format, output_mod} -> case format do :default -> quote do end _ -> quote do defp format_mod(%Execution{format: unquote(to_string(format))}) do unquote(output_mod) end end end end) default_format_mod = Enum.map(format_list, fn {format, output_mod} -> case format do :default -> quote do defp format_mod(_) do unquote(output_mod) end end _ -> quote do end end end) quote do alias Credo.Execution def print_before_info(source_files, exec) do format_mod = format_mod(exec) format_mod.print_before_info(source_files, exec) end def print_after_info(source_files, exec, time_load, time_run) do format_mod = format_mod(exec) format_mod.print_after_info(source_files, exec, time_load, time_run) end unquote(format_mods) unquote(default_format_mod) end end end