Elixir 忽略生成代码的透析器警告
我正在努力使我的库()能够很好地与透析器配合使用,以处理结果元组 目前,若给出不正确的数据输入,代码会引发一个很好的错误。然而,透析器指出,这种情况是从来没有必要的。我仍然想保留这个错误案例。向图书馆的新用户解释这个错误很有帮助,但我想让透析器忽略它Elixir 忽略生成代码的透析器警告,elixir,dialyzer,Elixir,Dialyzer,我正在努力使我的库()能够很好地与透析器配合使用,以处理结果元组 目前,若给出不正确的数据输入,代码会引发一个很好的错误。然而,透析器指出,这种情况是从来没有必要的。我仍然想保留这个错误案例。向图书馆的新用户解释这个错误很有帮助,但我想让透析器忽略它 quote location: :keep do case unquote(right) do {:ok, unquote(left)} -> unquote(expand_bindings(rest, yield_b
quote location: :keep do
case unquote(right) do
{:ok, unquote(left)} ->
unquote(expand_bindings(rest, yield_block, exception_clauses))
{:error, reason} ->
{:error, reason}
case reason do
unquote(exception_clauses)
end
# This block will never be called, as far as dialyzer is concerned
# However I want to keep it for the cases when diayzer is not being used in the project
return ->
raise %OK.BindError{
return: return,
lhs: unquote(Macro.to_string(left)),
rhs: unquote(Macro.to_string(right))
}
end
end
可以在这里看到源代码传递
生成:true
到报价
:
quote location: :keep, generated: true do
这告诉编译器和透析器不要对该代码发出警告。向库的新用户解释错误非常有帮助——这就是注释/@doc的作用。为了文档的目的,在代码中保留一个不可访问的子句是没有意义的。那么…那是什么样的内心陈述?这是伪代码吗?如果你违反了规范,代码是可以访问的。但经验表明,许多长生不老药开发者将以不符合规范的方式使用它。如果不运行透析器,我的错误将是他们看到的第一件事,关于你的评论,“如果你违反了规范,代码是可以访问的”,用透析器来验证你的直觉可能是值得的——没有规范。我该如何使这一点仅适用于最后一个案例条款我能想到的最好方法是分别引用
return->…
子句和generated:true
并将其赋给一个变量,然后像对待例外条款那样将其插入主引号中。