Skip to content

Commit f0969f0

Browse files
author
José Valim
committed
Only cache deps opts when the root formatter is used
1 parent ad489d7 commit f0969f0

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

lib/mix/lib/mix/tasks/format.ex

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ defmodule Mix.Tasks.Format do
119119

120120
def run(args) do
121121
{opts, args} = OptionParser.parse!(args, strict: @switches)
122-
formatter_opts = eval_dot_formatter(opts)
123-
formatter_opts = fetch_deps_opts(formatter_opts)
122+
{dot_formatter, formatter_opts} = eval_dot_formatter(opts)
123+
formatter_opts = fetch_deps_opts(dot_formatter, formatter_opts)
124124

125125
args
126126
|> expand_args(formatter_opts)
@@ -130,42 +130,32 @@ defmodule Mix.Tasks.Format do
130130
end
131131

132132
defp eval_dot_formatter(opts) do
133-
case dot_formatter(opts) do
134-
{:ok, dot_formatter} -> eval_file_with_keyword_list(dot_formatter)
135-
:error -> []
136-
end
137-
end
138-
139-
defp dot_formatter(opts) do
140133
cond do
141-
dot_formatter = opts[:dot_formatter] -> {:ok, dot_formatter}
142-
File.regular?(".formatter.exs") -> {:ok, ".formatter.exs"}
143-
true -> :error
134+
dot_formatter = opts[:dot_formatter] ->
135+
{dot_formatter, eval_file_with_keyword_list(dot_formatter)}
136+
137+
File.regular?(".formatter.exs") ->
138+
{".formatter.exs", eval_file_with_keyword_list(".formatter.exs")}
139+
140+
true ->
141+
{".formatter.exs", []}
144142
end
145143
end
146144

147145
# This function reads exported configuration from the imported dependencies and deals with
148146
# caching the result of reading such configuration in a manifest file.
149-
defp fetch_deps_opts(formatter_opts) do
147+
defp fetch_deps_opts(dot_formatter, formatter_opts) do
150148
deps = Keyword.get(formatter_opts, :import_deps, [])
151149

152150
cond do
153151
deps == [] ->
154152
formatter_opts
155153

156154
is_list(deps) ->
157-
# Since we have dependencies listed, we write the manifest even if those dependencies
158-
# don't export anything so that we avoid lookups everytime.
155+
# Since we have dependencies listed, we write the manifest even if those
156+
# dependencies don't export anything so that we avoid lookups everytime.
159157
deps_manifest = Path.join(Mix.Project.manifest_path(), @deps_manifest)
160-
161-
dep_parenless_calls =
162-
if deps_dot_formatters_stale?(deps_manifest) do
163-
dep_parenless_calls = eval_deps_opts(deps)
164-
write_deps_manifest(deps_manifest, dep_parenless_calls)
165-
dep_parenless_calls
166-
else
167-
read_deps_manifest(deps_manifest)
168-
end
158+
dep_parenless_calls = maybe_cache_eval_deps_opts(dot_formatter, deps_manifest, deps)
169159

170160
Keyword.update(
171161
formatter_opts,
@@ -179,8 +169,21 @@ defmodule Mix.Tasks.Format do
179169
end
180170
end
181171

182-
defp deps_dot_formatters_stale?(deps_manifest) do
183-
Mix.Utils.stale?([".formatter.exs" | Mix.Project.config_files()], [deps_manifest])
172+
defp maybe_cache_eval_deps_opts(dot_formatter, deps_manifest, deps) do
173+
cond do
174+
dot_formatter != ".formatter.exs" ->
175+
eval_deps_opts(deps)
176+
177+
deps_dot_formatters_stale?(dot_formatter, deps_manifest) ->
178+
write_deps_manifest(deps_manifest, eval_deps_opts(deps))
179+
180+
true ->
181+
read_deps_manifest(deps_manifest)
182+
end
183+
end
184+
185+
defp deps_dot_formatters_stale?(dot_formatter, deps_manifest) do
186+
Mix.Utils.stale?([dot_formatter | Mix.Project.config_files()], [deps_manifest])
184187
end
185188

186189
defp read_deps_manifest(deps_manifest) do
@@ -190,6 +193,7 @@ defmodule Mix.Tasks.Format do
190193
defp write_deps_manifest(deps_manifest, parenless_calls) do
191194
File.mkdir_p!(Path.dirname(deps_manifest))
192195
File.write!(deps_manifest, :erlang.term_to_binary(parenless_calls))
196+
parenless_calls
193197
end
194198

195199
defp eval_deps_opts(deps) do

0 commit comments

Comments
 (0)