AnyMethod is the base class for objects representing methods
Allows controlling whether #markup_code
adds line numbers to
the source code.
The C function that implements this method (if it was defined in a C file)
Different ways to call this method
Don’t rename #initialize to ::new
Parameters for this method
Creates a new AnyMethod with a token stream
text
and name
# File lib/rdoc/any_method.rb, line 33
def initialize text, name
super
@c_function = nil
@dont_rename_initialize = false
@token_stream = nil
end
Adds an_alias
as an alias for this method in
context
.
# File lib/rdoc/any_method.rb, line 44
def add_alias an_alias, context = nil
method = self.class.new an_alias.text, an_alias.new_name
method.record_location an_alias.file
method.singleton = self.singleton
method.params = self.params
method.visibility = self.visibility
method.comment = an_alias.comment
method.is_alias_for = self
@aliases << method
context.add_method method if context
method
end
Prepend src
with line numbers. Relies on the first line of a
source code listing having:
# File xxxxx, line dddd
If it has, line numbers are added an ‘, line dddd’ is removed.
# File lib/rdoc/generator/markup.rb, line 88
def add_line_numbers(src)
return unless src.sub!(%r\A(.*)(, line (\d+))/, '\1')
first = $3.to_i - 1
last = first + src.count("\n")
size = last.to_s.length
line = first
src.gsub!(%r^/) do
res = if line == first then
" " * (size + 1)
else
"<span class=\"line-num\">%2$*1$d</span> " % [size, line]
end
line += 1
res
end
end
Prefix for aref
is ‘method’.
# File lib/rdoc/any_method.rb, line 61
def aref_prefix
'method'
end
The #call_seq or the #param_seq with method name, if there is no call_seq.
Use this for displaying a method’s argument lists.
# File lib/rdoc/any_method.rb, line 70
def arglists
if @call_seq then
@call_seq
elsif @params then
"#{name}#{param_seq}"
end
end
Turns the method’s token stream into HTML.
Prepends line numbers if add_line_numbers
is true.
# File lib/rdoc/generator/markup.rb, line 112
def markup_code
return '' unless @token_stream
src = RDoc::TokenStream.to_html @token_stream
# dedent the source
indent = src.length
lines = src.lines.to_a
lines.shift if src =~ %r\A.*#\ *File/ # remove '# File' comment
lines.each do |line|
if line =~ %r^ *(?=\S)/
n = $&.length
indent = n if n < indent
break if n == 0
end
end
src.gsub!(%r^#{' ' * indent}/, '') if indent > 0
add_line_numbers(src) if self.class.add_line_numbers
src
end
Dumps this AnyMethod for use by ri. See also marshal_load
# File lib/rdoc/any_method.rb, line 81
def marshal_dump
aliases = @aliases.map do |a|
[a.name, parse(a.comment)]
end
[ MARSHAL_VERSION,
@name,
full_name,
@singleton,
@visibility,
parse(@comment),
@call_seq,
@block_params,
aliases,
@params,
@file.absolute_name,
]
end
Loads this AnyMethod from array
.
For a loaded AnyMethod the following methods
will return cached values:
# File lib/rdoc/any_method.rb, line 107
def marshal_load(array)
@dont_rename_initialize = nil
@is_alias_for = nil
@token_stream = nil
@aliases = []
version = array[0]
@name = array[1]
@full_name = array[2]
@singleton = array[3]
@visibility = array[4]
@comment = array[5]
@call_seq = array[6]
@block_params = array[7]
array[8].each do |new_name, comment|
add_alias RDoc::Alias.new(nil, @name, new_name, comment, @singleton)
end
@params = array[9]
@parent_name = if @full_name =~ %r#/ then
$`
else
name = @full_name.split('::')
name.pop
name.join '::'
end
@file = RDoc::TopLevel.new array[10] if version > 0
end
Method name
If the method has no assigned name, it extracts it from call_seq.
# File lib/rdoc/any_method.rb, line 144
def name
return @name if @name
@name = @call_seq[%r^.*?\.(\w+)/, 1] || @call_seq if @call_seq
end
A list of this method’s method and yield parameters. call-seq
params are preferred over parsed method and block params.
# File lib/rdoc/any_method.rb, line 154
def param_list
if @call_seq then
params = @call_seq.split("\n").last
params = params.sub(%r.*?\((.*)\)/, '\1')
params = params.sub(%r(\{|do)\s*\|([^|]*)\|.*/, ',\2')
elsif @params then
params = @params.sub(%r\((.*)\)/, '\1')
params << ",#{@block_params}" if @block_params
elsif @block_params then
params = @block_params
else
return []
end
params = params.gsub(%r\s+/, '').split ','
params.map { |param| param.sub(%r=.*/, '') }
end
Pretty parameter list for this method. If the method’s parameters were
given by call-seq
it is preferred over the parsed values.
# File lib/rdoc/any_method.rb, line 178
def param_seq
if @call_seq then
params = @call_seq.split("\n").last
params = params.sub(%r[^( ]+/, '')
params = params.sub(%r(\|[^|]+\|)\s*\.\.\.\s*(end|\})/, '\1 \2')
elsif @params then
params = @params.gsub(%r\s*\#.*/, '')
params = params.tr("\n", " ").squeeze(" ")
params = "(#{params})" unless params[0] == ((
else
params = ''
end
if @block_params then
# If this method has explicit block parameters, remove any explicit
# &block
params.sub!(%r,?\s*&\w+/, '')
block = @block_params.gsub(%r\s*\#.*/, '')
block = block.tr("\n", " ").squeeze(" ")
if block[0] == ((
block.sub!(%r^\(/, '').sub!(%r\)/, '')
end
params << " { |#{block}| ... }"
end
params
end
/ | Search |
---|---|
? | Show this help |