Skip to content

Commit 691d402

Browse files
committed
Fix Code.Normalizer for keyword operand with :do key (#13250)
1 parent b96211a commit 691d402

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

lib/elixir/lib/code/normalizer.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,10 @@ defmodule Code.Normalizer do
352352
last = List.last(args)
353353

354354
cond do
355+
not allow_keyword?(form, arity) ->
356+
args = normalize_args(args, %{state | parent_meta: meta})
357+
{form, meta, args}
358+
355359
Keyword.has_key?(meta, :do) or match?([{{:__block__, _, [:do]}, _} | _], last) ->
356360
# def foo do :ok end
357361
# def foo, do: :ok
@@ -363,7 +367,7 @@ defmodule Code.Normalizer do
363367
meta = meta ++ [do: [line: line], end: [line: line]]
364368
normalize_kw_blocks(form, meta, args, state)
365369

366-
allow_keyword?(form, arity) ->
370+
true ->
367371
args = normalize_args(args, %{state | parent_meta: meta})
368372
{last_arg, leading_args} = List.pop_at(args, -1, [])
369373

@@ -384,10 +388,6 @@ defmodule Code.Normalizer do
384388
end
385389

386390
{form, meta, leading_args ++ last_args}
387-
388-
true ->
389-
args = normalize_args(args, %{state | parent_meta: meta})
390-
{form, meta, args}
391391
end
392392
end
393393

lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,10 @@ defmodule Code.Normalizer.QuotedASTTest do
539539
"\e[34m[\e[0m\e[32ma:\e[0m \e[33m1\e[0m, \e[32mb:\e[0m \e[33m2\e[0m\e[34m]\e[0m"
540540
end
541541

542+
test "keyword list with :do as operand" do
543+
assert quoted_to_string(quote(do: a = [do: 1])) == "a = [do: 1]"
544+
end
545+
542546
test "interpolation" do
543547
assert quoted_to_string(quote(do: "foo#{bar}baz")) == ~S["foo#{bar}baz"]
544548
end

0 commit comments

Comments
 (0)