diff --git a/lib/mix/lib/mix/dep/loader.ex b/lib/mix/lib/mix/dep/loader.ex index 290579a23ea..b2620b92730 100644 --- a/lib/mix/lib/mix/dep/loader.ex +++ b/lib/mix/lib/mix/dep/loader.ex @@ -202,6 +202,14 @@ defmodule Mix.Dep.Loader do ) end + project_app = Mix.Project.config()[:app] + + if project_app && project_app == app do + Mix.shell().error( + "warning: the application name #{inspect(app)} is the same as one of its dependencies" + ) + end + %Mix.Dep{ scm: scm, app: app, diff --git a/lib/mix/test/mix/tasks/deps_test.exs b/lib/mix/test/mix/tasks/deps_test.exs index 0aecfbc8219..dd85ee33603 100644 --- a/lib/mix/test/mix/tasks/deps_test.exs +++ b/lib/mix/test/mix/tasks/deps_test.exs @@ -922,6 +922,31 @@ defmodule Mix.Tasks.DepsTest do end) end + defmodule AppNameClashesWithDep do + def project do + [ + app: :ok, + version: "0.1.0", + deps: [ + {:ok, "0.1.0", path: "deps/ok"} + ] + ] + end + end + + test "warns when project app name matches a dependency" do + in_fixture("deps_status", fn -> + Mix.Project.push(AppNameClashesWithDep) + + Mix.Tasks.Deps.Get.run([]) + + msg = + "warning: the application name :ok is the same as one of its dependencies" + + assert_received {:mix_shell, :error, [^msg]} + end) + end + ## deps.clean defmodule CleanDepsApp do