Skip to content

Commit 4945153

Browse files
committed
if dbg only when if imported from Kernel
1 parent 57c58c7 commit 4945153

File tree

2 files changed

+45
-11
lines changed

2 files changed

+45
-11
lines changed

lib/elixir/lib/macro.ex

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2552,13 +2552,13 @@ defmodule Macro do
25522552
header = dbg_format_header(env)
25532553

25542554
quote do
2555-
to_debug = unquote(dbg_ast_to_debuggable(code))
2555+
to_debug = unquote(dbg_ast_to_debuggable(code, env))
25562556
unquote(__MODULE__).__dbg__(unquote(header), to_debug, unquote(options))
25572557
end
25582558
end
25592559

25602560
# Pipelines.
2561-
defp dbg_ast_to_debuggable({:|>, _meta, _args} = pipe_ast) do
2561+
defp dbg_ast_to_debuggable({:|>, _meta, _args} = pipe_ast, _env) do
25622562
value_var = unique_var(:value, __MODULE__)
25632563
values_acc_var = unique_var(:values, __MODULE__)
25642564

@@ -2591,7 +2591,7 @@ defmodule Macro do
25912591
dbg_decomposed_binary_operators = [:&&, :||, :and, :or]
25922592

25932593
# Logic operators.
2594-
defp dbg_ast_to_debuggable({op, _meta, [_left, _right]} = ast)
2594+
defp dbg_ast_to_debuggable({op, _meta, [_left, _right]} = ast, _env)
25952595
when op in unquote(dbg_decomposed_binary_operators) do
25962596
acc_var = unique_var(:acc, __MODULE__)
25972597
result_var = unique_var(:result, __MODULE__)
@@ -2603,7 +2603,7 @@ defmodule Macro do
26032603
end
26042604
end
26052605

2606-
defp dbg_ast_to_debuggable({:case, _meta, [expr, [do: clauses]]} = ast) do
2606+
defp dbg_ast_to_debuggable({:case, _meta, [expr, [do: clauses]]} = ast, _env) do
26072607
clauses_returning_index =
26082608
Enum.with_index(clauses, fn {:->, meta, [left, right]}, index ->
26092609
{:->, meta, [left, {right, index}]}
@@ -2621,7 +2621,7 @@ defmodule Macro do
26212621
end
26222622
end
26232623

2624-
defp dbg_ast_to_debuggable({:cond, _meta, [[do: clauses]]} = ast) do
2624+
defp dbg_ast_to_debuggable({:cond, _meta, [[do: clauses]]} = ast, _env) do
26252625
modified_clauses =
26262626
Enum.with_index(clauses, fn {:->, _meta, [[left], right]}, index ->
26272627
hd(
@@ -2642,17 +2642,25 @@ defmodule Macro do
26422642
end
26432643
end
26442644

2645-
defp dbg_ast_to_debuggable({:if, _meta, [condition_ast, _clauses]} = ast) do
2646-
quote do
2647-
condition_result = unquote(condition_ast)
2648-
result = unquote(ast)
2645+
defp dbg_ast_to_debuggable({:if, _meta, [condition_ast, _clauses]} = ast, env) do
2646+
if get_in(env.macros, [
2647+
Access.find(&(elem(&1, 0) == Kernel)),
2648+
Access.elem(1),
2649+
:if
2650+
]) == 2 do
2651+
quote do
2652+
condition_result = unquote(condition_ast)
2653+
result = unquote(ast)
26492654

2650-
{:if, unquote(escape(ast)), unquote(escape(condition_ast)), condition_result, result}
2655+
{:if, unquote(escape(ast)), unquote(escape(condition_ast)), condition_result, result}
2656+
end
2657+
else
2658+
quote do: {:value, unquote(escape(ast)), unquote(ast)}
26512659
end
26522660
end
26532661

26542662
# Any other AST.
2655-
defp dbg_ast_to_debuggable(ast) do
2663+
defp dbg_ast_to_debuggable(ast, _env) do
26562664
quote do: {:value, unquote(escape(ast)), unquote(ast)}
26572665
end
26582666

lib/elixir/test/elixir/macro_test.exs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ defmodule Macro.ExternalTest do
1515
end
1616
end
1717

18+
defmodule CustomIf do
19+
def if(_cond, _expr) do
20+
"custom if result"
21+
end
22+
end
23+
1824
defmodule MacroTest do
1925
use ExUnit.Case, async: true
2026
doctest Macro
@@ -592,6 +598,26 @@ defmodule MacroTest do
592598
"""
593599
end
594600

601+
test "custom if definition" do
602+
import Kernel, except: [if: 2]
603+
import CustomIf, only: [if: 2]
604+
605+
{result, formatted} =
606+
dbg_format(
607+
if true do
608+
"something"
609+
end
610+
)
611+
612+
assert result == "custom if result"
613+
614+
assert formatted =~ """
615+
if true do
616+
"something"
617+
end #=> "custom if result"
618+
"""
619+
end
620+
595621
test "with \"syntax_colors: []\" it doesn't print any color sequences" do
596622
{_result, formatted} = dbg_format("hello")
597623
refute formatted =~ "\e["

0 commit comments

Comments
 (0)