Logger无与伦比的回报

时间:2016-04-04 08:49:37

标签: logging elixir static-analysis

静态分析器透析器(我通过dialyxir使用它)报告Logger(Expression produces a value of type 'ok' | {'error',_}, but this value is unmatched )的所有用法作为无与伦比的回报:

:ok  = Logger.info "blah"

我可以写-Wno_unmatched_returns但很明显,这很麻烦。我还可以使用$('#jstree_demo').jstree({ "core" : { "animation" : 0, "check_callback" : true, "themes" : { "stripes" : true }, 'data' : { 'url' : function (node) { return node.id === '#' ? 'ajax_demo_roots.json' : 'ajax_demo_children.json'; }, 'data' : function (node) { return { 'id' : node.id }; } } }, "types" : { "#" : { "max_children" : 1, "max_depth" : 4, "valid_children" : ["root"] }, "root" : { "icon" : "/static/3.3.0/assets/images/tree_icon.png", "valid_children" : ["default"] }, "default" : { "valid_children" : ["default","file"] }, "file" : { "icon" : "glyphicon glyphicon-file", "valid_children" : [] } }, "plugins" : [ "contextmenu", "dnd", "search", "state", "types", "wholerow" ] }); 配置透析器以忽略所有这些警告。但是,我发现它们非常有用,并且不想忽略它们。

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

有没有办法配置Dialyzer忽略此类警告,但仅限于Logger?

1 个答案:

答案 0 :(得分:3)

有@dialyzer属性here的文档。您需要在页面上搜索一下才能找到它。

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

@dialyzer {:no_return, your_function_name: 1}

应该给你你想要的东西。只需将它放在您正在使用Logger的每个模块的顶部:

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

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