From 956afd6c7e78c4289196056ee8fd2fa14ed6113e Mon Sep 17 00:00:00 2001 From: pnezis Date: Mon, 16 Mar 2026 18:20:43 +0200 Subject: [PATCH] Raise `ArgumentError` in `Keyword.from_keys/2` for non-atom keys --- lib/elixir/lib/keyword.ex | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/elixir/lib/keyword.ex b/lib/elixir/lib/keyword.ex index 418273e9efe..90d544b51b2 100644 --- a/lib/elixir/lib/keyword.ex +++ b/lib/elixir/lib/keyword.ex @@ -119,14 +119,23 @@ defmodule Keyword do iex> Keyword.from_keys([:foo, :bar, :baz], :atom) [foo: :atom, bar: :atom, baz: :atom] + iex> Keyword.from_keys([], :atom) [] + iex> Keyword.from_keys(["foo"], :bar) + ** (ArgumentError) expected a list of atoms as keys, got: "foo" """ @doc since: "1.14.0" @spec from_keys([key], value) :: t(value) def from_keys(keys, value) when is_list(keys) do - :lists.map(&{&1, value}, keys) + :lists.map( + fn + key when is_atom(key) -> {key, value} + other -> raise ArgumentError, "expected a list of atoms as keys, got: #{inspect(other)}" + end, + keys + ) end @doc """