Abstract class representing either a method or an attribute.
Creates a new MethodAttr from token stream text and method or attribute name name.
Usually this is called by super from a subclass.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 78
def initialize text, name
super()
@text = text
@name = name
@aliases = []
@is_alias_for = nil
@parent_name = nil
@singleton = nil
@visibility = :public
@see = false
@arglists = nil
@block_params = nil
@call_seq = nil
@param_seq = nil
@params = nil
end
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 ruby-3.1.2/lib/rdoc/method_attr.rb, line 209
def add_alias(an_alias, context)
raise NotImplementedError
end
HTML fragment reference for this method
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 216
def aref
type = singleton ? 'c' : 'i'
# % characters are not allowed in html names => dash instead
"#{aref_prefix}-#{type}-#{html_name}"
end
Prefix for aref, defined by subclasses.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 225
def aref_prefix
raise NotImplementedError
end
Attempts to sanitize the content passed by the Ruby parser: remove outer parentheses, etc.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 233
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
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 ruby-3.1.2/lib/rdoc/method_attr.rb, line 132
def documented?
super or
(is_alias_for and is_alias_for.documented?) or
(see and see.documented?)
end
Full method/attribute name including namespace
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 300
def full_name
@full_name ||= "#{parent_name}#{pretty_name}"
end
HTML id-friendly method/attribute name
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 291
def html_name
require 'cgi'
CGI.escape(@name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '')
end
'::' for a class method/attribute, '#' for an instance method.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 319
def name_prefix
@singleton ? '::' : '#'
end
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.
to call class methods.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 330
def output_name context
return "#{name_prefix}#{@name}" if context == parent
"#{parent_name}#{@singleton ? '.' : '#'}#{@name}"
end
Name of our parent with special handling for un-marshaled methods
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 360
def parent_name
@parent_name || super
end
Path to this method for use with HTML generator output.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 353
def path
"#{@parent.path}##{aref}"
end
Method/attribute name with class/instance indicator
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 339
def pretty_name
"#{name_prefix}#{@name}"
end
Used by RDoc::Generator::JsonIndex to create a record for the search engine.
# File ruby-3.1.2/lib/rdoc/method_attr.rb, line 398
def search_record
[
@name,
full_name,
@name,
@parent.full_name,
path,
params,
snippet(@comment),
]
end
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 ruby-3.1.2/lib/rdoc/method_attr.rb, line 152
def see
@see = find_see if @see == false
@see
end