使用Yardoc记录def_delegators

时间:2013-02-15 09:09:55

标签: ruby documentation yard

我有一个使用Forwardable模块中的def_delegators方法的类。我还没有办法让Yardoc为它输出文档。我尝试使用macro,但它不会为这些特定方法输出任何内容(文件中的其他内容都很好,并且没有错误),而且我有几个{ {1}}不同长度。

e.g。

def_delegators

如果有人知道宝石或这样做的方法,这意味着我可以避免尝试写Yard扩展来做到这一点,我会非常感激。

3 个答案:

答案 0 :(得分:5)

经过更多实验,我发现这很有效:

  # @!method size
  #   @see Array#size
  # @!method <<
  #   @see Array#<<
  # @!method blah
  #   @see Array#blah
  def_delegators :@xs, :size, :<<, :blah # …

很可能有一种方法可以在一行或两行中完成,但与编写扩展的工作相比,我发现这是非常可接受的。


更新

我刚刚发现这将更好地链接到委托方法的文档:

  # @!method size
  #   @return (see Array#size)

这将采用Array#size方法中已经记录的返回值。我希望其他标签也会这样做。它仍然很冗长,但可以接受。

答案 1 :(得分:1)

您需要结合这两个概念。使用@!macro生成@!方法。

以下是我的解决方案版本。但问题是我没有包括OptParser所以See也没有链接。第二个缺点是方法的签名,参数和返回值没有描述。第三个ick是字符串OptParser已修复,但确实需要能够进行调整(参数化)。

如果它转发到项目中包含的方法,那么你可以使用(参见Foo#方法)(在这种情况下没有@符号),Foo#方法中的任何内容都将被复制到新的源代码中。这可以通过在宏内部进行(参见Foo#$ 2)来实现 - 包括paren。见YARD's Reference Tags

# @!macro [attach] def_delegators
#   @!method $2
#     Forwards to $1.
#     @see OptParser#$2
def_delegators :opt_parser, :order!
def_delegators :opt_parser, :on
def_delegators :opt_parser, :on_head
def_delegators :opt_parser, :on_tail
def_delegators :opt_parser, :help
def_delegators :opt_parser, :add_officious
def_delegators :opt_parser, :banner
def_delegators :opt_parser, :banner=
def_delegators :opt_parser, :program_name
def_delegators :opt_parser, :abort
def_delegators :opt_parser, :release
def_delegators :opt_parser, :release=
def_delegators :opt_parser, :version
def_delegators :opt_parser, :version=

答案 2 :(得分:0)

这适合我。

# @!method do_this
#   @return [mixed] See {Instance#do_this}.
# @!method do_that
#   @return [mixed] See {Instance#do_that}.
delegate *[
  :do_this,
  :do_that,
], to: :instance

其他:

  • gem yard-delegate并不适用于此类构造。它虽然很老了。
  • # @!method置于个人:method之上并不起作用(YARD忽略)。
  • 更好地指定实际方法返回值,它会为读者生成更舒适的列表。