当我无意中忽略了函数的返回值时,是否可以通过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
在上面的示例中,我们“打算”从handle_info/2
调用返回 incremented 状态,而不是“ old”状态;也就是说,我们打算让服务器打印1,2,3,...,而不是重复打印1。
如果示例代码故意 忽略了increment_state/1
调用的结果(例如,将其分配给_
),则不需要警告。>
我已经浏览了Credo的配置选项,找不到符合要求的内容...
答案 0 :(得分:0)
我继续根据Credo的默认a Credo check和UnusedOperation制作了UnusedFunctionReturnHelper。
这些检查几乎支持我想按原样进行的工作,但是它们本质上需要一个“黑名单”来确切说明哪些函数的返回值不能被忽略;我只需要反转逻辑以支持对白名单中没有的任何功能(Logger.info
,Enum.each
等)提供警告。
该检查支持通过.credo.exs
配置向白名单中添加其他功能(可能是项目特定的)。
有关在您自己的项目中使用它的说明,请参见the first comment。 (TL; DR:将文件拖放到项目中,将其添加到requires
的{{1}}和checks
列表中。)