问题标签 [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 投票
2 回答
98 浏览

erlang - 透析器未检测到参数化类型中的明显类型错误

我试图了解透析器如何与多态/参数化类型一起工作。我理解它是乐观的,如果有任何通过代码的路径不会导致崩溃,它就会成功;鉴于这一事实,我不明白如何使用类型变量。

我有一个简单的递归二叉搜索树类型规范,旨在生成一个只有一种类型值的 BST。我知道(例如)原子和整数在 Erlang 中是可比较的,但我不希望我的 BST 允许这些比较。我编写并导出了b/0一个用整数和原子构建 BST 的函数,并且透析器不兼容。

运行透析器会产生以下成功结果:

我可以通过编辑我的add/2规范使这个例子失败,如下所示:

这是以任何方式惯用的,还是有更好的方法来做到这一点?我不一定要为我的树上的每个可能的操作详细说明每种可能的类型。

0 投票
1 回答
971 浏览

elixir - 如何在 Elixir 中指定具有可变数量参数的回调

我有一个包含任何功能的行为。

这个想法是,通过实现MyBehaviour,模块Implementation将具有run([:arg1])将调用的函数do_run(:arg1)

如何@callback为具有可变数量参数的函数编写规范?

我认为这@callback do_run(...) :: any()会起作用,但 Dialyzer 给了我一个错误Undefined callback function do_run/1,所以我认为...这意味着任何参数,但不是零参数。

实际上,我只有两种情况:零和一个 arg。我想过像这样重载规范:

但这需要两个do_run函数,因为在 Erlang 世界中,同名和不同的数量是两个独立的函数。

如果我做到了,它们@optional_callback都有可能不会被实施。

@type允许像这样指定任何数量的函数,(... -> any())所以我想应该可以对@callback.

是否可以在不重新实现行为的情况下正确指定这一点?

0 投票
1 回答
322 浏览

heroku - 在 Heroku CI 上缓存

我正在使用 Elixir Phoenix buildpack 设置 Heroku CI。我想开始使用 Dialyzer。

Diazlyer 是一个静态分析工具,在第一次运行之前,它至少需要几分钟来创建来自 Erlang、Elixir 和项目依赖项的类型的“持久查找表”(PLT)。后来,项目分析要快得多。我想缓存 PLT。

我在构建期间找到了关于缓存的这一部分:https ://devcenter.heroku.com/articles/buildpack-api#caching但我找不到任何关于缓存test-setuptest脚本的内容。

是否有测试/CI 缓存,还是只能在 buildpacks 中使用?

0 投票
1 回答
135 浏览

erlang - 为什么透析器在 nocatch 上失败?

我运行 Dialyzer 并收到以下错误:

出了什么问题,我该如何解决?整数列表是什么意思?

0 投票
1 回答
497 浏览

graphql - 拨号器(通过 Dialyxir)从 Absinthe (GraphQL) 路由的 `forward` 命令发出有关“但此值不匹配”的警告。如何解决?

我收到一个关于不匹配返回的透析器错误,我不确定如何正确解决。

我的mix.exs样子是这样的:

我的router.ex样子是这样的:

我已经尝试过这个_ =技巧,但它似乎不起作用。我认为使用无与伦比的回报可能会有所帮助,但在这种情况下可能不会。我已阅读此页面(https://github.com/jeremyjh/dialyxir/wiki/Phoenix-Dialyxir-Quickstart),但我认为它无助于解决此问题。

任何反馈或方向将不胜感激。

谢谢

0 投票
1 回答
114 浏览

elixir - 如何在模块变量和局部静态变量之间进行比较时抑制透析器警告?

Dialyzer 将试图匹配模块变量的代码归咎于代码:

我怎样才能避免警告,或者我应该每次都写如下?

0 投票
1 回答
188 浏览

elixir - 如何在 Elixir 和 Dialyzer 中覆盖函数或变量类型?

我正在使用 Elixir,但出现 Dialyzer (via Dialyxir) 错误,上面写着

这是代码

我相信这是因为类型规范不Timex.DateTime.from_seconds正确。

他们将其定义为

但我认为它应该是

有没有办法通过以某种方式覆盖类型规范或date类型来解决这个问题?

由于其他原因,我无法将 Timex 升级到版本 3。

0 投票
1 回答
179 浏览

erlang - PLT 代表什么?

我一直在大型 Elixir 代码库上使用 Dialyzer(和 Dialyxir),当我运行它时,它会吐出一堆诊断信息。它引用.plt了很多文件。在 Erlang 和 Dialyzer 的上下文中,“PLT”代表什么?

0 投票
1 回答
63 浏览

erlang - 为什么 OTP 中的类型规范会重复参数名称?

在 Erlang 标准库的类型规范中,规范中几乎没有任何类型,直到该when子句。例如,规范lists:member/2是这样的:

代替:

是否有一个原因?从透析器的角度来看,这两种样式是否等效?

0 投票
1 回答
60 浏览

types - 什么是 succ_typings 为 false 的 Dialyzer?

我认为 Dialyzer 是一个检查成功输入的工具。但是,它的公共 API 有一个 succ_typings false 选项。Rebar3 的 Dialyzer 提供程序通过--succ-typings false命令行选项公开了这一点。

使用和不使用此选项运行 Dialyzer 有什么区别?

文档对这个问题保持沉默