ruby 如何使用YARD记录子类方法?

whitzsjs  于 2022-12-03  发布在  Ruby
关注(0)|答案(2)|浏览(138)

我如何记录一个子类覆盖的方法,而不是多余的?例如...

class Parent
  # Is this the parent?
  # @return [Boolean]
  def parent?
    true
  end
end

class Child < Parent
  def parent?
    false
  end
end

YARD会产生类似这样的结果。

类:父级

示例方法摘要

#parent? ⇒ Boolean

这是父级吗?

类别:子系

示例方法摘要

#parent? ⇒ Boolean

生成的YARD文档将不会在“Child#parent?”的文档中包含“Is this the parent?”,也不会指出它是一个替代。
我希望看到这样的东西:

类:父级

示例方法摘要

#parent? ⇒ Boolean

这是父级吗?

类别:子系

示例方法摘要

#parent? ⇒ Boolean

这是父级吗?

从父级继承的方法

#parent?

我不希望将文档复制到每个子类中。

bvjxkvbb

bvjxkvbb1#

简单答案

正确的方法是在返回类型后面加上一个自由格式的描述,也可以记录方法本身。例如:

class Parent
  # True when a passed argument has Parent
  # as an ancestor.
  #
  # @return [Boolean] ancestor of subclass
  def parent?
    true
  end
end

更全面的示例

您还可以通过利用标记语法的自由格式部分和标记语言(默认为RDoc)来提供用法示例和更详细的文档。

class Parent
  # True when passed argument includes
  # +Parent+ as an ancestor.
  #
  # @example Cousin isn't subclass of Parent
  #   parent? Cousin.new #=> false
  # @example Child is a subclass of Parent
  #   parent? Child.new #=> true
  # @param obj [Class, #ancestors] Class,
  #   instance, or other object that can
  #   #respond_to?(:ancestors)
  # @return [Boolean] ancestors of _obj_
  #   includes +Parent+ class
  def parent? obj
    obj.class.ancestors.include? self.class
  end
end

可能还有更优雅的方法来实现这一点,我在电话上输入代码,所以 * caveat emptor *,因为我还没有实际测试代码或验证YARD输出的格式。尽管如此,一般的方法是合理的,我经常使用这种类型的格式。

核心理念

基本上,核心思想是:
1.如果要将每个标记项的说明与该项关联,请将其置于行内。大多数标记支持自由格式的说明或标题,这些说明或标题的格式将使其与标记元素在视觉上关联。
1.为类、方法、参数、示例等使用标签和格式。您不必将所有内容都塞进一个标签中,尽管在您的 * 特定 * 示例中,您可能希望这样做以保持视觉关联。
1.在 * 大多数 * 情况下,您可以使用缩进对长的自由格式文本进行换行。
1.有几个例外的 Package (例如,示例标题与缩进代码块是说明性的),但您通常可以解决与RDoc或Markdown语法。
1.如果你不能得到你想要的东西,参考第四条的一些替代方法,或者找到一个不同的标签或标记来代表你的意图。
1.如果你不能从盒子里得到你想要的东西,宏、自定义标签和指令可以让你做一些奇怪而美妙的事情。* 注意:我几乎从来不需要求助于此,但如果你需要的话,功能就在那里。*
在大多数情况下,越简单越好。理解YARD如何以及何时不能简洁地表示作者的意图无疑是一种艺术形式,但是很难按预期标记或呈现的代码可能表明需要 * 重构代码 *,而不仅仅是修改YARD标记。

牢记YARD的主要目的

请记住,YARD主要用于文档的**元素,并为呈现引擎或文档阅读器提供提示。它本身不是一种成熟的标记语言,不能像使用Steep的RBS那样验证签名,也不能强制执行任何类型的调用者/被调用者契约。
所有这些都只是注解。让你的代码尽可能地自我解释,然后把YARD作为一种方法,通过标记文档元素来改进必要的注解,以便标记语言生成更好的输出。

p4rjhz4m

p4rjhz4m2#

您可以在每个单独的方法上使用引用标记来引用父方法。

class Child < Parent
  # (see Parent#parent?)
  def parent?
    false
  end
end

Child#parent?将具有与Parent::parent?相同的文档

相关问题