Dialyzer 无法识别依赖项中的类型

问题描述 投票:0回答:1

背景

我有一个伞式应用程序,我在其中使用名为 ETS 的依赖项。此依赖项有一个名为

set_options
的类型,我在一些规范中使用它。

问题

代码工作正常,但透析器抱怨。即:

lib/web_interface/persistence.ex:11:20:unknown_type
Unknown type: ETS.set_options/0.
________________________________________________________________________________
lib/web_interface/persistence.ex:11:65:unknown_type
Unknown type: ETS.t/0.

这会导致大量级联错误。

为了尝试解决此问题,我将以下内容添加到我的 root

mix.exs
文件(来自伞应用程序的文件,而不是来自子应用程序的文件):

  def project,
    do: [
      apps_path: "apps",
      version: "2.1.7",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      dialyzer: [
        plt_add_deps: :app_direct,
        plt_add_apps: [
          :ets
        ],
        plt_core_path: "plts",
        plt_local_path: "plts"
      ]
    ]

然后运行:

  • mix dialyzer --plt
  • mix dialyzer

这不起作用,输出是一样的。

然后我尝试将其添加到相关子应用程序的

mix.exs
(与之前的更改一起):

  def application do
    [
      mod: {WebInterface.Application, []},
      extra_applications: [:logger, :ets]
    ]
  end

不幸的是,没有任何效果,我仍然遇到相同的透析器错误。

问题

如何修复透析器以便它识别我的依赖项中的类型?

elixir dialyzer
1个回答
0
投票

ETS
没有定义任何应用程序,因此
plt_add_apps: [:ets]
extra_applications: [:ets]
都不会产生任何效果。

对于这种特殊情况,应按照文档

中所述明确定义指向 
ETS
ebin 目录的路径。

© www.soinside.com 2019 - 2024. All rights reserved.