class RDoc::Comment
一个注释保存 RDoc::CodeObject
的文本注释,并提供了一种统一的方式来清理它并将其解析为 RDoc::Markup::Document
。
每个注释可能具有通过 format=
设置的不同标记格式。默认使用 ‘rdoc’。:markup: 指令告诉 RDoc
使用哪种格式。
请参阅 RDoc::MarkupReference
中关于指定 RDoc 源格式的指令。
属性
file[RW]
找到此注释的 RDoc::TopLevel
format[R]
此注释的格式。默认为 RDoc::Markup
line[RW]
此 Comment
编写所在的行
location[RW]
找到此注释的 RDoc::TopLevel
text[R]
此注释的文本
to_s[R]
此注释的文本
公共类方法
new(text = nil, location = nil, language = nil) 单击以切换源代码
创建一个新的注释,其中 text
在 RDoc::TopLevel
location
中找到。
# File rdoc/comment.rb, line 56 def initialize text = nil, location = nil, language = nil @location = location @text = text.nil? ? nil : text.dup @language = language @document = nil @format = 'rdoc' @normalized = false end
公共实例方法
empty?() 单击以切换源代码
如果注释的文本字符串为空,则该注释为空。
# File rdoc/comment.rb, line 128 def empty? @text.empty? end
encode!(encoding) 单击以切换源代码
黑客,可疑
# File rdoc/comment.rb, line 135 def encode! encoding @text = String.new @text, encoding: encoding self end
extract_call_seq(method) 单击以切换源代码
在注释中查找 ‘call-seq’ 以覆盖正常的参数处理。:call-seq: 从基线缩进。将消耗相同缩进级别和前缀的所有行。
例如,以下所有内容都将用作 :call-seq
# :call-seq: # ARGF.readlines(sep=$/) -> array # ARGF.readlines(limit) -> array # ARGF.readlines(sep, limit) -> array # # ARGF.to_a(sep=$/) -> array # ARGF.to_a(limit) -> array # ARGF.to_a(sep, limit) -> array
# File rdoc/comment.rb, line 95 def extract_call_seq method # we must handle situations like the above followed by an unindented first # comment. The difficulty is to make sure not to match lines starting # with ARGF at the same indent, but that are after the first description # paragraph. if /^(?<S> ((?!\n)\s)*+ (?# whitespaces except newline)) :?call-seq: (?<B> \g<S>(?<N>\n|\z) (?# trailing spaces))? (?<seq> (\g<S>(?!\w)\S.*\g<N>)* (?> (?<H> \g<S>\w+ (?# ' # ARGF' in the example above)) .*\g<N>)? (\g<S>\S.*\g<N> (?# other non-blank line))*+ (\g<B>+(\k<H>.*\g<N> (?# ARGF.to_a lines))++)*+ ) (?m:^\s*$|\z) /x =~ @text seq = $~[:seq] all_start, all_stop = $~.offset(0) @text.slice! all_start...all_stop seq.gsub!(/^\s*/, '') method.call_seq = seq end method end
format=(format) 单击以切换源代码
设置此注释的格式并重置任何已解析的文档
# File rdoc/comment.rb, line 143 def format= format @format = format @document = nil end
normalize() 单击以切换源代码
规范化文本。有关详细信息,请参阅 RDoc::Text#normalize_comment
# File rdoc/comment.rb, line 157 def normalize return self unless @text return self if @normalized # TODO eliminate duplicate normalization @text = normalize_comment @text @normalized = true self end
parse() 单击以切换源代码
将注释解析为 RDoc::Markup::Document
。解析后的文档会被缓存,直到文本发生更改。
调用超类方法
RDoc::Text#parse
# File rdoc/comment.rb, line 179 def parse return @document if @document @document = super @text, @format @document.file = @location @document end
remove_private() 单击以切换源代码
从此注释中删除私有部分。私有部分与注释标记齐平,以 --
开头,以 ++
结尾。对于 C 风格的注释,私有标记可能不会从注释的开头开始。
/* *-- * private *++ * public */
# File rdoc/comment.rb, line 200 def remove_private # Workaround for gsub encoding for Ruby 1.9.2 and earlier empty = '' empty = RDoc::Encoding.change_encoding empty, @text.encoding @text = @text.gsub(%r%^\s*([#*]?)--.*?^\s*(\1)\+\+\n?%m, empty) @text = @text.sub(%r%^\s*[#*]?--.*%m, '') end
text=(text) 单击以切换源代码
将此注释的文本替换为 text
并重置解析后的文档。
如果注释包含文档但没有文本,则会引发错误。
# File rdoc/comment.rb, line 214 def text= text raise RDoc::Error, 'replacing document-only comment is not allowed' if @text.nil? and @document @document = nil @text = text.nil? ? nil : text.dup end
tomdoc?() 单击以切换源代码
如果此注释采用 TomDoc 格式,则返回 true。
# File rdoc/comment.rb, line 225 def tomdoc? @format == 'tomdoc' end