Packages
igniter
0.3.34
0.8.2
0.8.1
0.8.0
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.30
0.6.29
0.6.28
0.6.27
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.52
0.5.51
0.5.50
0.5.49
0.5.48
0.5.47
0.5.46
0.5.45
0.5.44
0.5.43
0.5.42
0.5.41
0.5.40
0.5.39
0.5.38
0.5.37
0.5.36
0.5.35
0.5.34
0.5.33
0.5.32
0.5.31
0.5.30
0.5.29
0.5.28
0.5.27
0.5.26
0.5.25
0.5.24
0.5.23
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.78
0.3.77
0.3.76
0.3.75
0.3.74
0.3.73
0.3.72
0.3.71
0.3.70
0.3.69
0.3.68
0.3.67
0.3.66
0.3.65
0.3.64
0.3.63
0.3.62
0.3.61
0.3.60
0.3.59
0.3.58
0.3.57
0.3.56
0.3.55
0.3.54
0.3.53
0.3.52
0.3.51
0.3.50
0.3.49
0.3.48
0.3.47
0.3.46
0.3.45
0.3.44
0.3.43
0.3.42
0.3.41
0.3.40
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A code generation and project patching framework
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/igniter.update_gettext.ex
defmodule Mix.Tasks.Igniter.UpdateGettext do
use Igniter.Mix.Task
@shortdoc "Applies changes to resolve a warning introduced in gettext 0.26.0"
@moduledoc """
#{@shortdoc}
"""
def info(_argv, _source) do
%Igniter.Mix.Task.Info{}
end
def igniter(igniter, _argv) do
{igniter, modules} = find_use_gettext_modules(igniter)
modules
|> Enum.reduce(igniter, fn module, igniter ->
igniter
|> use_gettext_backend(module)
|> rewrite_imports(module)
end)
|> Igniter.Project.Deps.add_dep(
{:gettext, "~> 0.26 and >= 0.26.1"},
yes?: true
)
end
defp rewrite_imports(igniter, rewriting_module) do
{igniter, modules} =
Igniter.Code.Module.find_all_matching_modules(igniter, fn _module, zipper ->
match?(
{:ok, _},
Igniter.Code.Common.move_to(zipper, fn zipper ->
import?(zipper, rewriting_module)
end)
)
end)
Enum.reduce(modules, igniter, fn module, igniter ->
Igniter.Code.Module.find_and_update_module!(igniter, module, fn zipper ->
Igniter.Code.Common.update_all_matches(zipper, &import?(&1, rewriting_module), fn _ ->
{:code,
quote do
use Gettext, backend: unquote(rewriting_module)
end}
end)
end)
end)
end
defp find_use_gettext_modules(igniter) do
Igniter.Code.Module.find_all_matching_modules(igniter, fn _module, zipper ->
case Igniter.Code.Module.move_to_use(zipper, Gettext) do
{:ok, _zipper} -> true
_ -> false
end
end)
end
defp import?(zipper, module) do
Igniter.Code.Function.function_call?(zipper, :import, 1) &&
Igniter.Code.Function.argument_equals?(zipper, 0, module)
end
defp use_gettext_backend(igniter, module) do
Igniter.Code.Module.find_and_update_module!(igniter, module, fn zipper ->
with {:ok, zipper} <- Igniter.Code.Module.move_to_use(zipper, Gettext),
{:ok, zipper} <-
Igniter.Code.Function.update_nth_argument(zipper, 0, fn zipper ->
{:ok, Igniter.Code.Common.replace_code(zipper, Gettext.Backend)}
end) do
{:ok, zipper}
else
_ ->
{:warning, "Failed to update to Gettext.Backend in #{inspect(module)}"}
end
end)
end
end