zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

format_delegator.ex (1691B)


      1 defmodule Credo.CLI.Output.FormatDelegator do
      2   @moduledoc """
      3   This module can be used to easily delegate print-statements for different
      4   formats to different modules.
      5 
      6   Example:
      7 
      8       use Credo.CLI.Output.FormatDelegator,
      9         default: Credo.CLI.Command.Suggest.Output.Default,
     10         flycheck: Credo.CLI.Command.Suggest.Output.FlyCheck,
     11         oneline: Credo.CLI.Command.Suggest.Output.Oneline,
     12         json: Credo.CLI.Command.Suggest.Output.Json
     13 
     14   """
     15 
     16   @doc false
     17   defmacro __using__(format_list) do
     18     format_mods =
     19       Enum.map(format_list, fn {format, output_mod} ->
     20         case format do
     21           :default ->
     22             quote do
     23             end
     24 
     25           _ ->
     26             quote do
     27               defp format_mod(%Execution{format: unquote(to_string(format))}) do
     28                 unquote(output_mod)
     29               end
     30             end
     31         end
     32       end)
     33 
     34     default_format_mod =
     35       Enum.map(format_list, fn {format, output_mod} ->
     36         case format do
     37           :default ->
     38             quote do
     39               defp format_mod(_) do
     40                 unquote(output_mod)
     41               end
     42             end
     43 
     44           _ ->
     45             quote do
     46             end
     47         end
     48       end)
     49 
     50     quote do
     51       alias Credo.Execution
     52 
     53       def print_before_info(source_files, exec) do
     54         format_mod = format_mod(exec)
     55 
     56         format_mod.print_before_info(source_files, exec)
     57       end
     58 
     59       def print_after_info(source_files, exec, time_load, time_run) do
     60         format_mod = format_mod(exec)
     61 
     62         format_mod.print_after_info(source_files, exec, time_load, time_run)
     63       end
     64 
     65       unquote(format_mods)
     66 
     67       unquote(default_format_mod)
     68     end
     69   end
     70 end