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.info
、Enum.each
等)。
检查支持通过 .credo.exs
配置向白名单添加额外的(大概是项目特定的)功能。
有关在您自己的项目中使用它的说明,请参阅 the first comment。 (TL;DR:将文件拖放到项目中,将其添加到 .credo.exs
中的 requires
和 checks
列表中。)
当我无意中忽略函数的 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.info
、Enum.each
等)。
检查支持通过 .credo.exs
配置向白名单添加额外的(大概是项目特定的)功能。
有关在您自己的项目中使用它的说明,请参阅 the first comment。 (TL;DR:将文件拖放到项目中,将其添加到 .credo.exs
中的 requires
和 checks
列表中。)