Elixir 编译器警告忽略函数 return 值

Elixir compiler warning on ignored function return values

当我无意中忽略函数的 return 值时,有没有办法从 elixirc 编译器、Credo 或其他一些 linting 工具中获得警告?

也就是说,我想要在此示例中忽略 increment_state():

结果的警告
defmodule CountingServer do
  use GenServer

  def init(_) do
    :timer.send_interval(1000, :tick)
    {:ok, 1}
  end

  def handle_info(:tick, count_state) do
    IO.puts count_state
    increment_state(count_state)
    {:noreply, count_state}
  end

  def increment_state(prev_count) do
    prev_count + 1
  end
end

在上面的例子中,我们 "intended" 到 return incremented 状态来自 handle_info/2 调用,而不是 "old"状态;也就是说,我们打算让服务器打印 1, 2, 3, ... 而不是重复打印 1。

如果示例代码有意忽略了increment_state/1调用的结果(例如,将其分配给_),则不会有警告有必要。

我查看了 Credo 配置选项,但找不到任何符合要求的选项...

我继续做了a Credo check based off Credo's default UnusedOperation and UnusedFunctionReturnHelper

那些检查 几乎 支持我想要做的事情,但它们本质上需要一个 "blacklist" 来准确说明哪些函数的 return 值不容忽视;我只需要反转逻辑以支持对白名单中不存在的任何函数发出警告(Logger.infoEnum.each 等)。

检查支持通过 .credo.exs 配置向白名单添加额外的(大概是项目特定的)功能。

有关在您自己的项目中使用它的说明,请参阅 the first comment。 (TL;DR:将文件拖放到项目中,将其添加到 .credo.exs 中的 requireschecks 列表中。)