Skip to content

Commit 7e42321

Browse files
committed
Improve error message when passing a non-list
1 parent c39b807 commit 7e42321

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

lib/elixir/lib/inspect.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,13 @@ defprotocol Inspect do
235235
end
236236

237237
defp validate_option(option, option_list, fields, module) do
238+
if not is_list(option_list) do
239+
raise ArgumentError,
240+
"invalid value #{Kernel.inspect(option_list)} in #{Kernel.inspect(option)} " <>
241+
"when deriving the Inspect protocol for #{Kernel.inspect(module)} " <>
242+
"(expected a list)"
243+
end
244+
238245
case option_list -- fields do
239246
[] ->
240247
:ok

lib/elixir/test/elixir/inspect_test.exs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,17 @@ defmodule Inspect.MapTest do
715715
end
716716
end
717717

718+
test "passing a non-list to the :only option" do
719+
assert_raise ArgumentError,
720+
"invalid value :not_a_list in :only when deriving the Inspect protocol for Inspect.MapTest.StructInvalidListInOnlyOption (expected a list)",
721+
fn ->
722+
defmodule StructInvalidListInOnlyOption do
723+
@derive {Inspect, only: :not_a_list}
724+
defstruct [:a, :b]
725+
end
726+
end
727+
end
728+
718729
defmodule StructWithExceptOption do
719730
@derive {Inspect, except: [:b, :c]}
720731
defstruct [:a, :b, :c, :d]

0 commit comments

Comments
 (0)