summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Hanberg <mitch@mitchellhanberg.com>2018-10-25 13:37:04 -0400
committerJosé Valim <jose.valim@gmail.com>2018-10-25 19:37:04 +0200
commit749d89139cafbceda339901e7035d3177a9ea9ac (patch)
treed2eaa4d02662ad32763ff8ca4d952ac1e1cbbb4d
parent64adfcce6e2b04feafb6f14385075d264d06d156 (diff)
downloadelixir-749d89139cafbceda339901e7035d3177a9ea9ac.tar.gz
Improve error message for invalid quoted expression (#8336)
-rw-r--r--lib/elixir/src/elixir_expand.erl7
-rw-r--r--lib/elixir/test/elixir/kernel/errors_test.exs2
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/elixir/src/elixir_expand.erl b/lib/elixir/src/elixir_expand.erl
index bfb7699a5..9ec12bd3b 100644
--- a/lib/elixir/src/elixir_expand.erl
+++ b/lib/elixir/src/elixir_expand.erl
@@ -1116,7 +1116,12 @@ format_error({invalid_function_call, Expr}) ->
format_error({invalid_call, Call}) ->
io_lib:format("invalid call ~ts", ['Elixir.Macro':to_string(Call)]);
format_error({invalid_quoted_expr, Expr}) ->
- io_lib:format("invalid quoted expression: ~ts", ['Elixir.Kernel':inspect(Expr, [])]);
+ Message =
+ "invalid quoted expression: ~ts\n\n"
+ "Please make sure your quoted expressions are made of valid AST nodes."
+ "If you would like to introduce a value into the AST, such as a four-element"
+ "tuple or a map, make sure to call `Macro.escape/1` before",
+ io_lib:format(Message, ['Elixir.Kernel':inspect(Expr, [])]);
format_error({invalid_local_invocation, Context, {Name, _, Args} = Call}) ->
Message =
"cannot find or invoke local ~ts/~B inside ~ts. "
diff --git a/lib/elixir/test/elixir/kernel/errors_test.exs b/lib/elixir/test/elixir/kernel/errors_test.exs
index 47cf419c4..4013c231b 100644
--- a/lib/elixir/test/elixir/kernel/errors_test.exs
+++ b/lib/elixir/test/elixir/kernel/errors_test.exs
@@ -706,7 +706,7 @@ defmodule Kernel.ErrorsTest do
test "invalid macro" do
assert_eval_raise CompileError,
- "nofile: invalid quoted expression: {:foo, :bar, :baz, :bat}",
+ ~r"nofile: invalid quoted expression: {:foo, :bar, :baz, :bat}",
'''
defmodule Kernel.ErrorsTest.InvalidMacro do
defmacrop oops do