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