2024-05-28 15:30:41 +12:00
|
|
|
defmodule Igniter.Formatter do
|
2024-06-01 14:59:36 +12:00
|
|
|
@moduledoc "Codemods and utilities for interacting with `.formatter.exs` files"
|
2024-05-28 15:30:41 +12:00
|
|
|
alias Igniter.Common
|
|
|
|
alias Sourceror.Zipper
|
|
|
|
|
|
|
|
@default_formatter """
|
|
|
|
# Used by "mix format"
|
|
|
|
[
|
|
|
|
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"]
|
|
|
|
]
|
|
|
|
"""
|
|
|
|
|
|
|
|
def import_dep(igniter, dep) do
|
|
|
|
igniter
|
|
|
|
|> Igniter.include_or_create_elixir_file(".formatter.exs", @default_formatter)
|
2024-06-04 05:13:49 +12:00
|
|
|
|> Igniter.update_elixir_file(".formatter.exs", fn zipper ->
|
|
|
|
zipper
|
|
|
|
|> Zipper.down()
|
|
|
|
|> case do
|
|
|
|
nil ->
|
|
|
|
code =
|
|
|
|
quote do
|
|
|
|
[import_deps: [unquote(dep)]]
|
|
|
|
end
|
2024-05-28 15:30:41 +12:00
|
|
|
|
2024-06-04 05:13:49 +12:00
|
|
|
Igniter.Common.add_code(zipper, code)
|
2024-06-01 14:09:38 +12:00
|
|
|
|
2024-06-04 05:13:49 +12:00
|
|
|
zipper ->
|
|
|
|
zipper
|
|
|
|
|> Zipper.rightmost()
|
|
|
|
|> Common.put_in_keyword([:import_deps], [dep], fn nested_zipper ->
|
|
|
|
Igniter.Common.prepend_new_to_list(
|
|
|
|
nested_zipper,
|
|
|
|
dep
|
|
|
|
)
|
|
|
|
end)
|
|
|
|
|> case do
|
|
|
|
{:ok, zipper} ->
|
|
|
|
zipper
|
2024-05-28 15:30:41 +12:00
|
|
|
|
2024-06-04 05:13:49 +12:00
|
|
|
:error ->
|
|
|
|
zipper
|
|
|
|
end
|
|
|
|
end
|
2024-05-28 15:30:41 +12:00
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
def add_formatter_plugin(igniter, plugin) do
|
|
|
|
igniter
|
|
|
|
|> Igniter.include_or_create_elixir_file(".formatter.exs", @default_formatter)
|
2024-06-04 05:13:49 +12:00
|
|
|
|> Igniter.update_elixir_file(".formatter.exs", fn zipper ->
|
|
|
|
zipper
|
|
|
|
|> Zipper.down()
|
|
|
|
|> case do
|
|
|
|
nil ->
|
|
|
|
code =
|
|
|
|
quote do
|
|
|
|
[plugins: [unquote(plugin)]]
|
|
|
|
end
|
2024-05-28 15:30:41 +12:00
|
|
|
|
2024-06-04 05:13:49 +12:00
|
|
|
zipper
|
|
|
|
|> Igniter.Common.add_code(code)
|
2024-06-01 14:09:38 +12:00
|
|
|
|
2024-06-04 05:13:49 +12:00
|
|
|
zipper ->
|
|
|
|
zipper
|
|
|
|
|> Zipper.rightmost()
|
|
|
|
|> Common.put_in_keyword([:plugins], [Spark.Formatter], fn nested_zipper ->
|
|
|
|
Igniter.Common.prepend_new_to_list(
|
|
|
|
nested_zipper,
|
|
|
|
Spark.Formatter,
|
|
|
|
&Igniter.Common.equal_modules?/2
|
|
|
|
)
|
|
|
|
end)
|
|
|
|
|> case do
|
|
|
|
{:ok, zipper} ->
|
|
|
|
zipper
|
2024-05-28 15:30:41 +12:00
|
|
|
|
2024-06-04 05:13:49 +12:00
|
|
|
_ ->
|
|
|
|
zipper
|
|
|
|
end
|
|
|
|
end
|
2024-05-28 15:30:41 +12:00
|
|
|
end)
|
|
|
|
end
|
|
|
|
end
|