Skip to content

Commit 8d50e1f

Browse files
Daniel PerezJosé Valim
authored andcommitted
Improve with/else error message on invalid form (#4847)
Signed-off-by: José Valim <jose.valim@plataformatec.com.br>
1 parent e70d972 commit 8d50e1f

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

lib/elixir/src/elixir_with.erl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ expand(Meta, Args, E) ->
4545

4646
{ECases, EC} = lists:mapfoldl(fun expand/2, E, Cases),
4747
{EDoExpr, _} = elixir_exp:expand(DoExpr, EC),
48-
{EElseExpr, _} = expand_else(ElseExpr, E),
48+
{EElseExpr, _} = expand_else(Meta, ElseExpr, E),
4949
{{with, Meta, ECases ++ [[{do, EDoExpr} | EElseExpr]]}, E}.
5050

5151
expand({'<-', Meta, [Left, Right]}, E) ->
@@ -55,11 +55,14 @@ expand({'<-', Meta, [Left, Right]}, E) ->
5555
expand(X, E) ->
5656
elixir_exp:expand(X, E).
5757

58-
expand_else(KV, E) when is_list(KV) ->
58+
expand_else(_Meta, KV, E) when is_list(KV) ->
5959
{[{do, EClauses}], EC} = elixir_exp_clauses:'case'([], [{do, KV}], E),
6060
{[{else, EClauses}], EC};
61-
expand_else(nil, E) ->
62-
{[], E}.
61+
expand_else(_Meta, nil, E) ->
62+
{[], E};
63+
expand_else(Meta, _KV, E) ->
64+
Message = "expected -> clauses for else in with",
65+
elixir_errors:compile_error(Meta, ?m(E, file), Message, []).
6366

6467
%% Translation
6568

lib/elixir/test/elixir/kernel/with_test.exs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ defmodule Kernel.WithTest do
7575
end
7676
end
7777

78+
test "invalid else form" do
79+
assert_raise CompileError, "nofile:1: expected -> clauses for else in with", fn ->
80+
Code.eval_quoted(quote do: with(_ <- true, do: :ok, else: :error))
81+
end
82+
end
83+
7884
defp four() do
7985
4
8086
end

0 commit comments

Comments
 (0)