summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@plataformatec.com.br>2017-10-09 12:03:54 +0200
committerJosé Valim <jose.valim@plataformatec.com.br>2017-10-09 12:04:08 +0200
commit576f10dd242f0e75f378a8533fbc18ae94d30cbe (patch)
tree63219ec9526ded1f809ac0c4fba8aeac4a141e0e
parent102af89c66c57f92224d3391f3607af6cba8960f (diff)
downloadelixir-576f10dd242f0e75f378a8533fbc18ae94d30cbe.tar.gz
Consistently respect user's choice on clauses
-rw-r--r--lib/elixir/lib/code/formatter.ex12
-rw-r--r--lib/elixir/test/elixir/code_formatter/integration_test.exs8
2 files changed, 16 insertions, 4 deletions
diff --git a/lib/elixir/lib/code/formatter.ex b/lib/elixir/lib/code/formatter.ex
index 4ea4e45bb..6636917db 100644
--- a/lib/elixir/lib/code/formatter.ex
+++ b/lib/elixir/lib/code/formatter.ex
@@ -1374,7 +1374,7 @@ defmodule Code.Formatter do
## Anonymous functions
# fn -> block end
- defp anon_fun_to_algebra([{:"->", meta, [[], body]}], _min_line, max_line, state) do
+ defp anon_fun_to_algebra([{:"->", meta, [[], body]}] = clauses, _min_line, max_line, state) do
min_line = line(meta)
{body_doc, state} = block_to_algebra(body, min_line, max_line, state)
@@ -1383,6 +1383,7 @@ defmodule Code.Formatter do
|> glue(body_doc)
|> nest(2)
|> glue("end")
+ |> maybe_force_clauses(clauses)
|> group()
{doc, state}
@@ -1392,7 +1393,7 @@ defmodule Code.Formatter do
# fn x ->
# y
# end
- defp anon_fun_to_algebra([{:"->", meta, [args, body]}], _min_line, max_line, state) do
+ defp anon_fun_to_algebra([{:"->", meta, [args, body]}] = clauses, _min_line, max_line, state) do
min_line = line(meta)
{args_doc, state} = clause_args_to_algebra(args, min_line, state)
{body_doc, state} = block_to_algebra(body, min_line, max_line, state)
@@ -1405,6 +1406,7 @@ defmodule Code.Formatter do
|> glue(body_doc)
|> nest(2)
|> glue("end")
+ |> maybe_force_clauses(clauses)
|> group()
{doc, state}
@@ -1424,7 +1426,7 @@ defmodule Code.Formatter do
## Type functions
# (-> block)
- defp type_fun_to_algebra([{:"->", meta, [[], body]}], _min_line, max_line, state) do
+ defp type_fun_to_algebra([{:"->", meta, [[], body]}] = clauses, _min_line, max_line, state) do
min_line = line(meta)
{body_doc, state} = block_to_algebra(body, min_line, max_line, state)
@@ -1432,6 +1434,7 @@ defmodule Code.Formatter do
"(-> "
|> concat(nest(body_doc, :cursor))
|> concat(")")
+ |> maybe_force_clauses(clauses)
|> group()
{doc, state}
@@ -1440,7 +1443,7 @@ defmodule Code.Formatter do
# (x -> y)
# (x ->
# y)
- defp type_fun_to_algebra([{:"->", meta, [args, body]}], _min_line, max_line, state) do
+ defp type_fun_to_algebra([{:"->", meta, [args, body]}] = clauses, _min_line, max_line, state) do
min_line = line(meta)
{args_doc, state} = clause_args_to_algebra(args, min_line, state)
{body_doc, state} = block_to_algebra(body, min_line, max_line, state)
@@ -1455,6 +1458,7 @@ defmodule Code.Formatter do
|> group()
|> concat(clause_doc)
|> wrap_in_parens()
+ |> maybe_force_clauses(clauses)
|> group()
{doc, state}
diff --git a/lib/elixir/test/elixir/code_formatter/integration_test.exs b/lib/elixir/test/elixir/code_formatter/integration_test.exs
index dc4704721..09592a3a4 100644
--- a/lib/elixir/test/elixir/code_formatter/integration_test.exs
+++ b/lib/elixir/test/elixir/code_formatter/integration_test.exs
@@ -172,4 +172,12 @@ defmodule Code.Formatter.IntegrationTest do
neighbours = for({_, _} = t <- neighbours, do: t) |> :sets.from_list()
"""
end
+
+ test "long expression with single line anonymous function" do
+ assert_same """
+ for_many(uniq_list_of(integer(1..10000)), fn list ->
+ assert Enum.uniq(list) == list
+ end)
+ """
+ end
end