生成文档时,宏不能始终如一地工作

时间:2011-10-31 20:15:06

标签: ruby documentation yard

我在YARD doc工具中使用宏,在他们工作的一些文件上使用宏,而在一些文件中却没有。

例如,我在我的一个源文件中定义了一个宏。

# @macro [new] my_macro
# @param [String] my_string it's a string!
#
def method(my_string)
  #do stuff
end

然后在其他文件/类中:

#@macro my_macro
def a_method(my_string)
  #do stuff
end

当我运行doc生成器时,宏将适用于许多文件但不是全部。我的猜测是,在生成失败的文档之前,doc生成器没有看到宏。一旦到达宏,它就适用于之后的每个文件。但这是猜测。

有没有办法确保宏适用于每个文件?我怀疑我认为宏如何在YARD中工作以及它们实际上如何工作之间存在脱节。

P.S。对于那些不知道YARD是什么的人,你应该看看。它基本上做了rDoc的功能,但要好得多。 http://yardoc.org/

1 个答案:

答案 0 :(得分:4)

这确实取决于YARD处理源文件的顺序,目前唯一的解决方案是通过将文件列表传递给yardoc手动设置该顺序,如下所示:

yardoc "lib/foo_that_defines_buncha_macros.rb" "lib/**/*.rb"

这将首先处理定义宏的文件,然后处理所有其他文件。请注意引号,YARD有自己的整体,所以例如**将可以使用(递归glob)

是的,如果你有一个循环的“依赖”,即两个文件使用彼此的宏,这将不起作用。

根据YARD开发人员的说法,使用两遍来获得所有宏会对性能产生太大的影响,所以不要指望它会很快改变。

编辑:这个想法的扩展是有一个专门用于定义宏的文件,因为没有理由他们的定义必须与你的方法的实现在同一个文件中。