lib/rdoc/any_method.rb in rdoc-2.5.11 vs lib/rdoc/any_method.rb in rdoc-3.0
- old
+ new
@@ -1,108 +1,64 @@
-require 'rdoc/code_object'
-require 'rdoc/tokenstream'
+require 'rdoc/method_attr'
+require 'rdoc/token_stream'
##
# AnyMethod is the base class for objects representing methods
-class RDoc::AnyMethod < RDoc::CodeObject
+class RDoc::AnyMethod < RDoc::MethodAttr
- MARSHAL_VERSION = 1 # :nodoc:
+ MARSHAL_VERSION = 0 # :nodoc:
- include Comparable
-
##
- # Method name
-
- attr_writer :name
-
- ##
- # public, protected, private
-
- attr_accessor :visibility
-
- ##
- # Parameters yielded by the called block
-
- attr_accessor :block_params
-
- ##
# Don't rename \#initialize to \::new
attr_accessor :dont_rename_initialize
##
- # Is this a singleton method?
+ # Different ways to call this method
- attr_accessor :singleton
+ attr_accessor :call_seq
##
- # Source file token stream
-
- attr_reader :text
-
- ##
- # Array of other names for this method
-
- attr_reader :aliases
-
- ##
- # The method we're aliasing
-
- attr_accessor :is_alias_for
-
- ##
# Parameters for this method
attr_accessor :params
- ##
- # Different ways to call this method
-
- attr_accessor :call_seq
-
include RDoc::TokenStream
- def initialize(text, name)
- super()
+ ##
+ # Creates a new AnyMethod with a token stream +text+ and +name+
- @text = text
- @name = name
+ def initialize text, name
+ super
- @aliases = []
- @block_params = nil
- @call_seq = nil
@dont_rename_initialize = false
- @is_alias_for = nil
- @params = nil
- @parent_name = nil
- @singleton = nil
@token_stream = nil
- @visibility = :public
end
##
- # Order by #singleton then #name
+ # Adds +an_alias+ as an alias for this method in +context+.
- def <=>(other)
- [@singleton ? 0 : 1, @name] <=> [other.singleton ? 0 : 1, other.name]
- end
+ def add_alias(an_alias, context)
+ method = self.class.new an_alias.text, an_alias.new_name
- ##
- # Adds +method+ as an alias for this method
-
- def add_alias(method)
+ 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
+ method
end
##
- # HTML fragment reference for this method
+ # Prefix for +aref+ is 'method'.
- def aref
- type = singleton ? 'c' : 'i'
-
- "method-#{type}-#{CGI.escape name}"
+ def aref_prefix
+ 'method'
end
##
# The call_seq or the param_seq with method name, if there is no call_seq.
#
@@ -115,34 +71,10 @@
"#{name}#{param_seq}"
end
end
##
- # HTML id-friendly method name
-
- def html_name
- @name.gsub(/[^a-z]+/, '-')
- end
-
- def inspect # :nodoc:
- alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
- "#<%s:0x%x %s (%s)%s>" % [
- self.class, object_id,
- full_name,
- visibility,
- alias_for,
- ]
- end
-
- ##
- # Full method name including namespace
-
- def full_name
- @full_name ||= "#{@parent ? @parent.full_name : '(unknown)'}#{pretty_name}"
- end
-
- ##
# Dumps this AnyMethod for use by ri. See also #marshal_load
def marshal_dump
aliases = @aliases.map do |a|
[a.full_name, parse(a.comment)]
@@ -190,16 +122,18 @@
name.pop
name.join '::'
end
array[8].each do |new_name, comment|
- add_alias RDoc::Alias.new(nil, @name, new_name, comment)
+ add_alias RDoc::Alias.new(nil, @name, new_name, comment, @singleton)
end
end
##
# Method name
+ #
+ # If the method has no assigned name, it extracts it from #call_seq.
def name
return @name if @name
@name = @call_seq[/^.*?\.(\w+)/, 1] || @call_seq if @call_seq
@@ -225,66 +159,9 @@
end
params << " { |#{block}| ... }"
end
params
- end
-
- ##
- # Name of our parent with special handling for un-marshaled methods
-
- def parent_name
- @parent_name || super
- end
-
- ##
- # Path to this method
-
- def path
- "#{@parent.path}##{aref}"
- end
-
- ##
- # Method name with class/instance indicator
-
- def pretty_name
- "#{singleton ? '::' : '#'}#{@name}"
- end
-
- def pretty_print q # :nodoc:
- alias_for = @is_alias_for ? "alias for #{@is_alias_for.name}" : nil
-
- q.group 2, "[#{self.class.name} #{full_name} #{visibility}", "]" do
- if alias_for then
- q.breakable
- q.text alias_for
- end
-
- if text then
- q.breakable
- q.text "text:"
- q.breakable
- q.pp @text
- end
-
- unless comment.empty? then
- q.breakable
- q.text "comment:"
- q.breakable
- q.pp @comment
- end
- end
- end
-
- def to_s # :nodoc:
- "#{self.class.name}: #{full_name} (#{@text})\n#{@comment}"
- end
-
- ##
- # Type of method (class or instance)
-
- def type
- singleton ? 'class' : 'instance'
end
end