     end
   end
 
-  @spec compile(Path.t, [source: String.t, project: Project.t, output: Path.t]) :: {:ok, Error.t | nil} | :error
+  @spec compile(Path.t(), source: String.t(), project: Project.t(), output: Path.t()) ::
+          {:ok, Error.t() | nil} | :error
   def compile(root, options) do
     source = Keyword.fetch!(options, :source)
     project = Keyword.fetch!(options, :project)
     output = Keyword.fetch!(options, :output)
 
     project_json = read_project!(root)
+
     current_deps =
       project_json
       |> Map.get("dependencies", %{})

    args = ["--num", "1", binary, "make", "--report", "json"]
    options = [dir: root, out: :string, err: :string]
    result = Porcelain.exec("sysconfcpus", args, options)
    Logger.info("elm make\nexit: #{result.status}\nstdout: #{result.out}\nstderr: #{result.err}\n")
    case result do
      %Porcelain.Result{err: err, status: 1} ->
        case explore_dependency_error(err) do

  alias Elm.Version
  require Logger

  @spec setup(Path.t()) :: {:ok, Project.t()} | :error
  def setup(root) do
    with :ok <- elm_init(root) do
      File.mkdir_p!(Path.join(root, "src"))
      project_json = read_project!(root)

      project = %Project{
        elm_version: Version.create(0, 19, 0),
        dependencies:
