Skip to content

Commit 91feadd

Browse files
authored
Implement dbg for unless/2 expressions (#13620)
1 parent c2c4cad commit 91feadd

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

lib/elixir/lib/macro.ex

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2642,16 +2642,17 @@ defmodule Macro do
26422642
end
26432643
end
26442644

2645-
defp dbg_ast_to_debuggable({:if, meta, [condition_ast, clauses]} = ast, env) do
2646-
case Macro.Env.lookup_import(env, {:if, 2}) do
2645+
defp dbg_ast_to_debuggable({op, meta, [condition_ast, clauses]} = ast, env)
2646+
when op in [:if, :unless] do
2647+
case Macro.Env.lookup_import(env, {op, 2}) do
26472648
[macro: Kernel] ->
26482649
condition_result_var = unique_var(:condition_result, __MODULE__)
26492650

26502651
quote do
26512652
unquote(condition_result_var) = unquote(condition_ast)
2652-
result = unquote({:if, meta, [condition_result_var, clauses]})
2653+
result = unquote({op, meta, [condition_result_var, clauses]})
26532654

2654-
{:if, unquote(escape(ast)), unquote(escape(condition_ast)),
2655+
{unquote(op), unquote(escape(ast)), unquote(escape(condition_ast)),
26552656
unquote(condition_result_var), result}
26562657
end
26572658

@@ -2774,15 +2775,18 @@ defmodule Macro do
27742775
end
27752776

27762777
defp dbg_format_ast_to_debug(
2777-
{:if, ast, condition_ast, condition_result, result},
2778+
{op, ast, condition_ast, condition_result, result},
27782779
options
2779-
) do
2780+
)
2781+
when op in [:if, :unless] do
2782+
op_name = String.capitalize(Atom.to_string(op))
2783+
27802784
formatted = [
2781-
dbg_maybe_underline("If condition", options),
2785+
dbg_maybe_underline("#{op_name} condition", options),
27822786
":\n",
27832787
dbg_format_ast_with_value(condition_ast, condition_result, options),
27842788
?\n,
2785-
dbg_maybe_underline("If expression", options),
2789+
dbg_maybe_underline("#{op_name} expression", options),
27862790
":\n",
27872791
dbg_format_ast_with_value(ast, result, options)
27882792
]

lib/elixir/test/elixir/macro_test.exs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ defmodule MacroTest do
542542
"""
543543
end
544544

545-
test "if statement" do
545+
test "if expression" do
546546
x = true
547547
map = %{a: 5, b: 1}
548548

@@ -572,7 +572,7 @@ defmodule MacroTest do
572572
"""
573573
end
574574

575-
test "if statement without else" do
575+
test "if expression without else" do
576576
x = true
577577
map = %{a: 5, b: 1}
578578

@@ -618,6 +618,36 @@ defmodule MacroTest do
618618
"""
619619
end
620620

621+
test "unless expression" do
622+
x = false
623+
map = %{a: 5, b: 1}
624+
625+
{result, formatted} =
626+
dbg_format(
627+
unless true and x do
628+
map[:a] * 2
629+
else
630+
map[:b]
631+
end
632+
)
633+
634+
assert result == 10
635+
636+
assert formatted =~ "macro_test.exs"
637+
638+
assert formatted =~ """
639+
Unless condition:
640+
true and x #=> false
641+
642+
Unless expression:
643+
unless true and x do
644+
map[:a] * 2
645+
else
646+
map[:b]
647+
end #=> 10
648+
"""
649+
end
650+
621651
test "with \"syntax_colors: []\" it doesn't print any color sequences" do
622652
{_result, formatted} = dbg_format("hello")
623653
refute formatted =~ "\e["

0 commit comments

Comments
 (0)