summaryrefslogtreecommitdiff
path: root/lib/mix/lib/mix/tasks/format.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mix/lib/mix/tasks/format.ex')
-rw-r--r--lib/mix/lib/mix/tasks/format.ex16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/mix/lib/mix/tasks/format.ex b/lib/mix/lib/mix/tasks/format.ex
index 6d4afc874..a164f3aac 100644
--- a/lib/mix/lib/mix/tasks/format.ex
+++ b/lib/mix/lib/mix/tasks/format.ex
@@ -251,10 +251,12 @@ defmodule Mix.Tasks.Format do
def formatter_for_file(file, opts \\ []) do
{dot_formatter, formatter_opts} = eval_dot_formatter(opts)
+ prefix = Keyword.get(opts, :root, [])
+
{formatter_opts_and_subs, _sources} =
- eval_deps_and_subdirectories(dot_formatter, [], formatter_opts, [dot_formatter])
+ eval_deps_and_subdirectories(dot_formatter, prefix, formatter_opts, [dot_formatter])
- find_formatter_and_opts_for_file(file, formatter_opts_and_subs)
+ find_formatter_and_opts_for_file(file, prefix, formatter_opts_and_subs)
end
@doc """
@@ -275,6 +277,10 @@ defmodule Mix.Tasks.Format do
File.regular?(".formatter.exs") ->
{".formatter.exs", eval_file_with_keyword_list(".formatter.exs")}
+ opts[:root] && File.regular?(Path.join(opts[:root], ".formatter.exs")) ->
+ dot_formatter = Path.join(opts[:root], ".formatter.exs")
+ {dot_formatter, eval_file_with_keyword_list(dot_formatter)}
+
true ->
{".formatter.exs", []}
end
@@ -582,6 +588,12 @@ defmodule Mix.Tasks.Format do
{find_formatter_for_file(file, formatter_opts), formatter_opts}
end
+ defp find_formatter_and_opts_for_file(file, prefix, formatter_opts_and_subs) do
+ split = file |> Path.relative_to(prefix) |> Path.split()
+ formatter_opts = recur_formatter_opts_for_file(split, formatter_opts_and_subs)
+ {find_formatter_for_file(file, formatter_opts), formatter_opts}
+ end
+
defp recur_formatter_opts_for_file(split, {formatter_opts, subs}) do
Enum.find_value(subs, formatter_opts, fn {sub, formatter_opts_and_subs} ->
if List.starts_with?(split, Path.split(sub)) do