From 689bb36dab85b6cc72a7b70bdf33ca055bc4589e Mon Sep 17 00:00:00 2001 From: Dorgan Date: Tue, 25 May 2021 15:31:07 -0300 Subject: [PATCH] Prevent 2-tuples from being normalized twice (#11007) --- lib/elixir/lib/code/normalizer.ex | 24 +++++++------------ .../code_normalizer/formatted_ast_test.exs | 10 ++++++++ 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/elixir/lib/code/normalizer.ex b/lib/elixir/lib/code/normalizer.ex index be01fc688e..a18e20ca5d 100644 --- a/lib/elixir/lib/code/normalizer.ex +++ b/lib/elixir/lib/code/normalizer.ex @@ -28,22 +28,6 @@ defmodule Code.Normalizer do quoted end - # Normalized single-expression blocks - # For example: - # - # def deps() do - # [ - # {:dep, "~> 1.2"} - # ] - # end - defp do_normalize({:__block__, meta, [[{:__block__, inner_meta, args}]]}, state) do - meta = patch_meta_line(meta, state.parent_meta) - inner_meta = patch_meta_line(inner_meta, meta) - - {:__block__, meta, - [[{:__block__, inner_meta, normalize_args(args, %{state | parent_meta: inner_meta})}]]} - end - # Normalized lists defp do_normalize({:__block__, meta, [list]} = quoted, state) when is_list(list) do @@ -58,6 +42,14 @@ defmodule Code.Normalizer do end end + # Normalized 2-tuples + defp do_normalize({:__block__, meta, [{left, right}]}, state) do + meta = patch_meta_line(meta, state) + left = do_normalize(left, %{state | parent_meta: meta}) + right = do_normalize(right, %{state | parent_meta: meta}) + {:__block__, meta, [{left, right}]} + end + # Only normalize the first argument of an alias if it's not an atom defp do_normalize({:__aliases__, meta, [first | rest]}, state) when not is_atom(first) do meta = patch_meta_line(meta, state.parent_meta) 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 55e77f9341..178165daf1 100644 --- a/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs +++ b/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs @@ -478,6 +478,16 @@ defmodule Code.Normalizer.FormatterASTTest do defp sample do [ # comment + {:a, "~> 1.2"} + ] + end + """ + + assert_same ~S""" + defp sample do + [ + # comment + {:a, "~> 1.2"}, {:b, "~> 1.2"} ] end