defmodule Mix.Tasks.Todo do use Mix.Task alias Mix.Shell.IO, as: Shell @shortdoc "List all todos items for the current project" def run(argv) do Mix.Task.run("compile") config = Mix.Project.config() app = config[:app] max_vsn = Version.parse!(config[:version]) print_mode = cond do Enum.member?(argv, "--all") -> :all Enum.member?(argv, "--overdue") -> :overdue true -> TODO.config_default(:print) end app |> get_all_modules() |> TODO.get_todos() |> TODO.output_todos(print_mode, max_vsn) end defp get_all_modules(app) do appfile = Application.app_dir(app) <> "/ebin/#{app}.app" case :file.consult(appfile) do {:error, :enoent} -> Shell.error("File missing. App not compiled ?") exit(:normal) {:ok, [data]} -> {:application, _app, infos} = data infos[:modules] || [] end end end