关于Gettext模块上关于pattern_match_cov的Dialyzer警告

时间:2019-05-12 04:11:51

标签: elixir phoenix-framework dialyzer

在基于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

1 个答案:

答案 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}
]

app1app2app3是伞式项目下的应用程序名称。