diff options
author | Mitchell Hanberg <mitch@mitchellhanberg.com> | 2018-10-25 13:37:04 -0400 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2018-10-25 19:37:04 +0200 |
commit | 749d89139cafbceda339901e7035d3177a9ea9ac (patch) | |
tree | d2eaa4d02662ad32763ff8ca4d952ac1e1cbbb4d | |
parent | 64adfcce6e2b04feafb6f14385075d264d06d156 (diff) | |
download | elixir-749d89139cafbceda339901e7035d3177a9ea9ac.tar.gz |
Improve error message for invalid quoted expression (#8336)
-rw-r--r-- | lib/elixir/src/elixir_expand.erl | 7 | ||||
-rw-r--r-- | lib/elixir/test/elixir/kernel/errors_test.exs | 2 |
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 |