3

我开始在基于 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

4

1 回答 1

2

作为修复错误之前的解决方法,我.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伞形项目下的应用程序名称。

于 2019-05-12T14:58:18.620 回答