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