Class: RDoc::AnyMethod
- Inherits:
-
MethodAttr
- Object
- CodeObject
- MethodAttr
- RDoc::AnyMethod
- Includes:
- Generator::Markup, TokenStream
- Defined in:
- lib/rdoc/any_method.rb,
lib/rdoc/generator/markup.rb
Overview
AnyMethod is the base class for objects representing methods
Direct Known Subclasses
Constant Summary collapse
- MARSHAL_VERSION =
:nodoc:
1
Constants included from Text
Class Attribute Summary collapse
-
.add_line_numbers ⇒ Object
Allows controlling whether
#markup_code
adds line numbers to the source code.
Instance Attribute Summary collapse
-
#c_function ⇒ Object
The C function that implements this method (if it was defined in a C file).
-
#call_seq ⇒ Object
Different ways to call this method.
-
#dont_rename_initialize ⇒ Object
Don't rename #initialize to ::new.
-
#params ⇒ Object
Parameters for this method.
Attributes inherited from MethodAttr
#aliases, #block_params, #is_alias_for, #singleton, #text, #visibility
Attributes inherited from CodeObject
#comment, #document_children, #document_self, #done_documenting, #file, #force_documentation, #line, #metadata, #offset, #parent, #received_nodoc, #section, #viewer
Instance Method Summary collapse
-
#add_alias(an_alias, context = nil) ⇒ Object
Adds
an_alias
as an alias for this method incontext
. -
#add_line_numbers(src) ⇒ Object
Prepend
src
with line numbers. -
#aref_prefix ⇒ Object
Prefix for
aref
is 'method'. -
#arglists ⇒ Object
The call_seq or the param_seq with method name, if there is no call_seq.
-
#initialize(text, name) ⇒ AnyMethod
constructor
Creates a new AnyMethod with a token stream
text
andname
. -
#markup_code ⇒ Object
Turns the method's token stream into HTML.
-
#marshal_dump ⇒ Object
Dumps this AnyMethod for use by ri.
-
#marshal_load(array) ⇒ Object
Loads this AnyMethod from
array
. -
#name ⇒ Object
Method name.
-
#param_list ⇒ Object
A list of this method's method and yield parameters.
-
#param_seq ⇒ Object
Pretty parameter list for this method.
Methods included from Generator::Markup
#aref_to, #as_href, #cvs_url, #description, #formatter
Methods included from TokenStream
#add_tokens, #collect_tokens, #pop_token, #token_stream, #tokens_to_s
Methods inherited from MethodAttr
#<=>, #aref, #documented?, #find_method_or_attribute, #find_see, #full_name, #html_name, #inspect, #name_prefix, #parent_name, #path, #pretty_name, #pretty_print, #see, #to_s, #type
Methods inherited from CodeObject
#display?, #documented?, #each_parent, #file_name, #full_name=, #ignore, #ignored?, #parent_file_name, #parent_name, #record_location, #start_doc, #stop_doc
Methods included from Text
encode_fallback, #expand_tabs, #flush_left, #markup, #normalize_comment, #parse, #strip_hashes, #strip_newlines, #strip_stars, #to_html, #wrap
Constructor Details
#initialize(text, name) ⇒ AnyMethod
Creates a new AnyMethod with a token stream text
and name
36 37 38 39 40 41 42 |
# File 'lib/rdoc/any_method.rb', line 36 def initialize text, name super @c_function = nil @dont_rename_initialize = false @token_stream = nil end |
Class Attribute Details
.add_line_numbers ⇒ Object
Allows controlling whether #markup_code
adds line numbers to the source code.
76 77 78 |
# File 'lib/rdoc/generator/markup.rb', line 76 def add_line_numbers @add_line_numbers end |
Instance Attribute Details
#c_function ⇒ Object
The C function that implements this method (if it was defined in a C file)
19 20 21 |
# File 'lib/rdoc/any_method.rb', line 19 def c_function @c_function end |
#call_seq ⇒ Object
Different ways to call this method
24 25 26 |
# File 'lib/rdoc/any_method.rb', line 24 def call_seq @call_seq end |
#dont_rename_initialize ⇒ Object
Don't rename #initialize to ::new
14 15 16 |
# File 'lib/rdoc/any_method.rb', line 14 def dont_rename_initialize @dont_rename_initialize end |
#params ⇒ Object
Parameters for this method
29 30 31 |
# File 'lib/rdoc/any_method.rb', line 29 def params @params end |
Instance Method Details
#add_alias(an_alias, context = nil) ⇒ Object
Adds an_alias
as an alias for this method in context
.
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File '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 |
#add_line_numbers(src) ⇒ Object
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.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File '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 |
#aref_prefix ⇒ Object
Prefix for aref
is 'method'.
64 65 66 |
# File 'lib/rdoc/any_method.rb', line 64 def aref_prefix 'method' end |
#arglists ⇒ Object
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.
73 74 75 76 77 78 79 |
# File 'lib/rdoc/any_method.rb', line 73 def arglists if @call_seq then @call_seq elsif @params then "#{name}#{param_seq}" end end |
#markup_code ⇒ Object
Turns the method's token stream into HTML.
Prepends line numbers if add_line_numbers
is true.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File '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 |
#marshal_dump ⇒ Object
Dumps this AnyMethod for use by ri. See also #marshal_load
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rdoc/any_method.rb', line 84 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 |
#marshal_load(array) ⇒ Object
Loads this AnyMethod from array
. For a loaded AnyMethod the following methods will return cached values:
-
#full_name
-
#parent_name
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File '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 |
#name ⇒ Object
Method name
If the method has no assigned name, it extracts it from #call_seq.
147 148 149 150 151 |
# File 'lib/rdoc/any_method.rb', line 147 def name return @name if @name @name = @call_seq[/^.*?\.(\w+)/, 1] || @call_seq if @call_seq end |
#param_list ⇒ Object
A list of this method's method and yield parameters. call-seq
params are preferred over parsed method and block params.
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File '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 |
#param_seq ⇒ Object
Pretty parameter list for this method. If the method's parameters were given by call-seq
it is preferred over the parsed values.
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File '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 |