summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDorgan <dorgandash@gmail.com>2021-12-08 19:51:26 -0300
committerGitHub <noreply@github.com>2021-12-08 23:51:26 +0100
commit2c8a9ddf53ab1a6847d07f14796fb96aa6c436b7 (patch)
tree86b375cd931541bae695bf108146db2d1f6510e7
parent611139ef3ea368f21956451979d60aaecbc81333 (diff)
downloadelixir-2c8a9ddf53ab1a6847d07f14796fb96aa6c436b7.tar.gz
Fix formatting of lists in module attribues (#11462)
-rw-r--r--lib/elixir/lib/code/normalizer.ex13
-rw-r--r--lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs6
-rw-r--r--lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs20
3 files changed, 35 insertions, 4 deletions
diff --git a/lib/elixir/lib/code/normalizer.ex b/lib/elixir/lib/code/normalizer.ex
index 89a6e8dcf..12e365717 100644
--- a/lib/elixir/lib/code/normalizer.ex
+++ b/lib/elixir/lib/code/normalizer.ex
@@ -200,10 +200,15 @@ defmodule Code.Normalizer do
# Module attributes
defp do_normalize({:@, meta, [{name, name_meta, [value]}]}, state) do
value =
- if is_list(value) do
- normalize_kw_args(value, state, false)
- else
- do_normalize(value, state)
+ cond do
+ keyword?(value) ->
+ normalize_kw_args(value, state, true)
+
+ is_list(value) ->
+ normalize_literal(value, meta, state)
+
+ true ->
+ do_normalize(value, state)
end
{:@, meta, [{name, name_meta, [value]}]}
diff --git a/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs b/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs
index ff425cb25..bfa77f42c 100644
--- a/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs
+++ b/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs
@@ -164,6 +164,12 @@ defmodule Code.Normalizer.FormatterASTTest do
end
end
+ describe "lists" do
+ test "on module attribute" do
+ assert_same ~S"@foo [1]"
+ end
+ end
+
describe "charlists" do
test "without escapes" do
assert_same ~S['']
diff --git a/lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs b/lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs
index 685cc4c85..80ba634c8 100644
--- a/lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs
+++ b/lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs
@@ -542,6 +542,26 @@ defmodule Code.Normalizer.QuotedASTTest do
assert quoted_to_string(quote(do: foo(catch: a))) == "foo(catch: a)"
assert quoted_to_string(quote(do: foo |> [bar: :baz])) == "foo |> [bar: :baz]"
end
+
+ test "list in module attribute" do
+ assert quoted_to_string(
+ quote do
+ @foo [1]
+ end
+ ) == "@foo [1]"
+
+ assert quoted_to_string(
+ quote do
+ @foo [foo: :bar]
+ end
+ ) == "@foo foo: :bar"
+
+ assert quoted_to_string(
+ quote do
+ @foo [1, foo: :bar]
+ end
+ ) == "@foo [1, foo: :bar]"
+ end
end
describe "quoted_to_algebra/2 escapes" do