Erlang 覆盖规范或忽略 rebar3 的中断合约错误



我正在一个具有一些第三方依赖项的项目上运行 rebar3,其中一个在定义的规范中存在问题。当我移动到 rebar3 时,弹出一个新错误,显示我的一个方法调用违反了合约:

riakc_pb_socket:get(my_app, Bucket::any(), Key::any(), Options::any(),
  Timeout::any())
breaks the contract
(pid(), bucket() | bucket_and_type(), key(), get_options(), timeout())
  -> {'ok',riakc_obj()} | {'error',term()} | 'unchanged'

实际上,此代码非常适合原子或 pid。除了更新第三方库之外,有没有办法在不分叉代码的情况下覆盖该规范,或者只是忽略该特定错误?

可以使用-dialyzer(...)属性禁止显示透析器警告,如此处所述。

对于您的情况,用于静音警告的适当属性可能是:

-dialyzer({no_contracts, function_that_calls_riakc_pb_socket_get}).

(注意:如果没有代码,我实际上无法对此进行测试。

请记住,虽然您的"标记"调用可能正常工作,但第三方库的开发人员可能打算只支持指定合约描述的参数(因此尊重它们可以使您免于未来版本中的麻烦(。

相关内容

  • 没有找到相关文章

最新更新