Skip to content

Commit b528280

Browse files
authored
Disable migrate_unless within defmacro and remove dbg for unless (#13850)
* Disable migrate_unless within defmacro * Delete test for unless expression dbg * Remove dbg support for unless
1 parent 4126cdd commit b528280

File tree

3 files changed

+18
-42
lines changed

3 files changed

+18
-42
lines changed

lib/elixir/lib/code/formatter.ex

+10
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,16 @@ defmodule Code.Formatter do
487487
binary_op_to_algebra(:in, "not in", meta, left, right, context, state)
488488
end
489489

490+
# disable migrate_unless within defmacro
491+
defp quoted_to_algebra(
492+
{atom, _, [{:unless, _, _}, _]} = ast,
493+
context,
494+
%{migrate_unless: true} = state
495+
)
496+
when atom in [:defmacro, :defmacrop] do
497+
quoted_to_algebra(ast, context, %{state | migrate_unless: false})
498+
end
499+
490500
# rewrite unless as if!
491501
defp quoted_to_algebra(
492502
{:unless, meta, [condition, block]},

lib/elixir/lib/macro.ex

+8-12
Original file line numberDiff line numberDiff line change
@@ -2652,17 +2652,16 @@ defmodule Macro do
26522652
end
26532653
end
26542654

2655-
defp dbg_ast_to_debuggable({op, meta, [condition_ast, clauses]} = ast, env)
2656-
when op in [:if, :unless] do
2657-
case Macro.Env.lookup_import(env, {op, 2}) do
2655+
defp dbg_ast_to_debuggable({:if, meta, [condition_ast, clauses]} = ast, env) do
2656+
case Macro.Env.lookup_import(env, {:if, 2}) do
26582657
[macro: Kernel] ->
26592658
condition_result_var = unique_var(:condition_result, __MODULE__)
26602659

26612660
quote do
26622661
unquote(condition_result_var) = unquote(condition_ast)
2663-
result = unquote({op, meta, [condition_result_var, clauses]})
2662+
result = unquote({:if, meta, [condition_result_var, clauses]})
26642663

2665-
{unquote(op), unquote(escape(ast)), unquote(escape(condition_ast)),
2664+
{:if, unquote(escape(ast)), unquote(escape(condition_ast)),
26662665
unquote(condition_result_var), result}
26672666
end
26682667

@@ -2809,18 +2808,15 @@ defmodule Macro do
28092808
end
28102809

28112810
defp dbg_format_ast_to_debug(
2812-
{op, ast, condition_ast, condition_result, result},
2811+
{:if, ast, condition_ast, condition_result, result},
28132812
options
2814-
)
2815-
when op in [:if, :unless] do
2816-
op_name = String.capitalize(Atom.to_string(op))
2817-
2813+
) do
28182814
formatted = [
2819-
dbg_maybe_underline("#{op_name} condition", options),
2815+
dbg_maybe_underline("If condition", options),
28202816
":\n",
28212817
dbg_format_ast_with_value(condition_ast, condition_result, options),
28222818
?\n,
2823-
dbg_maybe_underline("#{op_name} expression", options),
2819+
dbg_maybe_underline("If expression", options),
28242820
":\n",
28252821
dbg_format_ast_with_value(ast, result, options)
28262822
]

lib/elixir/test/elixir/macro_test.exs

-30
Original file line numberDiff line numberDiff line change
@@ -652,36 +652,6 @@ defmodule MacroTest do
652652
"""
653653
end
654654

655-
test "unless expression" do
656-
x = false
657-
map = %{a: 5, b: 1}
658-
659-
{result, formatted} =
660-
dbg_format(
661-
unless true and x do
662-
map[:a] * 2
663-
else
664-
map[:b]
665-
end
666-
)
667-
668-
assert result == 10
669-
670-
assert formatted =~ "macro_test.exs"
671-
672-
assert formatted =~ """
673-
Unless condition:
674-
true and x #=> false
675-
676-
Unless expression:
677-
unless true and x do
678-
map[:a] * 2
679-
else
680-
map[:b]
681-
end #=> 10
682-
"""
683-
end
684-
685655
test "with \"syntax_colors: []\" it doesn't print any color sequences" do
686656
{_result, formatted} = dbg_format("hello")
687657
refute formatted =~ "\e["

0 commit comments

Comments
 (0)