欢迎!请查看关于页面,了解更多关于如何使用该网站的信息。
评论由:pkillean
该补丁包括
comp/resolve-types现在在存在时去除括号,并在检测到大于1个类型时发出它们。这使得括号的用法是可选的,并且现有代码保持不变(额外的好处是现在可能可以工作)
comp/resolve-type的更改1. 检查由Closure识别的js全局变量,如document或window1. 允许.dot分隔式样通过,这样我们就可以使用externs中定义的类型,并避免不必要的解析 1. 使用ana/resolve-existing-var并发出“未解析的jsdoc类型”警告 1. 检查解析的变量是否为协议,否则发出警告。这比Closure的标准未识别类型错误更具有信息量
comp/resolve-types的测试
评论者:dnolen
感谢,我明天会仔细看看。
补丁正在接近完成,请移除 js-doc-type 元数据。只需扩展 {{resolve-existing-var}} 的签名以接受额外的参数——{{confirm-var-exists}} 处理器。
js-doc-type
CLJS-1627-1.patch{{resolve-existing-var}} 现在有一个额外的可用性接受一个通过 {{confirm-existing-var}} 传递的 missing-var 处理器。
这揭示了一个问题,其中使用 Object 协议的 {{deftype}} + {{defrecord}} 在实际上不应这样做时发出解析名称。例如 : "@implements {cljs.core.async.impl.timers.Object}" --> 错误的类型注释
由于 {{Object}} 是一个特殊情况,只需将其排除在注释之外应该就可以解决问题。另一项补丁将发出
CLJS-1627-2.patchdeftype 和 defrecord 的 emit* 方法现在过滤掉 Object 协议。
这产生了一个有趣的结果!没有更多的错误类型注释,静态分析现在可以继续...而且有很多东西要说。现在关于论证歧义(尤其是 cljs.core.IndexedSeq)的类型不匹配和其他问题都有了各种信息。它甚至包括类型覆盖率百分比。这里有很多要分析的东西,但非常酷。
CLJS-1627-3.patch 修复 require extern 为 Array & Object 添加类型应用支持 GC 喜欢将 Object & Array 的大小写设置为大写,字符串和数字为小写。 对显式可空类型和变量类型的参数的支持* 函数类型上下文修饰符 {{this}} + {{new}}
- 缺少 GC 'record 类型'。还为填充常见类型的节点 extern 提供了便利
CLJS-1627-4.patch 修正上一补丁中的一些问题
更新补丁
评论者:mfikes
CLJS-1627-5.patch 已不再适用
补丁 6 通过 comp/emit-comment 路由 js 注释,该注释经过修改以处理内联注释。 支持的标签:param, return, type, implements, typedef, enum, extends, throws, lends, const, this 添加 macro core/goog-typedef。这使得您可以通过在注解中引用它来命名自定义类型。
还需要进行更多工作以支持多参数函数,但我想这已经解锁了基本的静态类型检查 -)
Hey Patrick, CLJS-1627-6.patch 适用于 master。
应该先喝咖啡
CLJS-1627-7.patch 不适用于当前的主分支