class RDoc::CodeObject
RDoc
代码树的基类。
我们包含上下文(即容器)和其他元素(方法、属性等)的通用内容
这是 CodeObject
子类的树
属性
我们的注释
我们是否记录子元素的文档?
我们是否记录自身的文档?
我们是否已完成文档记录(即,是否遇到了 :enddoc:)?
此代码对象在哪个文件中定义
强制记录此 CodeObject
的文档
此 CodeObject
在 file
中定义的行
此 CodeObject
的任意元数据的哈希
当混入到一个类中时,这指向它最初定义的上下文。
设置父 CodeObject
我们是否收到过 :nodoc:
指令?
设置此 CodeObject
所在的节
此对象的 RDoc::Store
。
我们是代码的模型,但我们知道在某些时候,我们将被查看器处理。通过实现 Viewable 协议,查看器可以将自己与这些对象关联起来。
公共类方法
创建一个新的 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
替换我们的注释,除非它是空的。
# 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
此 CodeObject
是否应在输出中显示?
如果满足以下条件,则应显示代码对象
-
该项没有 nodoc,或者不在包含 nodoc 的容器中
-
该项没有被忽略
-
该项有文档记录且没有被抑制
# File rdoc/code_object.rb, line 169 def display? @document_self and not @ignored and (documented? or not @suppressed) end
启用或禁用此 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
启用或禁用此 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
此对象是否包含内容的注释,或者 received_nodoc
是否为真?
# File rdoc/code_object.rb, line 200 def documented? @received_nodoc or !@comment.empty? end
打开/关闭文档记录,并打开/关闭 document_self
和 document_children
。
一旦文档记录被关闭(通过 :enddoc:
),该对象将拒绝打开 document_self
或 document_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
产生此 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
找到此 CodeObject
的文件名。
# File rdoc/code_object.rb, line 239 def file_name return unless @file @file.absolute_name end
强制记录此对象的文档,除非文档已被 :enddoc 关闭
# File rdoc/code_object.rb, line 251 def force_documentation=(value) @force_documentation = value unless @done_documenting end
设置 full_name,覆盖任何计算出的完整名称。
设置为 nil
以清除 RDoc 的缓存值
# File rdoc/code_object.rb, line 260 def full_name= full_name @full_name = full_name end
使用此方法忽略 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
此 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
我们的父 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
我们父类的文件名
# File rdoc/code_object.rb, line 337 def parent_file_name @parent ? @parent.base_name : '(unknown)' end
我们父类的名称
# File rdoc/code_object.rb, line 344 def parent_name @parent ? @parent.full_name : '(unknown)' end
记录定义此代码对象的 RDoc::TopLevel
(文件)
# File rdoc/code_object.rb, line 351 def record_location top_level @ignored = false @suppressed = false @file = top_level end
此 CodeObject
所在的节。节允许在类或模块内部对常量、属性和方法进行分组。
# File rdoc/code_object.rb, line 361 def section return @section if @section @section = parent.add_section @section_title if parent end
启用文档捕获,除非文档已被 :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
禁用文档捕获
# File rdoc/code_object.rb, line 383 def stop_doc return unless @track_visibility @document_self = false @document_children = false end
设置包含此 CodeObject
的 store
# 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
使用此方法抑制 CodeObject
及其所有子元素,直到在下一个文件中看到它们或发现文档。具有文档的被抑制项将被显示,而具有文档的被忽略项可能不会被显示。
# File rdoc/code_object.rb, line 410 def suppress return unless @track_visibility @suppressed = true stop_doc end