summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Männchen <jonatan@maennchen.ch>2022-01-22 09:34:20 +0100
committerJosé Valim <jose.valim@dashbit.co>2022-01-22 09:36:02 +0100
commit421a77d50896bc303814bbc22e9c9a057fb9e65c (patch)
treeac309108c01e7539a27d1893d9c1d8e6303ec5f3
parentcc9e9b29a7b473010ed17f894e6a576983a9c294 (diff)
downloadelixir-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.ex17
-rw-r--r--lib/mix/test/mix/tasks/format_test.exs3
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