在基于Phoenix 1.4的伞项目中,我开始使用Dialyzer(dialyxir 1.0.0-rc.6)。
当我第一次在其上运行mix dialyzer
时,收到了此警告。
apps/my_app/lib/my_app_web/gettext.ex:1:pattern_match_cov
The pattern
%{}
can never match since previous clauses completely cover the type
%{:count => _, _ => _}
以下是此文件(gettext.ex
)的内容:
defmodule MyProject.MyAppWeb.Gettext do
@moduledoc """
(*snip*)
"""
use Gettext, otp_app: :my_app
end
我没有碰它。我该如何解决它或禁止显示警告?
[更新]
我发现此问题已于2018年2月20日结束:
https://github.com/elixir-lang/gettext/issues/115
我确认新创建的phoenix应用程序不会产生透析仪警告。我还通过另一个(新创建的)凤凰伞项目进行了确认。
我没有为现有项目找到任何解决方案。
[更新2]
我发现了如何重现我的问题。
新创建的应用程序不会警告您,但是会警告您是否包含实际需要插值的翻译数据。
有关更多信息,请参见我的github问题评论:
https://github.com/elixir-lang/gettext/issues/115#issuecomment-491591307
答案 0 :(得分:1)
作为解决该错误之前的解决方法,我在伞项目的根目录中使用以下内容制作了.dialyzer_ignores.exs
。
[
{"apps/app1/lib/app1_web/gettext.ex", :pattern_match_cov},
{"apps/app2/lib/app2_web/gettext.ex", :pattern_match_cov},
{"apps/app3/lib/app3_web/gettext.ex", :pattern_match_cov}
]
app1
,app2
和app3
是伞式项目下的应用程序名称。