diff --git a/lib/mix/lib/mix/generator.ex b/lib/mix/lib/mix/generator.ex index e2ccceb65ad..2551b8ecb38 100644 --- a/lib/mix/lib/mix/generator.ex +++ b/lib/mix/lib/mix/generator.ex @@ -27,6 +27,13 @@ defmodule Mix.Generator do if opts[:force] || overwrite?(path, contents) do File.mkdir_p!(Path.dirname(path)) + + contents = + case opts[:format_elixir] do + true -> [Code.format_string!(contents), ?\n] + _ -> contents + end + File.write!(path, contents) true else @@ -94,6 +101,7 @@ defmodule Mix.Generator do * `:force` - forces copying without a shell prompt * `:quiet` - does not log command output + * `:format_elixir` (since v1.18.0) - if `true`, apply formatter to the generated file ## Examples diff --git a/lib/mix/test/mix/generator_test.exs b/lib/mix/test/mix/generator_test.exs index 5b7dcca6433..e393471628b 100644 --- a/lib/mix/test/mix/generator_test.exs +++ b/lib/mix/test/mix/generator_test.exs @@ -147,6 +147,13 @@ defmodule Mix.GeneratorTest do assert_received {:mix_shell, :yes?, ["foo already exists, overwrite?"]} end) end + + test "with `format_elixir: true`" do + in_tmp("create_file", fn -> + create_file("foo", "%{ foo: :bar }", format_elixir: true) + assert File.read!("foo") == "%{foo: :bar}\n" + end) + end end describe "copy_file/3" do