diff --git a/lib/elixir/lib/code/normalizer.ex b/lib/elixir/lib/code/normalizer.ex index 27ed95fbc3..851e7f1e35 100644 --- a/lib/elixir/lib/code/normalizer.ex +++ b/lib/elixir/lib/code/normalizer.ex @@ -284,7 +284,7 @@ defmodule Code.Normalizer do end meta = - if is_nil(meta[:no_parens]) and is_nil(meta[:closing]) and + if is_nil(meta[:no_parens]) and is_nil(meta[:closing]) and is_nil(meta[:do]) and not Code.Formatter.local_without_parens?(form, arity, state.locals_without_parens) do [closing: [line: meta[:line]]] ++ meta else 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 178165daf1..434ac7dd90 100644 --- a/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs +++ b/lib/elixir/test/elixir/code_normalizer/formatted_ast_test.exs @@ -344,6 +344,22 @@ defmodule Code.Normalizer.FormatterASTTest do end end + describe "preserves user choice on parenthesis" do + test "in functions with do blocks" do + assert_same(~S""" + foo Bar do + :ok + end + """) + + assert_same(~S""" + foo(Bar) do + :ok + end + """) + end + end + describe "preserves formatting for sigils" do test "without interpolation" do assert_same ~S[~s(foo)]