From 5bf53c8c07a223ec0e745a3b0c2841de471df7b8 Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Mon, 19 Aug 2024 11:10:05 -0400 Subject: [PATCH] fix: ensure no timeout on task async streams --- lib/igniter.ex | 9 +++-- lib/igniter/code/module.ex | 72 +++++++++++++++++++++----------------- 2 files changed, 45 insertions(+), 36 deletions(-) diff --git a/lib/igniter.ex b/lib/igniter.ex index 90cc2ec..a5468de 100644 --- a/lib/igniter.ex +++ b/lib/igniter.ex @@ -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) diff --git a/lib/igniter/code/module.ex b/lib/igniter/code/module.ex index 77ea041..4825529 100644 --- a/lib/igniter/code/module.ex +++ b/lib/igniter/code/module.ex @@ -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)