问题标签 [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 回答
1374 浏览

types - Elixir type specs and parameterized type variables

I am trying to figure out how to combine parameterized types and type variables in Elixir type and function specs. As a simple example, let's say I am defining a Stack module:

Using the parameterized type spec on line 3, I can define a function that creates a new stack that should contain only integers:

So far, so good. Now I want to make sure that only integers can be pushed into this stack. For example, dialyzer should be fine with this:

But dialyzer should complain about this:

I can't figure out what the type spec on the push function should be to enforce that. In Erlang, I'm pretty sure this syntax would do the trick:

Is there a way to express this constraint using Elixir @spec?

0 投票
1 回答
429 浏览

erlang - Erlang:在代码中添加类型规范会使透析器更有效吗?

我有一个没有代码的项目-spec-type目前dialyzer可以找到一些警告,其中大部分是机器生成的代码。

将类型规范添加到代码中会使透析器发现更多错误吗?

题外话,有没有工具可以检查是否违反了规范?

0 投票
1 回答
336 浏览

types - Elixir、Dialyzer、类型和子类型警告

我正在使用“-Woverspecs”运行 Dialyzer 并收到以下警告:

使用此代码:

我想做的是用警卫确定函数类型,这样子类型警告就会消失,我对我的函数有一个精确的定义。

我在 Erlang 文档中看到不鼓励使用 -Woverspecs,并且怀疑我正在违背原则,因为我能想到的唯一解决方案是一些复杂的函数保护......

任何想法或指示?

0 投票
1 回答
368 浏览

elixir - Phoenix Dialyzer 变更集警告

当以通常的方式设置时,Dialyzer 会抱怨 Phoenix 模型,即

params 指示如何更新模型,默认情况下使用 :empty 来区分空白表单提交与 'params' 等于空映射。

透析器警告:

如果我删除 ':empty' 默认参数,警告就会消失。

是否有满足类型检查器的规范,同时保持通常的默认变更集功能?任何提示或指示?

0 投票
1 回答
262 浏览

erlang - 为什么 Dialyzer 没有捕捉到这个简单的错误?

Dialyzer 不会发出此函数返回类型不一致的信号:

但它检测到最后一行是

为什么会这样?我相信以上应该是一个非常简单的案例。

谢谢

0 投票
2 回答
549 浏览

types - Erlang中非终止函数的类型

我正在学习 Erlang 并尝试使用 Dialyzer 在可能的情况下获得最大的类型安全性。有一件事我不明白:什么是非终止函数的类型以及如何在-spec. 任何人都可以对此有所了解吗?

0 投票
1 回答
1297 浏览

erlang - Dialyzer 说函数永远不会被调用,即使它是

我正在使用 elixir_talk 库。连接后,我想在连接到 beanstalkd 后调用一个私有函数。我刚刚添加了 typespecs 并运行了 Dialyzer(通过 dialyxir)。我得到错误:

我能找到的产生这个的最小例子是

如果我将调用替换为调用ElixirTalk.connectspawnDialyzer 将不再报告任何问题。

有谁知道为什么 Dialyzer 在这里感到困惑?

0 投票
1 回答
721 浏览

protocols - 如何避免协议的透析器错误?

一个简单的协议会产生两种透析器警告:

我无法弄清楚的警告是:

我也想不出一个@spec可以在这里消除警告的方法。

另一种警告已在别处讨论过——列出了许多“未知功能”:

(ETC。)

有没有@spec可以和defprotocol's一起使用的?我没有找到任何例子。或者,有没有办法在源代码中标记defprotocol要被透析器忽略的?

编辑:这是第一个错误的完整修复:

0 投票
1 回答
453 浏览

types - 结构的透析器错误

这是 Elixir 1.3 中的一个最小损坏示例:

这无法键入检查:foo.ex:9: The variable _@1 can never match since previous clauses completely covered the type #{'__struct__':='Elixir.Foo', _=>_}

我一直在搜索和搜索,但终其一生都找不到解释这意味着什么,或者如何解决它。

0 投票
1 回答
509 浏览

erlang - 了解透析器结果

我有以下功能:

当我运行透析器时,我得到以下输出:

我对透析器很陌生,无法解释透析器的输出。我明白这是说函数的前 5 个子句不能匹配 [],但这是我故意的,因为我匹配的是第六个子句中的空列表。

我的 erlang 版本是 Erlang/OTP 19.0,我的透析器版本是 v3.0。

一个有趣的发现是,当我在另一台机器上运行 dilyzer v2.8 和 Erlang/OTP 18 时,dialyzer 不会抱怨上述代码。

到目前为止我尝试过的事情:

  • 我对 erlang 中的二进制文件不是很有经验,所以我最初的想法是我误解了二进制模式匹配,但事实似乎并非如此。该函数通过了我的测试用例(使用 [] 作为参数调用该函数没有问题),而且如果我在函数头中用普通字符串替换二进制文件,我也会得到透析器的相同投诉。

  • 重建plt并清理项目

提前致谢