欢迎!请查看关于页面,了解更多关于其工作原理的信息。
评论由:pkillean 提出
此补丁包括
comp/resolve-types现在在有括号的情况下移除它们,并在检测到>1个类型时发出它们。这使得括号的使用是可选的,并且现有的代码不受影响(并且现在可能还可以工作)
对comp/resolve-type的更改1. 检查闭包认可的全局js变量(如document或window)1. 允许点分格式化,这样我们可以在externs中使用类型定义并避免不必要的解析 1. 使用ana/resolve-existing-var并带有一个"未解析jsdoc类型"警告 1. 检查解析后的变量是否为协议,并警告上述情况。这比闭包的未知类型错误更具有信息性
comp/resolve-types的测试
由 dnolen 发表的评论:
谢谢,明天我会更仔细地看看这个问题。
补丁正在逐步完成,请删除 js-doc-type meta 元数据。只需扩展 {{resolve-existing-var}} 的签名,添加一个额外的参数 - {{confirm-var-exists}} 处理器。
js-doc-type
CLJS-1627-1.patch{{resolve-existing-var}} 现在有一个额外的参数,可以接受传递给 {{confirm-existing-var}} 的缺失变量处理器。
这揭示了问题,其中 {{deftype}} + {{defrecord}} 使用 Object 协议在实际上不应该发出已解析名称时发出。例如:"@implements {cljs.core.async.impl.timers.Object}" --> 错误类型注释
由于 {{Object}} 是一个特例,简单的排除它应该可以解决问题。另一份补丁即将到来
CLJS-1627-2.patchdeftype 和 defrecord 的 emit* 方法现在过滤掉 Object 协议。
这产生了一个有趣的结果!没有更多的错误类型注释,静态分析现在可以继续... 并有很多要说。现在有所有关于参数差异(尤其是 cljs.core.IndexedSeq)的信息,类型不匹配等。甚至还包含类型覆盖率百分比。这里有很多要解析的东西,但非常酷。
CLJS-1627-3.patch 修复require外部使用错误 添加对数组 & 对象的类型应用支持 垃圾收集器喜欢将Object & Array设置为大写字母,string和number设置为小写字母。 支持显式的可空类型,变量类型参数* 函数类型上下文修饰符 {{this}} + {{new}}
缺少的是垃圾收集器的 'record类型' 。填充常见类型的节点externs可能也十分有用。
CLJS-1627-4.patch 修复最后补丁中的几个问题 添加记录类型支持。所有内容(链接: https://developers.google.com/closure/compiler/docs/js-for-compiler#types 文本:这里)都应被涵盖
更新补丁
由:mfikes 评论
CLJS-1627-5.patch不再适用
补丁6 通过comp/emit-comment路由js注释,该注释已修改为处理内联注释。 支持的标签:param, return, type, implements, typedef, enum, extends, throws, lends, const, this 添加内核核心宏goog-typedef。这允许你命名自定义类型,并在注释中引用它
还需要更多工作以支持多参数函数,但我认为这几乎已经解锁了基本的静态类型检查:-)
Hey Patrick, CLJS-1627-6.patch不适用于master。
本应先喝咖啡
CLJS-1627-7.patch 不适用于当前主分支