diff options
author | Jonatan Männchen <jonatan@maennchen.ch> | 2022-01-22 09:34:20 +0100 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2022-01-22 09:36:02 +0100 |
commit | 421a77d50896bc303814bbc22e9c9a057fb9e65c (patch) | |
tree | ac309108c01e7539a27d1893d9c1d8e6303ec5f3 | |
parent | cc9e9b29a7b473010ed17f894e6a576983a9c294 (diff) | |
download | elixir-421a77d50896bc303814bbc22e9c9a057fb9e65c.tar.gz |
Embedded Elixir Expressions in Formatter Plugins (#11587)
Support Sigils inside embedded expressions in files formatted
by a formatter plugin.
-rw-r--r-- | lib/mix/lib/mix/tasks/format.ex | 17 | ||||
-rw-r--r-- | lib/mix/test/mix/tasks/format_test.exs | 3 |
2 files changed, 12 insertions, 8 deletions
diff --git a/lib/mix/lib/mix/tasks/format.ex b/lib/mix/lib/mix/tasks/format.ex index 231604f39..4a5127579 100644 --- a/lib/mix/lib/mix/tasks/format.ex +++ b/lib/mix/lib/mix/tasks/format.ex @@ -288,7 +288,15 @@ defmodule Mix.Tasks.Format do end end - formatter_opts = Keyword.put(formatter_opts, :plugins, plugins) + sigils = + for plugin <- plugins, + sigil <- find_sigils_from_plugins(plugin, formatter_opts), + do: {sigil, &plugin.format(&1, &2 ++ formatter_opts)} + + formatter_opts = + formatter_opts + |> Keyword.put(:plugins, plugins) + |> Keyword.put(:sigils, sigils) if deps == [] and subs == [] do {{formatter_opts, []}, sources} @@ -537,12 +545,7 @@ defmodule Mix.Tasks.Format do defp stdin_or_wildcard(path), do: path |> Path.expand() |> Path.wildcard(match_dot: true) defp elixir_format(content, formatter_opts) do - sigils = - for plugin <- Keyword.fetch!(formatter_opts, :plugins), - sigil <- find_sigils_from_plugins(plugin, formatter_opts), - do: {sigil, &plugin.format(&1, &2 ++ formatter_opts)} - - IO.iodata_to_binary([Code.format_string!(content, [sigils: sigils] ++ formatter_opts), ?\n]) + IO.iodata_to_binary([Code.format_string!(content, formatter_opts), ?\n]) end defp find_sigils_from_plugins(plugin, formatter_opts) do diff --git a/lib/mix/test/mix/tasks/format_test.exs b/lib/mix/test/mix/tasks/format_test.exs index 6473cfd4a..a2c971dce 100644 --- a/lib/mix/test/mix/tasks/format_test.exs +++ b/lib/mix/test/mix/tasks/format_test.exs @@ -247,12 +247,13 @@ defmodule Mix.Tasks.FormatTest do def features(opts) do assert opts[:from_formatter_exs] == :yes - [extensions: ~w(.w)] + [extensions: ~w(.w), sigils: [:W]] end def format(contents, opts) do assert opts[:from_formatter_exs] == :yes assert opts[:extension] == ".w" + assert [W: _fun] = opts[:sigils] contents |> String.split(~r/\s/) |> Enum.join("\n") end end |