Skip to content

Commit 03cec70

Browse files
Allow true to be used as an @impl value (#385)
Co-authored-by: Angelika Tyborska <angelikatyborska@fastmail.com>
1 parent 6171961 commit 03cec70

4 files changed

Lines changed: 55 additions & 4 deletions

File tree

elixir

Submodule elixir updated 89 files

lib/elixir_analyzer/test_suite/take_a_number_deluxe.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ defmodule ElixirAnalyzer.TestSuite.TakeANumberDeluxe do
4242
{:@, _, [{:impl, _, [{:__aliases__, _, [:GenServer]}]}]} ->
4343
%{acc | impl?: true}
4444

45+
{:@, _, [{:impl, _, [true]}]} ->
46+
%{acc | impl?: true}
47+
4548
{op, _, [{function_name, _, _} | _]} when op in @def_ops ->
4649
acc =
4750
cond do

test/elixir_analyzer/test_suite/file_sniffer_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ defmodule ElixirAnalyzer.ExerciseTest.FileSnifferTest do
3030
binary_type = type_from_binary(binary)
3131
extension_type = type_from_extension(extension)
3232

33-
if binary_type == extension_type do
33+
if binary_type == extension_type and not is_nil(binary_type) do
3434
{:ok, binary_type}
3535
else
3636
{:error, "Warning, file format and file extension do not match."}

test/elixir_analyzer/test_suite/take_a_number_deluxe_test.exs

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,36 @@ defmodule ElixirAnalyzer.TestSuite.TakeANumberDeluxeTest do
147147
end
148148
end
149149

150-
test_exercise_analysis "value must be a module",
150+
test_exercise_analysis "module value not `GenServer`",
151151
comments_include: [Constants.take_a_number_deluxe_annotate_impl_genserver()] do
152152
defmodule TakeANumberDeluxe do
153153
use GenServer
154154

155-
@impl true
155+
@impl NotGenServer
156+
def init(init_arg) do
157+
min_number = Keyword.get(init_arg, :min_number)
158+
max_number = Keyword.get(init_arg, :max_number)
159+
auto_shutdown_timeout = Keyword.get(init_arg, :auto_shutdown_timeout, :infinity)
160+
161+
case TakeANumberDeluxe.State.new(min_number, max_number, auto_shutdown_timeout) do
162+
{:ok, state} -> {:ok, state, auto_shutdown_timeout}
163+
{:error, error} -> {:stop, error}
164+
end
165+
end
166+
167+
@impl NotGenServer
168+
def handle_call(:report_state, _from, state) do
169+
{:reply, state, state, state.auto_shutdown_timeout}
170+
end
171+
end
172+
end
173+
174+
test_exercise_analysis "boolean value not `true`",
175+
comments_include: [Constants.take_a_number_deluxe_annotate_impl_genserver()] do
176+
defmodule TakeANumberDeluxe do
177+
use GenServer
178+
179+
@impl false
156180
def init(init_arg) do
157181
min_number = Keyword.get(init_arg, :min_number)
158182
max_number = Keyword.get(init_arg, :max_number)
@@ -164,7 +188,31 @@ defmodule ElixirAnalyzer.TestSuite.TakeANumberDeluxeTest do
164188
end
165189
end
166190

191+
@impl false
192+
def handle_call(:report_state, _from, state) do
193+
{:reply, state, state, state.auto_shutdown_timeout}
194+
end
195+
end
196+
end
197+
198+
test_exercise_analysis "value can be `GenServer` or `true`",
199+
comments_exclude: [Constants.take_a_number_deluxe_annotate_impl_genserver()] do
200+
defmodule TakeANumberDeluxe do
201+
use GenServer
202+
167203
@impl true
204+
def init(init_arg) do
205+
min_number = Keyword.get(init_arg, :min_number)
206+
max_number = Keyword.get(init_arg, :max_number)
207+
auto_shutdown_timeout = Keyword.get(init_arg, :auto_shutdown_timeout, :infinity)
208+
209+
case TakeANumberDeluxe.State.new(min_number, max_number, auto_shutdown_timeout) do
210+
{:ok, state} -> {:ok, state, auto_shutdown_timeout}
211+
{:error, error} -> {:stop, error}
212+
end
213+
end
214+
215+
@impl GenServer
168216
def handle_call(:report_state, _from, state) do
169217
{:reply, state, state, state.auto_shutdown_timeout}
170218
end

0 commit comments

Comments
 (0)