initialize_plugins.ex (956B)
1 defmodule Credo.Execution.Task.InitializePlugins do 2 @moduledoc false 3 4 use Credo.Execution.Task 5 6 alias Credo.Execution 7 8 def call(exec, _opts) do 9 Enum.reduce(exec.plugins, exec, &init_plugin(&2, &1)) 10 end 11 12 defp init_plugin(exec, {_mod, false}), do: exec 13 14 defp init_plugin(exec, {mod, _params}) do 15 if Code.ensure_loaded?(mod) do 16 if function_exported?(mod, :init, 1) do 17 exec 18 |> Execution.set_initializing_plugin(mod) 19 |> mod.init() 20 |> Execution.ensure_execution_struct("#{mod}.init/1") 21 |> Execution.set_initializing_plugin(nil) 22 else 23 Execution.halt( 24 exec, 25 "Plugin module `#{Credo.Code.Module.name(mod)}` is not a valid plugin: does not implement expected behavior." 26 ) 27 end 28 else 29 Execution.halt( 30 exec, 31 "Plugin module `#{Credo.Code.Module.name(mod)}` is not available and could not be initialized." 32 ) 33 end 34 end 35 end