Class: RDoc::MethodAttr
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
CodeObject
|
|
Instance Chain:
|
|
Inherits: |
RDoc::CodeObject
|
Defined in: | lib/rdoc/method_attr.rb, lib/rdoc/generator/markup.rb |
Overview
Abstract class representing either a method or an attribute.
Constant Summary
Text - Included
Class Attribute Summary
-
.add_line_numbers
rw
Allows controlling whether #markup_code adds line numbers to the source code.
Class Method Summary
- .new(text, name) ⇒ MethodAttr constructor
CodeObject - Inherited
.new | Creates a new CodeObject that will document itself and its children. |
Instance Attribute Summary
-
#block_params
rw
Parameters yielded by the called block.
-
#block_params=(value)
rw
Attempts to sanitize the content passed by the Ruby parser: remove outer parentheses, etc.
-
#call_seq
rw
Different ways to call this method.
-
#is_alias_for
rw
The method/attribute we're aliasing.
-
#name
rw
Name of this method/attribute.
-
#params
rw
Parameters for this method.
-
#singleton
rw
Is this a singleton method/attribute?
-
#visibility
rw
public, protected, private.
-
#aliases
readonly
Array of other names for this method/attribute.
-
#arglists
readonly
The call_seq or the param_seq with method name, if there is no call_seq.
-
#documented? ⇒ Boolean
readonly
A method/attribute is documented if any of the following is true: - it was marked with :nodoc:; - it has a comment; - it is an alias for a documented method; - it has a #see method that is documented.
-
#param_seq
readonly
Pretty parameter list for this method.
-
#text
readonly
Source file token stream.
-
#store=(store)
writeonly
Sets the store for this class or module and its contained code objects.
CodeObject - Inherited
#comment | Our comment. |
#comment= | Replaces our comment with |
#document_children | Do we document our children? |
#document_children= | Enables or disables documentation of this CodeObject's children unless it has been turned off by :enddoc: |
#document_self | Do we document ourselves? |
#document_self= | Enables or disables documentation of this CodeObject unless it has been turned off by :enddoc:. |
#done_documenting | Are we done documenting (ie, did we come across a :enddoc:)? |
#done_documenting= | Turns documentation on/off, and turns on/off |
#force_documentation | Force documentation of this CodeObject. |
#force_documentation= | Force the documentation of this object unless documentation has been turned off by :enddoc: |
#line | Line in |
#offset | Offset in |
#parent | Our parent CodeObject. |
#parent= | Sets the parent CodeObject. |
#section | The section this CodeObject is in. |
#section= | Set the section this CodeObject is in. |
#store | The Store for this object. |
#store= | Sets the |
#viewer | We are the model of the code, but we know that at some point we will be worked on by viewers. |
#display? | Should this CodeObject be displayed in output? |
#documented? | Does this object have a comment with content or is |
#file | Which file this code object was defined in. |
#ignored? | Has this class been ignored? |
#metadata | Hash of arbitrary metadata for this CodeObject. |
#received_nodoc | Did we ever receive a |
#suppressed? | Has this class been suppressed? |
#full_name= | Sets the full_name overriding any computed full name. |
Instance Method Summary
-
#<=>(other)
Order by #singleton then #name
-
#add_alias(an_alias, context)
Abstract method.
-
#add_line_numbers(src)
Prepend
src
with line numbers. -
#aref
HTML fragment reference for this method.
-
#aref_prefix
Prefix for #aref, defined by subclasses.
-
#full_name
Full method/attribute name including namespace.
-
#html_name
HTML id-friendly method/attribute name.
-
#markup_code
Turns the method's token stream into HTML.
-
#name_prefix
'::' for a class method/attribute, '#' for an instance method.
-
#output_name(context)
Name for output to HTML.
-
#parent_name
Name of our parent with special handling for un-marshaled methods.
-
#path
Path to this method for use with HTML generator output.
-
#pretty_name
Method/attribute name with class/instance indicator.
-
#search_record
Used by Generator::JsonIndex to create a record for the search engine.
-
#see
A method/attribute to look at, in particular if this method/attribute has no documentation.
-
#type
Type of method/attribute (class or instance).
CodeObject - Inherited
#each_parent | Yields each parent of this CodeObject. |
#file_name | File name where this CodeObject was found. |
#ignore | Use this to ignore a CodeObject and all its children until found again (#record_location is called). |
#options | The options instance from the store this CodeObject is attached to, or a default options instance if the CodeObject is not attached. |
#parent_file_name | File name of our parent. |
#parent_name | Name of our parent. |
#record_location | Records the TopLevel (file) where this code object was defined. |
#start_doc | Enable capture of documentation unless documentation has been turned off by :enddoc: |
#stop_doc | Disable capture of documentation. |
#suppress | Use this to suppress a CodeObject and all its children until the next file it is seen in or documentation is discovered. |
Generator::Markup - Included
#aref_to | Generates a relative URL from this object's path to |
#as_href | Generates a relative URL from |
#cvs_url | Build a webcvs URL starting for the given |
#description | Handy wrapper for marking up this object's comment. |
#formatter | Creates an Markup::ToHtmlCrossref formatter. |
Text - Included
#expand_tabs | Expands tab characters in #text to eight spaces. |
#flush_left | Flush #text left based on the shortest line. |
#markup | Convert a string in markup format into HTML. |
#normalize_comment | Strips hashes, expands tabs then flushes #text to the left. |
#parse | Normalizes #text then builds a Markup::Document from it. |
#snippet | The first |
#strip_hashes | Strips leading # characters from #text |
#strip_newlines | Strips leading and trailing n characters from #text |
#strip_stars | Strips /* */ style comments. |
#to_html | Converts ampersand, dashes, ellipsis, quotes, copyright and registered trademark symbols in #text to properly encoded characters. |
#wrap | Wraps |
Constructor Details
.new(text, name) ⇒ MethodAttr
Class Attribute Details
.add_line_numbers (rw)
Allows controlling whether #markup_code adds line numbers to the source code.
# File 'lib/rdoc/generator/markup.rb', line 74
attr_accessor :add_line_numbers
Instance Attribute Details
#aliases (readonly)
Array of other names for this method/attribute
# File 'lib/rdoc/method_attr.rb', line 31
attr_reader :aliases
#arglists (readonly)
The call_seq or the param_seq with method name, if there is no call_seq.
# File 'lib/rdoc/method_attr.rb', line 63
attr_reader :arglists
#block_params (rw)
Parameters yielded by the called block
# File 'lib/rdoc/method_attr.rb', line 48
attr_reader :block_params
#block_params=(value) (rw)
Attempts to sanitize the content passed by the Ruby parser: remove outer parentheses, etc.
# File 'lib/rdoc/method_attr.rb', line 232
def block_params=(value) # 'yield.to_s' or 'assert yield, msg' return @block_params = '' if value =~ /^[\.,]/ # remove trailing 'if/unless ...' return @block_params = '' if value =~ /^(if|unless)\s/ value = $1.strip if value =~ /^(.+)\s(if|unless)\s/ # outer parentheses value = $1 if value =~ /^\s*\((.*)\)\s*$/ value = value.strip # proc/lambda return @block_params = $1 if value =~ /^(proc|lambda)(\s*\{|\sdo)/ # surrounding ... or [...] value = $1.strip if value =~ /^\(.*)\$/ value = $1.strip if value =~ /^\[(.*)\]$/ return @block_params = '' if value.empty? # global variable return @block_params = 'str' if value =~ /^\$[&0-9]$/ # wipe out array/hash indices value.gsub!(/(\w)\[[^\[]+\]/, '\1') # remove @ from class/instance variables value.gsub!(/@@?([a-z0-9_]+)/, '\1') # method calls => method name value.gsub!(/([A-Z:a-z0-9_])\.([a-z0-9_])(\s*\(\s*[a-z0-9_.,\s]*\s*\)\s*)?/) do case $2 when 'to_s' then $1 when 'const_get' then 'const' when 'new' then $1.split('::').last. # ClassName => class_name gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). downcase else $2 end end # class prefixes value.gsub!(/[A-Za-z0-9_:]+::/, '') # simple expressions value = $1 if value =~ /^([a-z0-9_])\s*[-*\/]/ @block_params = value.strip end
#call_seq (rw)
Different ways to call this method
# File 'lib/rdoc/method_attr.rb', line 58
attr_accessor :call_seq
#documented? ⇒ Boolean
(readonly)
A method/attribute is documented if any of the following is true:
-
it was marked with :nodoc:;
-
it has a comment;
-
it is an alias for a documented method;
-
it has a #see method that is documented.
# File 'lib/rdoc/method_attr.rb', line 131
def documented? super or (is_alias_for and is_alias_for.documented?) or (see and see.documented?) end
#is_alias_for (rw)
The method/attribute we're aliasing
# File 'lib/rdoc/method_attr.rb', line 36
attr_accessor :is_alias_for
#name (rw)
Name of this method/attribute.
# File 'lib/rdoc/method_attr.rb', line 11
attr_accessor :name
#param_seq (readonly)
Pretty parameter list for this method
# File 'lib/rdoc/method_attr.rb', line 68
attr_reader :param_seq
#params (rw)
Parameters for this method
# File 'lib/rdoc/method_attr.rb', line 53
attr_accessor :params
#singleton (rw)
Is this a singleton method/attribute?
# File 'lib/rdoc/method_attr.rb', line 21
attr_accessor :singleton
#store=(store) (writeonly)
Sets the store for this class or module and its contained code objects.
# File 'lib/rdoc/method_attr.rb', line 159
def store= store super @file = @store.add_file @file.full_name if @file end
#text (readonly)
Source file token stream
# File 'lib/rdoc/method_attr.rb', line 26
attr_reader :text
#visibility (rw)
public, protected, private
# File 'lib/rdoc/method_attr.rb', line 16
attr_accessor :visibility
Instance Method Details
#<=>(other)
Order by #singleton then #name
#add_alias(an_alias, context)
Abstract method. Contexts in their building phase call this to register a new alias for this known method/attribute.
-
creates a new AnyMethod/Attribute named
an_alias.new_name
; -
adds
self
as an alias for the new method or attribute -
adds the method or attribute to #aliases
-
adds the method or attribute to
context
.
# File 'lib/rdoc/method_attr.rb', line 208
def add_alias(an_alias, context) raise NotImplementedError end
#add_line_numbers(src)
Prepend src
with line numbers. Relies on the first line of a source code listing having:
# File xxxxx, line dddd
If it has this comment then line numbers are added to src
and the , line dddd
portion of the comment is removed.
# File 'lib/rdoc/generator/markup.rb', line 86
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
HTML fragment reference for this method
# File 'lib/rdoc/method_attr.rb', line 215
def aref type = singleton ? 'c' : 'i' # % characters are not allowed in html names => dash instead "#{aref_prefix}-#{type}-#{html_name}" end
#aref_prefix
Prefix for #aref, defined by subclasses.
# File 'lib/rdoc/method_attr.rb', line 224
def aref_prefix raise NotImplementedError end
#full_name
Full method/attribute name including namespace
# File 'lib/rdoc/method_attr.rb', line 299
def full_name @full_name ||= "#{parent_name}#{pretty_name}" end
#html_name
HTML id-friendly method/attribute name
# File 'lib/rdoc/method_attr.rb', line 290
def html_name require 'cgi' CGI.escape(@name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '') end
#markup_code
Turns the method's token stream into HTML.
Prepends line numbers if .add_line_numbers is true.
# File 'lib/rdoc/generator/markup.rb', line 110
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 =~ /\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 RDoc::MethodAttr.add_line_numbers src end
#name_prefix
'::' for a class method/attribute, '#' for an instance method.
# File 'lib/rdoc/method_attr.rb', line 318
def name_prefix @singleton ? '::' : '#' end
#output_name(context)
Name for output to HTML. For class methods the full name with a “.” is used like SomeClass.method_name
. For instance methods the class name is used if context
does not match the parent.
- This is to help prevent people from using
-
to call class methods.
# File 'lib/rdoc/method_attr.rb', line 329
def output_name context return "#{name_prefix}#{@name}" if context == parent "#{parent_name}#{@singleton ? '.' : '#'}#{@name}" end
#parent_name
Name of our parent with special handling for un-marshaled methods
# File 'lib/rdoc/method_attr.rb', line 359
def parent_name @parent_name || super end
#path
Path to this method for use with HTML generator output.
# File 'lib/rdoc/method_attr.rb', line 352
def path "#{@parent.path}##{aref}" end
#pretty_name
Method/attribute name with class/instance indicator
# File 'lib/rdoc/method_attr.rb', line 338
def pretty_name "#{name_prefix}#{@name}" end
#search_record
Used by Generator::JsonIndex to create a record for the search engine.
#see
A method/attribute to look at, in particular if this method/attribute has no documentation.
It can be a method/attribute of the superclass or of an included module, including the Kernel module, which is always appended to the included modules.
Returns nil
if there is no such method/attribute. The #is_alias_for method/attribute, if any, is not included.
Templates may generate a “see also …” if this method/attribute has documentation, and “see …” if it does not.
# File 'lib/rdoc/method_attr.rb', line 151
def see @see = find_see if @see == false @see end
#type
Type of method/attribute (class or instance)
# File 'lib/rdoc/method_attr.rb', line 345
def type singleton ? 'class' : 'instance' end