【问题标题】:Unmatched returns of LoggerLogger 无与伦比的回报
【发布时间】:2016-07-23 17:29:38
【问题描述】:

静态分析器透析器(我通过 dialyxir 使用它)将 Logger (Logger.info "blah") 的所有使用情况报告为不匹配的返回:

Expression produces a value of type 'ok' | {'error',_}, but this value is unmatched

我可以写:ok  = Logger.info "blah",但很明显,这很麻烦。我还可以使用-Wno_unmatched_returns 配置透析器以忽略所有这些警告。但是,我发现它们非常有用,不想忽略它们。

documentation of dialyzer 说我们可以使用模块属性在每个模块的基础上停用警告,但我看不到是否只能将此信息放在 Elixir 源文件中。

有没有办法将 Dialyzer 配置为忽略此类警告,但仅适用于 Logger?

【问题讨论】:

    标签: logging elixir static-analysis


    【解决方案1】:

    有@dialyzer 属性here 的文档。您需要稍微向下搜索页面才能找到它。

    在这种特殊情况下,我相信以下模块属性:

    @dialyzer {:no_return, your_function_name: 1}
    

    应该给你你想要的。只需将它放在您使用 Logger 的每个模块的顶部,如下所示:

    defmodule MyLogging do
     @dialyzer {:no_return, your_function_name: 1}
     .
     .
     .
    

    请注意,您似乎只能关闭当前模块中功能的警告。也就是说,似乎不可能关闭不同模块中函数的警告(例如Logger.info: 1)。

    【讨论】:

    • 谢谢!事实上,这是我需要的unmatched_returns 选项。它激活检查而不是取消激活它。但是,就像您说的那样,问题在于激活或停用是用于调用函数,而不是被调用函数。不过,当您展示如何在 Elixir 源代码中配置透析器时,您的答案在技术上是正确的 :-)
    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2012-12-25
    • 2018-12-09
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多