class RDoc::CodeObject

RDoc 代码树的基类。

我们包含上下文(即容器)和其他元素(方法、属性等)的通用内容

这是 CodeObject 子类的树

属性

comment[R]

我们的注释

document_children[R]

我们是否记录子元素的文档?

document_self[R]

我们是否记录自身的文档?

done_documenting[R]

我们是否已完成文档记录(即,是否遇到了 :enddoc:)?

file[R]

此代码对象在哪个文件中定义

force_documentation[R]

强制记录此 CodeObject 的文档

line[RW]

CodeObjectfile 中定义的行

metadata[R]

CodeObject 的任意元数据的哈希

mixin_from[RW]

当混入到一个类中时,这指向它最初定义的上下文。

parent[W]

设置父 CodeObject

received_nodoc[R]

我们是否收到过 :nodoc: 指令?

section[W]

设置此 CodeObject 所在的节

store[R]

此对象的 RDoc::Store

viewer[RW]

我们是代码的模型,但我们知道在某些时候,我们将被查看器处理。通过实现 Viewable 协议,查看器可以将自己与这些对象关联起来。

公共类方法

new() 单击以切换源代码

创建一个新的 CodeObject,它将记录自身及其子元素的文档

# File rdoc/code_object.rb, line 107
def initialize
  @metadata         = {}
  @comment          = ''
  @parent           = nil
  @parent_name      = nil # for loading
  @parent_class     = nil # for loading
  @section          = nil
  @section_title    = nil # for loading
  @file             = nil
  @full_name        = nil
  @store            = nil
  @track_visibility = true
  @mixin_from       = nil

  initialize_visibility
end

公共实例方法

comment=(comment) 单击以切换源代码

comment 替换我们的注释,除非它是空的。

# File rdoc/code_object.rb, line 141
def comment=(comment)
  @comment = case comment
             when NilClass               then ''
             when RDoc::Markup::Document then comment
             when RDoc::Comment          then comment.normalize
             else
               if comment and not comment.empty? then
                 normalize_comment comment
               else
                 # HACK correct fix is to have #initialize create @comment
                 #      with the correct encoding
                 if String === @comment and @comment.empty? then
                   @comment = RDoc::Encoding.change_encoding @comment, comment.encoding
                 end
                 @comment
               end
             end
end
display?() 单击以切换源代码

CodeObject 是否应在输出中显示?

如果满足以下条件,则应显示代码对象

  • 该项没有 nodoc,或者不在包含 nodoc 的容器中

  • 该项没有被忽略

  • 该项有文档记录且没有被抑制

# File rdoc/code_object.rb, line 169
def display?
  @document_self and not @ignored and
    (documented? or not @suppressed)
end
document_children=(document_children) 单击以切换源代码

启用或禁用此 CodeObject 的子元素的文档记录,除非它已被 :enddoc 关闭

# File rdoc/code_object.rb, line 178
def document_children=(document_children)
  return unless @track_visibility

  @document_children = document_children unless @done_documenting
end
document_self=(document_self) 单击以切换源代码

启用或禁用此 CodeObject 的文档记录,除非它已被 :enddoc: 关闭。如果参数为 nil,则表示文档已由 :nodoc: 关闭。

# File rdoc/code_object.rb, line 189
def document_self=(document_self)
  return unless @track_visibility
  return if @done_documenting

  @document_self = document_self
  @received_nodoc = true if document_self.nil?
end
documented?() 单击以切换源代码

此对象是否包含内容的注释,或者 received_nodoc 是否为真?

# File rdoc/code_object.rb, line 200
def documented?
  @received_nodoc or !@comment.empty?
end
done_documenting=(value) 单击以切换源代码

打开/关闭文档记录,并打开/关闭 document_selfdocument_children

一旦文档记录被关闭(通过 :enddoc:),该对象将拒绝打开 document_selfdocument_children,因此 :doc::start_doc: 指令在当前文件中不起作用。

# File rdoc/code_object.rb, line 213
def done_documenting=(value)
  return unless @track_visibility
  @done_documenting  = value
  @document_self     = !value
  @document_children = @document_self
end
each_parent() { |code_object| ... } 单击以切换源代码

产生此 CodeObject 的每个父类。另请参阅 RDoc::ClassModule#each_ancestor

# File rdoc/code_object.rb, line 224
def each_parent
  code_object = self

  while code_object = code_object.parent do
    yield code_object
  end

  self
end
file_name() 单击以切换源代码

找到此 CodeObject 的文件名。

另请参阅 RDoc::Context#in_files

# File rdoc/code_object.rb, line 239
def file_name
  return unless @file

  @file.absolute_name
end
force_documentation=(value) 单击以切换源代码

强制记录此对象的文档,除非文档已被 :enddoc 关闭

# File rdoc/code_object.rb, line 251
def force_documentation=(value)
  @force_documentation = value unless @done_documenting
end
full_name=(full_name) 单击以切换源代码

设置 full_name,覆盖任何计算出的完整名称。

设置为 nil 以清除 RDoc 的缓存值

# File rdoc/code_object.rb, line 260
def full_name= full_name
  @full_name = full_name
end
ignore() 单击以切换源代码

使用此方法忽略 CodeObject 及其所有子元素,直到再次找到它们(调用 record_location)。被忽略的项目将不会在文档中显示。

请参阅 github 问题 #55

忽略状态是临时的,以便隐藏实现细节。在处理完一个文件后,RDoc 允许所有类和模块向先前创建的类添加新的文档。

如果一个类被忽略(通过 stopdoc),然后在稍后重新打开并添加了其他文档,则应显示该类。如果一个类被忽略且从未重新打开,则不应显示该类。ignore 标志允许这种情况发生。

# File rdoc/code_object.rb, line 280
def ignore
  return unless @track_visibility

  @ignored = true

  stop_doc
end
ignored?() 单击以切换源代码

此类是否已被忽略?

另请参阅 ignore

# File rdoc/code_object.rb, line 293
def ignored?
  @ignored
end
options() 单击以切换源代码

CodeObject 所附加的存储中的 options 实例,如果 CodeObject 未附加,则为默认的 options 实例。

这由 Text#snippet 使用

# File rdoc/code_object.rb, line 303
def options
  if @store and @store.rdoc then
    @store.rdoc.options
  else
    RDoc::Options.new
  end
end
parent() 单击以切换源代码

我们的父 CodeObject。对于从旧 RI 数据存储加载的类,父类可能缺失。

# File rdoc/code_object.rb, line 315
def parent
  return @parent if @parent
  return nil unless @parent_name

  if @parent_class == RDoc::TopLevel then
    @parent = @store.add_file @parent_name
  else
    @parent = @store.find_class_or_module @parent_name

    return @parent if @parent

    begin
      @parent = @store.load_class @parent_name
    rescue RDoc::Store::MissingFileError
      nil
    end
  end
end
parent_file_name() 单击以切换源代码

我们父类的文件名

# File rdoc/code_object.rb, line 337
def parent_file_name
  @parent ? @parent.base_name : '(unknown)'
end
parent_name() 单击以切换源代码

我们父类的名称

# File rdoc/code_object.rb, line 344
def parent_name
  @parent ? @parent.full_name : '(unknown)'
end
record_location(top_level) 单击以切换源代码

记录定义此代码对象的 RDoc::TopLevel(文件)

# File rdoc/code_object.rb, line 351
def record_location top_level
  @ignored    = false
  @suppressed = false
  @file       = top_level
end
section() 单击以切换源代码

CodeObject 所在的节。节允许在类或模块内部对常量、属性和方法进行分组。

# File rdoc/code_object.rb, line 361
def section
  return @section if @section

  @section = parent.add_section @section_title if parent
end
start_doc() 单击以切换源代码

启用文档捕获,除非文档已被 :enddoc 关闭

# File rdoc/code_object.rb, line 371
def start_doc
  return if @done_documenting

  @document_self = true
  @document_children = true
  @ignored    = false
  @suppressed = false
end
stop_doc() 单击以切换源代码

禁用文档捕获

# File rdoc/code_object.rb, line 383
def stop_doc
  return unless @track_visibility

  @document_self = false
  @document_children = false
end
store=(store) 单击以切换源代码

设置包含此 CodeObjectstore

# File rdoc/code_object.rb, line 393
def store= store
  @store = store

  return unless @track_visibility

  if :nodoc == options.visibility then
    initialize_visibility
    @track_visibility = false
  end
end
suppress() 单击以切换源代码

使用此方法抑制 CodeObject 及其所有子元素,直到在下一个文件中看到它们或发现文档。具有文档的被抑制项将被显示,而具有文档的被忽略项可能不会被显示。

# File rdoc/code_object.rb, line 410
def suppress
  return unless @track_visibility

  @suppressed = true

  stop_doc
end
suppressed?() 单击以切换源代码

此类是否已被抑制?

另请参阅 suppress

# File rdoc/code_object.rb, line 423
def suppressed?
  @suppressed
end