问题标签 [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.
erlang - 透析器未检测到参数化类型中的明显类型错误
我试图了解透析器如何与多态/参数化类型一起工作。我理解它是乐观的,如果有任何通过代码的路径不会导致崩溃,它就会成功;鉴于这一事实,我不明白如何使用类型变量。
我有一个简单的递归二叉搜索树类型规范,旨在生成一个只有一种类型值的 BST。我知道(例如)原子和整数在 Erlang 中是可比较的,但我不希望我的 BST 允许这些比较。我编写并导出了b/0
一个用整数和原子构建 BST 的函数,并且透析器不兼容。
运行透析器会产生以下成功结果:
我可以通过编辑我的add/2
规范使这个例子失败,如下所示:
这是以任何方式惯用的,还是有更好的方法来做到这一点?我不一定要为我的树上的每个可能的操作详细说明每种可能的类型。
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
.
是否可以在不重新实现行为的情况下正确指定这一点?
heroku - 在 Heroku CI 上缓存
我正在使用 Elixir Phoenix buildpack 设置 Heroku CI。我想开始使用 Dialyzer。
Diazlyer 是一个静态分析工具,在第一次运行之前,它至少需要几分钟来创建来自 Erlang、Elixir 和项目依赖项的类型的“持久查找表”(PLT)。后来,项目分析要快得多。我想缓存 PLT。
我在构建期间找到了关于缓存的这一部分:https ://devcenter.heroku.com/articles/buildpack-api#caching但我找不到任何关于缓存test-setup
或test
脚本的内容。
是否有测试/CI 缓存,还是只能在 buildpacks 中使用?
erlang - 为什么透析器在 nocatch 上失败?
我运行 Dialyzer 并收到以下错误:
出了什么问题,我该如何解决?整数列表是什么意思?
graphql - 拨号器(通过 Dialyxir)从 Absinthe (GraphQL) 路由的 `forward` 命令发出有关“但此值不匹配”的警告。如何解决?
我收到一个关于不匹配返回的透析器错误,我不确定如何正确解决。
我的mix.exs
样子是这样的:
我的router.ex
样子是这样的:
我已经尝试过这个_ =
技巧,但它似乎不起作用。我认为使用无与伦比的回报可能会有所帮助,但在这种情况下可能不会。我已阅读此页面(https://github.com/jeremyjh/dialyxir/wiki/Phoenix-Dialyxir-Quickstart),但我认为它无助于解决此问题。
任何反馈或方向将不胜感激。
谢谢
elixir - 如何在模块变量和局部静态变量之间进行比较时抑制透析器警告?
Dialyzer 将试图匹配模块变量的代码归咎于代码:
我怎样才能避免警告,或者我应该每次都写如下?
elixir - 如何在 Elixir 和 Dialyzer 中覆盖函数或变量类型?
我正在使用 Elixir,但出现 Dialyzer (via Dialyxir) 错误,上面写着
这是代码
我相信这是因为类型规范不Timex.DateTime.from_seconds
正确。
他们将其定义为
但我认为它应该是
有没有办法通过以某种方式覆盖类型规范或date
类型来解决这个问题?
由于其他原因,我无法将 Timex 升级到版本 3。
erlang - PLT 代表什么?
我一直在大型 Elixir 代码库上使用 Dialyzer(和 Dialyxir),当我运行它时,它会吐出一堆诊断信息。它引用.plt
了很多文件。在 Erlang 和 Dialyzer 的上下文中,“PLT”代表什么?
erlang - 为什么 OTP 中的类型规范会重复参数名称?
在 Erlang 标准库的类型规范中,规范中几乎没有任何类型,直到该when
子句。例如,规范lists:member/2
是这样的:
代替:
是否有一个原因?从透析器的角度来看,这两种样式是否等效?
types - 什么是 succ_typings 为 false 的 Dialyzer?
我认为 Dialyzer 是一个检查成功输入的工具。但是,它的公共 API 有一个 succ_typings false 选项。Rebar3 的 Dialyzer 提供程序通过--succ-typings false
命令行选项公开了这一点。
使用和不使用此选项运行 Dialyzer 有什么区别?
文档对这个问题保持沉默。