AnyMethod is the base class for objects representing methods
- A
- M
- N
- P
MARSHAL_VERSION | = | 1 |
[RW] | add_line_numbers | Allows controlling whether |
[RW] | c_function | The C function that implements this method (if it was defined in a C file) |
[RW] | call_seq | Different ways to call this method |
[RW] | dont_rename_initialize | Don't rename #initialize to ::new |
[RW] | params | Parameters for this method |
Adds an_alias
as an alias for this method in
context
.
# File ../ruby/lib/rdoc/any_method.rb, line 47 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 ../ruby/lib/rdoc/generator/markup.rb, line 87 def add_line_numbers(src) return unless src.sub!(/\A(.*)(, line (\d+))/, '\1') first = $3.to_i - 1 last = first + src.count("\n") size = last.to_s.length line = first src.gsub!(/^/) 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'.
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.
Turns the method's token stream into HTML.
Prepends line numbers if add_line_numbers
is true.
# File ../ruby/lib/rdoc/generator/markup.rb, line 111 def markup_code return '' unless @token_stream src = "" @token_stream.each do |t| next unless t style = case t when RDoc::RubyToken::TkCONSTANT then 'ruby-constant' when RDoc::RubyToken::TkKW then 'ruby-keyword' when RDoc::RubyToken::TkIVAR then 'ruby-ivar' when RDoc::RubyToken::TkOp then 'ruby-operator' when RDoc::RubyToken::TkId then 'ruby-identifier' when RDoc::RubyToken::TkNode then 'ruby-node' when RDoc::RubyToken::TkCOMMENT then 'ruby-comment' when RDoc::RubyToken::TkREGEXP then 'ruby-regexp' when RDoc::RubyToken::TkSTRING then 'ruby-string' when RDoc::RubyToken::TkVal then 'ruby-value' end text = CGI.escapeHTML t.text if style then src << "<span class=\"#{style}\">#{text}</span>" else src << text end end # dedent the source indent = src.length lines = src.lines.to_a lines.shift if src =~ /\A.*#\ *File/i # remove '# File' comment lines.each do |line| if line =~ /^ *(?=\S)/ n = $&.length indent = n if n < indent break if n == 0 end end src.gsub!(/^#{' ' * 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
Loads this AnyMethod from array
.
For a loaded AnyMethod the following methods
will return cached values:
# File ../ruby/lib/rdoc/any_method.rb, line 110 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 =~ /#/ then $` else name = @full_name.split('::') name.pop name.join '::' end @file = RDoc::TopLevel.new array[10] if version > 0 end
A list of this method's method and yield parameters.
call-seq
params are preferred over parsed method and block
params.
# File ../ruby/lib/rdoc/any_method.rb, line 157 def param_list if @call_seq then params = @call_seq.split("\n").last params = params.sub(/.*?\((.*)\)/, '\1') params = params.sub(/(\{|do)\s*\|([^|]*)\|.*/, ',\2') elsif @params then params = @params.sub(/\((.*)\)/, '\1') params << ",#{@block_params}" if @block_params elsif @block_params then params = @block_params else return [] end params.gsub(/\s+/, '').split ',' 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 ../ruby/lib/rdoc/any_method.rb, line 179 def param_seq if @call_seq then params = @call_seq.split("\n").last params = params.sub(/[^( ]+/, '') params = params.sub(/(\|[^|]+\|)\s*\.\.\.\s*(end|\})/, '\1 \2') else params = @params.gsub(/\s*\#.*/, '') params = params.tr("\n", " ").squeeze(" ") params = "(#{params})" unless params[0] == ?( end if @block_params then # If this method has explicit block parameters, remove any explicit # &block params.sub!(/,?\s*&\w+/, '') block = @block_params.gsub(/\s*\#.*/, '') block = block.tr("\n", " ").squeeze(" ") if block[0] == ?( block.sub!(/^\(/, '').sub!(/\)/, '') end params << " { |#{block}| ... }" end params end