Skip to main content

lib/ex_check/project.ex

defmodule ExCheck.Project do
  @moduledoc false

  def config do
    Mix.Project.config()
  end

  def apps_paths do
    Mix.Project.apps_paths()
  end

  def has_dep?(name) do
    config()
    |> Keyword.fetch!(:deps)
    |> List.keymember?(name, 0)
  end

  def has_dep_in_app?(name, app) do
    app_path = Map.fetch!(apps_paths(), app)

    Mix.Project.in_project(app, app_path, fn _ ->
      has_dep?(name)
    end)
  end

  def get_mix_root_dir do
    if in_umbrella?() do
      "../.."
    else
      "."
    end
  end

  def get_mix_parent_dirs do
    if in_umbrella?() do
      [Path.join("..", ".."), "."]
    else
      ["."]
    end
  end

  def umbrella? do
    Mix.Project.umbrella?()
  end

  def in_umbrella? do
    apps = Path.dirname(File.cwd!())

    try do
      Mix.Project.in_project(:umbrella_check, "../..", fn _ ->
        path = Mix.Project.config()[:apps_path]
        (path && Path.expand(path) == apps) || false
      end)
    catch
      _, _ -> false
    end
  end
end