lib/mix/tasks/tidy.ex
defmodule Mix.Tasks.Tidy do
use Mix.Task
@shortdoc "Run tidy analysis."
@moduledoc @shortdoc
@doc false
def run(_argv) do
Mix.Task.run("compile")
app =
~r/app: *:([a-z\_]+)/
|> Regex.scan(File.read!("./mix.exs"), capture: :all_but_first)
|> Enum.find_value(&try_load/1)
analysis = Tidy.analyze_app(app)
analysis
|> Enum.map(&Tidy.errors/1)
|> IO.puts()
exit({:shutdown, Tidy.errors?(analysis)})
end
defp try_load(app)
defp try_load([app]) do
name = String.to_existing_atom(app)
if Application.ensure_loaded(name) == :ok, do: name
rescue
_ -> nil
end
end