class RDoc::Comment

一个注释保存 RDoc::CodeObject 的文本注释,并提供了一种统一的方式来清理它并将其解析为 RDoc::Markup::Document

每个注释可能具有通过 format= 设置的不同标记格式。默认使用 ‘rdoc’。:markup: 指令告诉 RDoc 使用哪种格式。

请参阅 RDoc::MarkupReference 中关于指定 RDoc 源格式的指令。

属性

document[W]

覆盖 parse 返回的内容。当此注释没有 text 源时使用。

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) 单击以切换源代码

创建一个新的注释,其中 textRDoc::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