使用 YARD 记录宏生成方法的参数

Documenting parameters for macro generated methods with YARD

输入以下内容:

class A
  # @!macro [attach] add_setting
  #   @!attribute [rw] 
  #   @!method =(value)
  def self.add_setting(setting)
  end

  # @param value [String] Hexadecimal representation of color
  add_setting :color
end

YARD 0.9.12 生成以下警告(自 ~> 0.8 以来新增):

[warn]: @param tag has unknown parameter name: value
    in file `test.rb' near line 9

构建此文档以避免警告的正确方法是什么? (此模式用于 rspec。)

rspec 使用此文档是正确的,您可以看到他们指定使用定义的 macro

# @macro [attach] add_setting
#   @!attribute [rw] 
#   @!method =(value)
# .....
# @macro add_setting
# Run examples over DRb (default: `false`). RSpec doesn't supply the DRb
# server, but you can use tools like spork.
add_setting :drb

如果您注意到 @macro add_setting 声明,这会告诉 yard 在记录此方法时使用 add_setting macro。在这种情况下 </code> 表示 <code>drb 因此它将记录 drb 属性。 (不是个别 getter/setter 方法)

如您所见,他们在记录这些方法时没有声明数据类型,因为这些类型可能因记录的不同方法而异。相反,他们在方法的描述中指定了默认值。

选项 1(不确定为什么有效)

只需定义 getter 和 setter 而不是使用看起来像

!@attribute 声明
class A
  # @!macro [attach] add_setting
  #   @!method 
  #     @return [Object] the  of the a 
  #   @!method =(value)
  def self.add_setting(setting)
  end
  # @param value [String] Hexadecimal representation of color
  add_setting :color
end

@return 很重要,否则警告会返回

选项 2

如果你真的想要这个功能,你可以使用 @overload,它看起来像

class A
  # @!macro [attach] add_setting
  #   @!method 
  #     @return [Object] the  of the a
  #   @!method =(value)
  def self.add_setting(setting)
  end
  # @overload color=(value)
  #   @param value [String] Hexadecimal representation of color
  # @macro add_setting
  add_setting :color
  add_setting :name
end

这将导致 namecolor 的 getter 方法被记录为:

  • 名称 => 对象
    • Returns 名字
  • 颜色 => 对象
    • Returns a
    • 的颜色

但是 setter 方法看起来像

  • 名称=(值)=> 对象
  • color=(value) => 对象
    • 参数:
    • value(String) -- 颜色的十六进制表示

因为我们超载了 color=.

话虽这么说,但这并不能真正帮助您,因为它可能包括单独记录这些方法。

其他选项:

  • 忽略警告
  • 全部警告完全-q
  • 检查这个 Thread