From 7fcfbb872253761f07fbfba9fe6ae667820223d0 Mon Sep 17 00:00:00 2001 From: Jean-Francois Cloutier Date: Mon, 10 Jan 2022 15:18:02 -0500 Subject: [PATCH 1/2] Fix credo warnings on using apply/3 --- lib/jackalope/session.ex | 2 +- lib/jackalope/tortoise_client.ex | 2 +- lib/jackalope/tortoise_handler.ex | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/jackalope/session.ex b/lib/jackalope/session.ex index 736b07c..4a40d20 100644 --- a/lib/jackalope/session.ex +++ b/lib/jackalope/session.ex @@ -202,7 +202,7 @@ defmodule Jackalope.Session do # drop the message, it is outside of the time to live if function_exported?(state.handler, :handle_error, 1) do reason = {:publish_error, cmd, :ttl_expired} - apply(state.handler, :handle_error, [reason]) + state.handler.handle_error(reason) end {:noreply, state, {:continue, :consume_work_list}} diff --git a/lib/jackalope/tortoise_client.ex b/lib/jackalope/tortoise_client.ex index 7a30d9e..d231e7e 100644 --- a/lib/jackalope/tortoise_client.ex +++ b/lib/jackalope/tortoise_client.ex @@ -213,7 +213,7 @@ defmodule Jackalope.TortoiseClient do {:error, reason} -> if function_exported?(state.handler, :handle_error, 1) do reason = {:publish_error, {topic, payload, opts}, reason} - apply(state.handler, :handle_error, [reason]) + state.handler.handle_error(reason) end {:error, reason} diff --git a/lib/jackalope/tortoise_handler.ex b/lib/jackalope/tortoise_handler.ex index fd42148..1dc566c 100644 --- a/lib/jackalope/tortoise_handler.ex +++ b/lib/jackalope/tortoise_handler.ex @@ -22,7 +22,7 @@ defmodule Jackalope.TortoiseHandler do @impl Tortoise311.Handler def last_will(%State{} = state) do - last_will = apply(state.handler, :last_will, []) || state.default_last_will + last_will = state.handler.last_will() || state.default_last_will packaged_last_will = package_last_will(last_will) {{:ok, packaged_last_will}, state} @@ -34,7 +34,7 @@ defmodule Jackalope.TortoiseHandler do Session.report_connection_status(status) if function_exported?(state.handler, :connection, 1) do - _ignored = apply(state.handler, :connection, [status]) + _ignored = state.handler.connection(status) end {:ok, state} @@ -43,7 +43,7 @@ defmodule Jackalope.TortoiseHandler do @impl Tortoise311.Handler def subscription(status, topic_filter, %State{} = state) when status in [:up, :down] do if function_exported?(state.handler, :subscription, 2) do - _ignored = apply(state.handler, :subscription, [status, topic_filter]) + _ignored = state.handler.subscription(status, topic_filter) end {:ok, state} @@ -54,7 +54,7 @@ defmodule Jackalope.TortoiseHandler do case Jason.decode(payload_string) do {:ok, payload} -> # Dispatch to the handle message callback on the jackalope handler - apply(handler, :handle_message, [topic_levels, payload]) + handler.handle_message(topic_levels, payload) {:ok, state} {:error, reason} -> @@ -62,7 +62,7 @@ defmodule Jackalope.TortoiseHandler do # implemented if function_exported?(handler, :handle_error, 1) do reason = {:payload_decode_error, reason, {topic_levels, payload_string}} - apply(handler, :handle_error, [reason]) + handler.handle_error(reason) end {:ok, state} From b1251c1b3db71073fc12442cc72d23d9fc1456c2 Mon Sep 17 00:00:00 2001 From: Jean-Francois Cloutier Date: Mon, 10 Jan 2022 15:24:58 -0500 Subject: [PATCH 2/2] Enable credo strict module layout --- .credo.exs | 4 +++- lib/jackalope.ex | 8 ++++---- lib/jackalope/handler/logger.ex | 4 ++-- lib/jackalope/session.ex | 4 ++-- lib/jackalope/supervisor.ex | 4 +++- lib/jackalope/tortoise_client.ex | 3 +-- lib/jackalope/tortoise_handler.ex | 4 ++-- test/support/scripted_mqtt_server.ex | 6 +++--- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.credo.exs b/.credo.exs index 41f62bb..ba24023 100644 --- a/.credo.exs +++ b/.credo.exs @@ -3,12 +3,14 @@ configs: [ %{ name: "default", + strict: true, checks: [ {Credo.Check.Readability.ImplTrue, tags: []}, {Credo.Check.Readability.LargeNumbers, only_greater_than: 86400}, {Credo.Check.Readability.ParenthesesOnZeroArityDefs, parens: true}, {Credo.Check.Readability.Specs, tags: []}, - {Credo.Check.Design.TagTODO, false} + {Credo.Check.Design.TagTODO, false}, + {Credo.Check.Readability.StrictModuleLayout, tags: []} ] } ] diff --git a/lib/jackalope.ex b/lib/jackalope.ex index 3b5b85f..6196d1a 100644 --- a/lib/jackalope.ex +++ b/lib/jackalope.ex @@ -1,13 +1,13 @@ defmodule Jackalope do - use Supervisor - - require Logger - @moduledoc "README.md" |> File.read!() |> String.split("") |> Enum.fetch!(1) + use Supervisor + + require Logger + @default_mqtt_server { Tortoise311.Transport.Tcp, host: "localhost", port: 1883 diff --git a/lib/jackalope/handler/logger.ex b/lib/jackalope/handler/logger.ex index bd20c35..83bed5d 100644 --- a/lib/jackalope/handler/logger.ex +++ b/lib/jackalope/handler/logger.ex @@ -6,10 +6,10 @@ defmodule Jackalope.Handler.Logger do specified in the option list passed to `Jackalope.start_link/1`. """ - require Logger - @behaviour Jackalope.Handler + require Logger + @impl Jackalope.Handler def connection(status) do Logger.info("Connection status is: #{inspect(status)}") diff --git a/lib/jackalope/session.ex b/lib/jackalope/session.ex index 4a40d20..64f7771 100644 --- a/lib/jackalope/session.ex +++ b/lib/jackalope/session.ex @@ -12,11 +12,11 @@ defmodule Jackalope.Session do use GenServer - require Logger - alias __MODULE__, as: State alias Jackalope.{TortoiseClient, WorkList} + require Logger + @publish_options [:qos, :retain] @work_list_options [:ttl] # One hour diff --git a/lib/jackalope/supervisor.ex b/lib/jackalope/supervisor.ex index bfe1252..55b8c09 100644 --- a/lib/jackalope/supervisor.ex +++ b/lib/jackalope/supervisor.ex @@ -4,9 +4,11 @@ defmodule Jackalope.Supervisor do # Supervisor for the MQTT connection specific processes use Supervisor - require Logger + alias Jackalope.TortoiseClient + require Logger + @type init_arg :: {:app_handler, module()} | {:client_id, atom()} | {:connection_options, Keyword.t()} diff --git a/lib/jackalope/tortoise_client.ex b/lib/jackalope/tortoise_client.ex index d231e7e..e30e1e6 100644 --- a/lib/jackalope/tortoise_client.ex +++ b/lib/jackalope/tortoise_client.ex @@ -6,9 +6,8 @@ defmodule Jackalope.TortoiseClient do use GenServer - require Logger - alias Jackalope.Session + require Logger defmodule State do @moduledoc false diff --git a/lib/jackalope/tortoise_handler.ex b/lib/jackalope/tortoise_handler.ex index 1dc566c..ca38e0b 100644 --- a/lib/jackalope/tortoise_handler.ex +++ b/lib/jackalope/tortoise_handler.ex @@ -3,11 +3,11 @@ defmodule Jackalope.TortoiseHandler do @behaviour Tortoise311.Handler - require Logger - alias __MODULE__, as: State alias Jackalope.Session + require Logger + defstruct handler: nil, default_last_will: nil @impl Tortoise311.Handler diff --git a/test/support/scripted_mqtt_server.ex b/test/support/scripted_mqtt_server.ex index 6d9aa6b..11c8ed5 100644 --- a/test/support/scripted_mqtt_server.ex +++ b/test/support/scripted_mqtt_server.ex @@ -8,6 +8,9 @@ defmodule JackalopeTest.ScriptedMqttServer do use GenServer + alias Tortoise311.Package + alias __MODULE__, as: State + defstruct transport: nil, server_socket: nil, script: [], @@ -15,9 +18,6 @@ defmodule JackalopeTest.ScriptedMqttServer do client: nil, server_info: nil - alias Tortoise311.Package - alias __MODULE__, as: State - # Client API @spec start_link() :: GenServer.on_start() def start_link() do