【问题标题】:Dialyzer warnings about pattern_match_cov on Gettext module关于 Gettext 模块上的 pattern_match_cov 的透析器警告
【发布时间】:2019-05-12 04:11:50
【问题描述】:

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

【问题讨论】:

  • 我在 Gettext 中也发现了一个类似的错误。维护人员提到他们不使用 Dialyzer。我想类似的问题在其他项目中有些常见,可能是许多项目的常见依赖项。
  • 您在问题已关闭后添加了评论。关闭说明说,如果您重现问题以打开一个新问题。我认为您应该打开一个新问题,并描述如何重现它。您是否尝试过直接针对 gettext 运行 dialyzer 以帮助隔离问题?

标签: elixir phoenix-framework dialyzer


【解决方案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 是伞形项目下的应用程序名称。

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多