Skip to content

Commit f10aea2

Browse files
committed
Add pipe and with tests. Fix with
1 parent aae50d6 commit f10aea2

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

lib/gradient/elixir_expr.ex

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ defmodule Gradient.ElixirExpr do
103103
end
104104

105105
def pp_expr({:call, _, {:remote, _, {:atom, _, :erlang}, {:atom, _, :error}}, [arg]}) do
106-
"raise " <> pp_raise_args(arg)
106+
"raise " <> pp_raise_arg(arg)
107107
end
108108

109109
def pp_expr({:call, _, name, args}) do
@@ -155,9 +155,9 @@ defmodule Gradient.ElixirExpr do
155155
"{" <> elements_str <> "}"
156156
end
157157

158-
def pp_expr({:var, _, t}) do
158+
def pp_expr({:var, anno, t}) do
159159
case Atom.to_string(t) |> String.split("@") |> List.first() do
160-
"_" -> "_"
160+
"_" -> if :erl_anno.generated(anno), do: "_gen", else: "_"
161161
"_" <> name -> name
162162
name -> name
163163
end
@@ -456,20 +456,24 @@ defmodule Gradient.ElixirExpr do
456456
end
457457
end
458458

459-
defp pp_raise_args({:call, _, {:remote, _, error_type, {:atom, _, :exception}}, [{nil, _}]}) do
459+
defp pp_raise_arg({:call, _, {:remote, _, error_type, {:atom, _, :exception}}, [{nil, _}]}) do
460460
pp_expr(error_type)
461461
end
462462

463-
defp pp_raise_args(
463+
defp pp_raise_arg(
464464
{:call, _, {:remote, _, {:atom, _, RuntimeError}, {:atom, _, :exception}}, [arg]}
465465
) do
466466
pp_expr(arg)
467467
end
468468

469-
defp pp_raise_args({:call, _, {:remote, _, error_type, {:atom, _, :exception}}, [arg]}) do
469+
defp pp_raise_arg({:call, _, {:remote, _, error_type, {:atom, _, :exception}}, [arg]}) do
470470
pp_expr(error_type) <> ", " <> pp_expr(arg)
471471
end
472472

473+
defp pp_raise_arg(arg) do
474+
pp_expr(arg)
475+
end
476+
473477
defp try_int_list_({nil, _}), do: []
474478
defp try_int_list_({:cons, _, {:integer, _, val}, t}), do: [val | try_int_list_(t)]
475479
defp try_int_list_(_), do: throw(nil)

test/gradient/elixir_expr_test.exs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,37 @@ defmodule Gradient.ElixirExprTest do
9696
assert "receive do {:hello, msg} -> msg after 1000 -> \"nothing happened\" end" == actual
9797
end
9898

99+
test "call pipe" do
100+
actual =
101+
elixir_to_ast do
102+
[1, 2, 3]
103+
|> Enum.map(fn x -> x + 1 end)
104+
|> Enum.map(&(&1 + 1))
105+
end
106+
|> ElixirExpr.pp_expr()
107+
108+
assert "Enum.map(Enum.map([1, 2, 3], fn x -> x + 1 end), fn _ -> _ + 1 end)" == actual
109+
end
110+
111+
test "with" do
112+
actual =
113+
elixir_to_ast do
114+
map = %{a: 12, b: 0}
115+
116+
with {:ok, a} <- Map.fetch(map, :a),
117+
{:ok, b} <- Map.fetch(map, :b) do
118+
a + b
119+
else
120+
:error ->
121+
0
122+
end
123+
end
124+
|> ElixirExpr.pp_expr()
125+
126+
assert "map = %{a: 12, b: 0}; case :maps.find(:a, map) do {:ok, a} -> case :maps.find(:b, map) do {:ok, b} -> a + b; _gen -> case _gen do :error -> 0; _gen -> raise {:with_clause, _gen} end end; _gen -> case _gen do :error -> 0; _gen -> raise {:with_clause, _gen} end end" ==
127+
actual
128+
end
129+
99130
test "try reraise" do
100131
actual =
101132
elixir_to_ast do

0 commit comments

Comments
 (0)