fix: ensure no timeout on task async streams

This commit is contained in:
Zach Daniel 2024-08-19 11:10:05 -04:00
parent 6a86e2d5f6
commit 5bf53c8c07
2 changed files with 45 additions and 36 deletions

View file

@ -108,9 +108,12 @@ defmodule Igniter do
end) end)
paths paths
|> Task.async_stream(fn path -> |> Task.async_stream(
read_ex_source!(path) fn path ->
end) read_ex_source!(path)
end,
timeout: :infinity
)
|> Enum.reduce(igniter, fn {:ok, source}, igniter -> |> Enum.reduce(igniter, fn {:ok, source}, igniter ->
%{igniter | rewrite: Rewrite.put!(igniter.rewrite, source)} %{igniter | rewrite: Rewrite.put!(igniter.rewrite, source)}
end) end)

View file

@ -130,12 +130,15 @@ defmodule Igniter.Code.Module do
igniter igniter
|> Map.get(:rewrite) |> Map.get(:rewrite)
|> Task.async_stream(fn source -> |> Task.async_stream(
{source fn source ->
|> Rewrite.Source.get(:quoted) {source
|> Zipper.zip() |> Rewrite.Source.get(:quoted)
|> move_to_defmodule(module_name), source} |> Zipper.zip()
end) |> move_to_defmodule(module_name), source}
end,
timeout: :infinity
)
|> Enum.find_value({:error, igniter}, fn |> Enum.find_value({:error, igniter}, fn
{:ok, {{:ok, zipper}, source}} -> {:ok, {{:ok, zipper}, source}} ->
{:ok, {igniter, source, zipper}} {:ok, {igniter, source, zipper}}
@ -155,36 +158,39 @@ defmodule Igniter.Code.Module do
matching_modules = matching_modules =
igniter igniter
|> Map.get(:rewrite) |> Map.get(:rewrite)
|> Task.async_stream(fn source -> |> Task.async_stream(
source fn source ->
|> Rewrite.Source.get(:quoted) source
|> Zipper.zip() |> Rewrite.Source.get(:quoted)
|> Zipper.traverse([], fn zipper, acc -> |> Zipper.zip()
case zipper.node do |> Zipper.traverse([], fn zipper, acc ->
{:defmodule, _, [_, _]} -> case zipper.node do
{:ok, mod_zipper} = Igniter.Code.Function.move_to_nth_argument(zipper, 0) {:defmodule, _, [_, _]} ->
{:ok, mod_zipper} = Igniter.Code.Function.move_to_nth_argument(zipper, 0)
module_name = module_name =
mod_zipper mod_zipper
|> Igniter.Code.Common.expand_alias() |> Igniter.Code.Common.expand_alias()
|> Zipper.node() |> Zipper.node()
|> Igniter.Code.Module.to_module_name() |> Igniter.Code.Module.to_module_name()
with module_name when not is_nil(module_name) <- module_name, with module_name when not is_nil(module_name) <- module_name,
{:ok, do_zipper} <- Igniter.Code.Common.move_to_do_block(zipper), {:ok, do_zipper} <- Igniter.Code.Common.move_to_do_block(zipper),
true <- predicate.(module_name, do_zipper) do true <- predicate.(module_name, do_zipper) do
{zipper, [module_name | acc]} {zipper, [module_name | acc]}
else else
_ -> _ ->
{zipper, acc} {zipper, acc}
end end
_ -> _ ->
{zipper, acc} {zipper, acc}
end end
end) end)
|> elem(1) |> elem(1)
end) end,
timeout: :infinity
)
|> Enum.flat_map(fn {:ok, v} -> |> Enum.flat_map(fn {:ok, v} ->
v v
end) end)