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)
paths
|> Task.async_stream(fn path ->
read_ex_source!(path)
end)
|> Task.async_stream(
fn path ->
read_ex_source!(path)
end,
timeout: :infinity
)
|> Enum.reduce(igniter, fn {:ok, source}, igniter ->
%{igniter | rewrite: Rewrite.put!(igniter.rewrite, source)}
end)

View file

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