问题标签 [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.
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
?
erlang - Erlang:在代码中添加类型规范会使透析器更有效吗?
我有一个没有代码的项目-spec
,-type
目前dialyzer可以找到一些警告,其中大部分是机器生成的代码。
将类型规范添加到代码中会使透析器发现更多错误吗?
题外话,有没有工具可以检查是否违反了规范?
types - Elixir、Dialyzer、类型和子类型警告
我正在使用“-Woverspecs”运行 Dialyzer 并收到以下警告:
使用此代码:
我想做的是用警卫确定函数类型,这样子类型警告就会消失,我对我的函数有一个精确的定义。
我在 Erlang 文档中看到不鼓励使用 -Woverspecs,并且怀疑我正在违背原则,因为我能想到的唯一解决方案是一些复杂的函数保护......
任何想法或指示?
elixir - Phoenix Dialyzer 变更集警告
当以通常的方式设置时,Dialyzer 会抱怨 Phoenix 模型,即
params 指示如何更新模型,默认情况下使用 :empty 来区分空白表单提交与 'params' 等于空映射。
透析器警告:
如果我删除 ':empty' 默认参数,警告就会消失。
是否有满足类型检查器的规范,同时保持通常的默认变更集功能?任何提示或指示?
erlang - 为什么 Dialyzer 没有捕捉到这个简单的错误?
Dialyzer 不会发出此函数返回类型不一致的信号:
但它检测到最后一行是
为什么会这样?我相信以上应该是一个非常简单的案例。
谢谢
types - Erlang中非终止函数的类型
我正在学习 Erlang 并尝试使用 Dialyzer 在可能的情况下获得最大的类型安全性。有一件事我不明白:什么是非终止函数的类型以及如何在-spec
. 任何人都可以对此有所了解吗?
erlang - Dialyzer 说函数永远不会被调用,即使它是
我正在使用 elixir_talk 库。连接后,我想在连接到 beanstalkd 后调用一个私有函数。我刚刚添加了 typespecs 并运行了 Dialyzer(通过 dialyxir)。我得到错误:
我能找到的产生这个的最小例子是
如果我将调用替换为调用ElixirTalk.connect
,spawn
Dialyzer 将不再报告任何问题。
有谁知道为什么 Dialyzer 在这里感到困惑?
protocols - 如何避免协议的透析器错误?
一个简单的协议会产生两种透析器警告:
我无法弄清楚的警告是:
我也想不出一个@spec
可以在这里消除警告的方法。
另一种警告已在别处讨论过——列出了许多“未知功能”:
(ETC。)
有没有@spec
可以和defprotocol
's一起使用的?我没有找到任何例子。或者,有没有办法在源代码中标记defprotocol
要被透析器忽略的?
编辑:这是第一个错误的完整修复:
types - 结构的透析器错误
这是 Elixir 1.3 中的一个最小损坏示例:
这无法键入检查:foo.ex:9: The variable _@1 can never match since previous clauses completely covered the type #{'__struct__':='Elixir.Foo', _=>_}
。
我一直在搜索和搜索,但终其一生都找不到解释这意味着什么,或者如何解决它。
erlang - 了解透析器结果
我有以下功能:
当我运行透析器时,我得到以下输出:
我对透析器很陌生,无法解释透析器的输出。我明白这是说函数的前 5 个子句不能匹配 [],但这是我故意的,因为我匹配的是第六个子句中的空列表。
我的 erlang 版本是 Erlang/OTP 19.0,我的透析器版本是 v3.0。
一个有趣的发现是,当我在另一台机器上运行 dilyzer v2.8 和 Erlang/OTP 18 时,dialyzer 不会抱怨上述代码。
到目前为止我尝试过的事情:
我对 erlang 中的二进制文件不是很有经验,所以我最初的想法是我误解了二进制模式匹配,但事实似乎并非如此。该函数通过了我的测试用例(使用 [] 作为参数调用该函数没有问题),而且如果我在函数头中用普通字符串替换二进制文件,我也会得到透析器的相同投诉。
重建plt并清理项目
提前致谢