问题标签 [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 - 类型 [string()] 是否覆盖空列表?
在定义将是字符串列表但也可以是空列表的类型时,我是否必须像这样定义两种情况:
或者这就足够了:
elixir - dialyxir mix 任务创建 PLT 退出时没有错误或创建表
我正在尝试使用 dialyxir 通过它提供的混合任务对我的项目运行透析器分析。
我已将它添加到我的依赖项中并按照自述文件进行编译。
当我运行mix dialyxir.plt
它时,它没有报告错误,但在没有创建表的情况下退出。
问题是我如何调试这个?
elixir - Ecto 变更集和透析器错误
我有一个雨伞应用程序。我看到了 Dialyzer 的价值,我正在尝试开始使用它。我已经走了很远,但我有一个关于 Ecto 的问题我无法解决。
这是针对处理身份验证的保护伞中的一个小应用程序。我可以将其全部简化为最简单的示例。
使用 Elixir 1.4.2 和 Dialyxir 0.4.0。
有问题的代码
相关错误输出
看来问题出在build
函数对 %__MODULE__{}
. 请参阅此相关的Stack Overflow 主题。
但是,我只是想不出一个有效的替代语法。
erlang - 无法让透析器与 evm 一起使用
我已经erlang 17.5
安装在 /usr/local/lib 中。 evm
认为我的“系统”安装。安装 evm 后,我下载erlang 19.2
了 ,我可以使用以下命令在两个版本的 erlang 之间来回切换:
我能够使用 erlang 17.5 设置透析器,但是当我切换到 erlang 19.2 并尝试设置透析器时,会发生以下情况:
erlang - 无法获取不透明类型以在透析器中导致抽象违规
这是一个定义不透明类型的模块:
这是一个在 person() 类型中混杂的模块:
和透析器:
我预计透析器会抱怨。
types - 为什么 Erlang Dialyzer 在以下代码中找不到类型错误?
free_vars_in_dterm({var, V}) -> {var, V};
显然无法输入检查,但是,透析器说一切正常。
代码如下:
erlang - Erlang Dialyzer 整数范围
运行透析器(和打字机)仅f
捕获该功能。
与打字机相同
这是“预期”的行为吗?
erlang - Rebar3 是否使用 HiPE 编译 Dialyzer 模块?
在独立运行 Dialyzer 时,它会使用 HiPE 编译其模块,以加快分析速度:
当需要分析许多模块时,这会对运行时间产生很大影响。
rebar3 dialyzer
运行命令时 Rebar3 会这样做吗?该文档没有说一种或另一种方式。
erlang - 为什么透析器没有检测到这种不良类型?
在这种情况下,Dialyzer 的行为对我来说相当奇怪,我还没有找到任何可以更好地理解它的东西。
这不是错误:
请注意,绝对可能的返回分支之一与类型签名不匹配。
然而,这确实有一个错误:
在这种情况下,没有任何可能的分支与 typespec 匹配,并且 dialyzer 说有以下错误消息:
web/blog/user_resolver.ex:4: Invalid type specification for function 'Elixir.Blog.UserResolver':find/2. The success typing is (#{'id':=_, _=>_},_) -> 10 | {'ok',#{'email':=<<_:64>>, 'name':=<<_:48>>}}
我不明白的部分是透析器清楚地识别出分支可能返回的两种不同类型((#{'id':=_, _=>_},_) -> 10 | {'ok',#{'email':=<<_:64>>, 'name':=<<_:48>>}
),所以这不是推理的问题。那么为什么它不承认其中一个分支不符合类型规范(如果只有一个分支符合,这似乎很高兴,这根本不是我想要的)
elixir - 长生不老药中的默认参数导致的函数数量使透析器抱怨
我有一个带有 2 个默认参数的函数
defp foo(bar, baz, qux \\ "", garply \\ nil)
我有两种用法,一种只提供前两个参数,另一种全部提供 4 个。 Dialyzer 抱怨说Function foo/3 will never be called
. 我认为这是因为它是私有的,并且两个默认值允许unroll_nodes/2
,unroll_nodes/3
和unroll_nodes/4
. 我可以表面上放弃默认值并在当前foo/2
调用中提供它们,但仅仅安抚透析器似乎很愚蠢。有没有办法在规范中指定这个?