diff options
author | Dorgan <dorgandash@gmail.com> | 2021-12-08 19:51:26 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-08 23:51:26 +0100 |
commit | 2c8a9ddf53ab1a6847d07f14796fb96aa6c436b7 (patch) | |
tree | 86b375cd931541bae695bf108146db2d1f6510e7 | |
parent | 611139ef3ea368f21956451979d60aaecbc81333 (diff) | |
download | elixir-2c8a9ddf53ab1a6847d07f14796fb96aa6c436b7.tar.gz |
Fix formatting of lists in module attribues (#11462)
-rw-r--r-- | lib/elixir/lib/code/normalizer.ex | 13 | ||||
-rw-r--r-- | lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs | 6 | ||||
-rw-r--r-- | lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs | 20 |
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 |