为什么jQuery不使用JSDoc?

31

他们是否存在,只是不在源代码中?我真的希望能找到一些东西,可以阻止js-doc-toolkit每次解析jQuery时出现问题。这意味着我无法正确地记录任何使用jQuery作为依赖项的代码,除非至少放置一些样板js-doc块,但这些块无法正确记录jQuery的结构。有没有我不知道的常见解决方案?顺便说一句,我已经尝试过谷歌搜索了。


重复的 jQuery 文档格式 ;) (遗憾的是,那里没有答案) - Marcel Korpel
2
有一个小更新,但我发现Docco更容易用来记录JS。找到正确的JSDoc标签真的很繁琐。个人认为Docco的文档策略更简单、更实际。还有Rocco,作为一个gem,它将与Cygwin更好地配合使用,因为不需要NPM。 - hlfcoding
2
Docco听起来是个不错的主意,除了这一点:“只处理单行注释——块注释会被忽略。”我认为,如果你正在编写API文档,块注释绝对是你想要处理的,因为它们更容易编写较长的解释。 - user4815162342
@user4815162342,实际上我喜欢这样。这样,我可以保留多行注释,仅用于注释闭包编译器指令。 - Camilo Martin
3个回答

30

我这里只是猜测,因为我不能代表jQuery团队解释为什么不会使用JSDoc。至少在我上次检查时,JSDoc没有干净的方法来支持方法重载(或参数转移...无论你想在这里给它起什么名字),而jQuery在许多地方都使用了它。让我们以一个简单的常见示例.animate()为例:

.animate({ height: 5 })
.animate({ height: 5 }, 100)
.animate({ height: 5 }, 100, "linear")
.animate({ height: 5 }, 100, "linear", func)
.animate({ height: 5 }, 100, func)
.animate({ height: 5 }, func)
.animate({ height: 5 }, { duration: 100, queue: false })
.animate({ height: 5 }, { duration: 100, easing: "linear" })
.animate({ height: 5 }, { duration: 100, easing: "linear", complete: func })

以下内容均为有效内容,因为参数类型会根据需要检查和转换以支持尽可能多的重载情况...这只会让JSDoc感到困惑,没有清洁的方法将这些可选参数添加到文档中。如果有变化,请纠正我,但据我所知(也可能是团队最后一次查看时),情况仍然如此。
另一个潜在的考虑因素是当jQuery运行时,一些方法是如何生成的,例如(众多方法之一),几乎所有的事件处理程序快捷方式都是在循环中生成,其他方法也有类似的行为...你会如何记录这些?JSDoc生成在这里确实无法很好地工作。

1
我认为无法完全正确地记录参数并不是最大的问题。我更担心的是为什么对象和方法本身不能至少被记录,这样JSDoc就知道它们的存在和引用位置了。对于生成jQuery项目文档的一个潜在好处是,在进行大规模更改时更容易升级它。是否有更好的文档生成器?我听说过Docco... - hlfcoding
@Nick 我也在想同样的问题。我使用-vsdoc.js文件,然后突然想到:“为什么微软要和大多数人做得不一样呢?”我没有考虑到这是因为jQuery对参数进行了“类型检查”。这个例子很好。顺便说一下:@hlfcoding有666个声望点数。 - Joseph Yaduvanshi
它使得静态类型检查变得不那么有用,但是这些重载可以用JSDoc声明:{string|Object|Number} 例如 - 因此如果有5个参数并且所有参数都可能被移动,第一个参数最终会得到一个相当疯狂的可能类型列表。如果它真的可能是任何东西,你可以使用{*}。你可以让每个shift调用另一个更强类型的函数来捕获所有静态类型问题,并希望Closure Compiler与ADVANCED_OPTIMIZATIONS足够内联以消除性能负担 - 但这是一个很大的赌注和额外的工作量。 - Chris Moschini
@Chris - JSDoc允许通过用方括号括起来的类型来指定可选参数,例如{[int]} duration。这将处理重载,假设顺序是一致的。但它无法处理将参数塞入对象的情况。 - David Harkness
2
JSDoc 还有 @variation 标签,用于记录调用方法的不同方式,非常实用。 - kzh
显示剩余4条评论

7

4
虽然我在原问题上不能提供其他人没有的内容,但我可以提供一个链接,其中包含可以自动记录 jQuery 的内容。
它通过在运行时环境中执行jQuery并解析生成的树来实现这一点。像JSDoc一样,它使用了修改后的Rhino。目前它还处于初期阶段,但我希望对某些人有所帮助。 :)

https://bitbucket.org/nexj/njsdoc


JSDoc 确实进行静态分析。 - kzh
是的,它确实可以。如果你是这样理解的话,我并没有说它不能。我应该在这里澄清我的观点,即NJSDoc进行运行时(动态)分析而不是静态分析。试图通过更少的(理想情况下没有)样板提示注释来达到相同或更高水平的文档化。 - Jasmine Hegman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接