问题标签 [dialyzer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
219 浏览

elixir - 使用侦听过程构建 Elixir GenServer 的正确方法

我正在使用elixir-socket库作为将我的后端应用程序连接到外部 websocket 的一种方式。我需要管理此过程(如果出现故障则重新启动,如果无法连接则以指数方式回退等)。

目前,我创建了一个管理 GenServer 进程,该进程在给定时间后生成一个循环套接字(如下所示)。我有一个主管管理SocketManager(以及链接的Socket)流程:

socket_manager.ex

套接字

上面的效果很好,但是我不确定这是构造它的最佳方法。据我了解,Task应该只针对具有确定生命周期的任务,而不是针对永久过程。此外,在运行时,mix dialyzer我得到以下输出(参考 中的Task.spawn_linkSocketManager):

任何人都可以帮助我就如何构建它以及我如何能够满足 Dialyzer 提出建议?

谢谢!

0 投票
1 回答
592 浏览

elixir - dialyzer 无法识别 elixir 函数并出现错误:0:unknown_function

我在我的计算机上使用 elixir 和 erlang otp 21 安装了 elixir 1.7.2 asdf。在我的项目混合文件中,我按照dilyzer github上的说明添加了最新的透析器候选版本

当我运行时,mix dialyzer我在创建 plt 时遇到了几个错误,其中包括:

然后一切都失败并出现错误,包括内置的长生不老药,如System.get_env/1

0 投票
1 回答
796 浏览

elixir - “透析器通常永远不会出错”,但我无法弄清楚我的@spec 是如何不正确的

我有一些代码使透析器失败,我不明白为什么。无论我@spec在函数顶部放入什么,对该函数的调用都会返回一个令人费解的透析器错误。这是函数的简化。据我所知,我已经正确指定了该功能。

我的问题是,如果我希望得到除以下内容之外的任何内容,则跨代码库对该函数的每次调用都会失败{:ok, balances}

透析器警告说The variable _ can never match since previous clauses completely covered the type {'ok',[map()]}。我读到这意味着对 balances 的任何调用都将始终 return {:ok, balances},但这不可能是真的,因为 case 语句 forHTTPoison.get是函数中评估的最后一件事,它似乎只有三个可能的结果:

  • {:ok, list}
  • {:internal_server_error, String.t(), String.t()}
  • {:internal_server_error, map | list, String.t()}.

我知道我可能遗漏了一些非常明显的东西,但我无法弄清楚它是什么。任何帮助将不胜感激。谢谢你!

0 投票
2 回答
175 浏览

elixir - 我们可以在透析器中使用哪个版本的 elixir-otp-erlang?

背景

最新版本的 Elixir (1.7.X) 有一个错误,阻止了透析器 16 的使用

现在,我知道以前的一些版本没有这个问题,但我不知道哪些版本。

我试过的

我已经测试了以下版本:

一切都无法正常工作。

可以使用 MWE 重现该错误:

问题

不受此错误影响的最新版本的 elixir-otp-erlang 是什么?

0 投票
1 回答
104 浏览

elixir - 有没有办法让 Dialyzer 手表代码更改?

我正在使用将任务附加到 Mix的dilyxir 。dialyzer但它似乎没有任何--watch选项可以重新运行文件更改的类型检查。

是否有 CLI 方法来实现这一目标?

0 投票
1 回答
226 浏览

process - 在无限超时后使用接收挂起 Erlang 进程

我是 Erlang 的新手,我想暂停一个函数。我使用无限超时接收,我的函数如下所示:

当我运行透析器工具时,它返回“函数没有本地返回”。我应该用 timer:sleep(infinity) 替换这个函数吗?对于暂停,哪个更好?太感谢了。

0 投票
1 回答
114 浏览

error-handling - 处理异常 Erlang 时 throw 和 catch 的区别

我有一个像下面这样的简单代码来测试 Erlang 如何处理异常。throw 和 catch 的 **** 参考。

当我用 throw 运行透析器时,它显示警告:

exception.erl:9:变量 Result 永远无法匹配,因为前面的子句完全覆盖了“奇数”类型

可以通过添加来修复此警告

案件捕获

功能乐趣/2。

当我用 catch 运行透析器时,透析器成功通过。

我想知道接球和投掷。我们应该抛出或捕获哪种情况?

0 投票
1 回答
130 浏览

elixir - 透析器不知道:httpc

我正在研究 Elixir,使用 Erlang 内置:httpc函数来执行获取请求。

功能运行良好。然后在运行 mix dialyzer 后,它返回错误:

我放这行是为了告诉 Dialyzer 跳过检查该功能。

但是,错误仍然存​​在

0 投票
1 回答
273 浏览

elixir - 关于 Gettext 模块上的 pattern_match_cov 的透析器警告

我开始在基于 Phoenix 1.4 的伞形项目中使用 Dialyzer (dialyxir 1.0.0-rc.6)。

当我mix dialyzer第一次运行它时,我收到了这个警告。

以下是该文件的内容 ( gettext.ex):

我没有碰它。如何修复它或抑制警告?

[更新]

我发现这个问题已于 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 回答
9245 浏览

elixir - Dialyzer 发出类型规范是成功键入多个同名函数的子类型

我有以下两个功能,我收到了关于它们的透析器警告:

以下是功能:

我不明白为什么我会收到此警告。我认为这是在 Elixir 中编写具有不同参数类型的函数的正确方法,但鉴于 Dialyzer 不断发出警告,我开始怀疑我是否错误地编写了这段代码?



这些是我正在运行的透析器标志:


复制样本:

以下是我收到的警告: