diff options
author | José Valim <jose.valim@plataformatec.com.br> | 2017-10-09 12:03:54 +0200 |
---|---|---|
committer | José Valim <jose.valim@plataformatec.com.br> | 2017-10-09 12:04:08 +0200 |
commit | 576f10dd242f0e75f378a8533fbc18ae94d30cbe (patch) | |
tree | 63219ec9526ded1f809ac0c4fba8aeac4a141e0e | |
parent | 102af89c66c57f92224d3391f3607af6cba8960f (diff) | |
download | elixir-576f10dd242f0e75f378a8533fbc18ae94d30cbe.tar.gz |
Consistently respect user's choice on clauses
-rw-r--r-- | lib/elixir/lib/code/formatter.ex | 12 | ||||
-rw-r--r-- | lib/elixir/test/elixir/code_formatter/integration_test.exs | 8 |
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 |