lib/yard/handlers/ruby/legacy/method_handler.rb in yard-0.9.16 vs lib/yard/handlers/ruby/legacy/method_handler.rb in yard-0.9.17
- old
+ new
@@ -1,90 +1,90 @@
-# frozen_string_literal: true
-# (see Ruby::MethodHandler)
-class YARD::Handlers::Ruby::Legacy::MethodHandler < YARD::Handlers::Ruby::Legacy::Base
- handles TkDEF
-
- process do
- nobj = namespace
- mscope = scope
-
- if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
- meth = $1
- args = $2
- meth.gsub!(/\s+/, '')
- args = tokval_list(YARD::Parser::Ruby::Legacy::TokenList.new(args), :all)
- args.map! do |a|
- k, v, r = *a.split(/(:)|=/, 2)
- if r
- k += v
- v = r
- end
- [k.strip, (v ? v.strip : nil)]
- end if args
- else
- raise YARD::Parser::UndocumentableError, "method: invalid name"
- end
-
- # Class method if prefixed by self(::|.) or Module(::|.)
- if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
- mscope = :class
- meth = $1
- prefix = $`
- if prefix =~ /^[a-z]/ && prefix != "self"
- raise YARD::Parser::UndocumentableError, 'method defined on object instance'
- end
- nobj = P(namespace, prefix) unless prefix == "self"
- end
-
- nobj = P(namespace, nobj.value) while nobj.type == :constant
- obj = register MethodObject.new(nobj, meth, mscope) do |o|
- o.explicit = true
- o.parameters = args
- end
-
- # delete any aliases referencing old method
- nobj.aliases.each do |aobj, name|
- next unless name == obj.name
- nobj.aliases.delete(aobj)
- end if nobj.is_a?(NamespaceObject)
-
- if mscope == :instance && meth == "initialize"
- unless obj.has_tag?(:return)
- obj.add_tag(YARD::Tags::Tag.new(:return,
- "a new instance of #{namespace.name}", namespace.name.to_s))
- end
- elsif mscope == :class && obj.docstring.blank? && %w(inherited included
- extended method_added method_removed method_undefined).include?(meth)
- obj.add_tag(YARD::Tags::Tag.new(:private, nil))
- elsif meth.to_s =~ /\?$/
- if obj.tag(:return) && (obj.tag(:return).types || []).empty?
- obj.tag(:return).types = ['Boolean']
- elsif obj.tag(:return).nil?
- unless obj.tags(:overload).any? {|overload| overload.tag(:return) }
- obj.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
- end
- end
- end
-
- if obj.has_tag?(:option)
- # create the options parameter if its missing
- obj.tags(:option).each do |option|
- expected_param = option.name
- unless obj.tags(:param).find {|x| x.name == expected_param }
- new_tag = YARD::Tags::Tag.new(:param, "a customizable set of options", "Hash", expected_param)
- obj.add_tag(new_tag)
- end
- end
- end
-
- info = obj.attr_info
- if info
- if meth.to_s =~ /=$/ # writer
- info[:write] = obj if info[:read]
- elsif info[:write]
- info[:read] = obj
- end
- end
-
- parse_block(:owner => obj) # mainly for yield/exceptions
- end
-end
+# frozen_string_literal: true
+# (see Ruby::MethodHandler)
+class YARD::Handlers::Ruby::Legacy::MethodHandler < YARD::Handlers::Ruby::Legacy::Base
+ handles TkDEF
+
+ process do
+ nobj = namespace
+ mscope = scope
+
+ if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
+ meth = $1
+ args = $2
+ meth.gsub!(/\s+/, '')
+ args = tokval_list(YARD::Parser::Ruby::Legacy::TokenList.new(args), :all)
+ args.map! do |a|
+ k, v, r = *a.split(/(:)|=/, 2)
+ if r
+ k += v
+ v = r
+ end
+ [k.strip, (v ? v.strip : nil)]
+ end if args
+ else
+ raise YARD::Parser::UndocumentableError, "method: invalid name"
+ end
+
+ # Class method if prefixed by self(::|.) or Module(::|.)
+ if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
+ mscope = :class
+ meth = $1
+ prefix = $`
+ if prefix =~ /^[a-z]/ && prefix != "self"
+ raise YARD::Parser::UndocumentableError, 'method defined on object instance'
+ end
+ nobj = P(namespace, prefix) unless prefix == "self"
+ end
+
+ nobj = P(namespace, nobj.value) while nobj.type == :constant
+ obj = register MethodObject.new(nobj, meth, mscope) do |o|
+ o.explicit = true
+ o.parameters = args
+ end
+
+ # delete any aliases referencing old method
+ nobj.aliases.each do |aobj, name|
+ next unless name == obj.name
+ nobj.aliases.delete(aobj)
+ end if nobj.is_a?(NamespaceObject)
+
+ if mscope == :instance && meth == "initialize"
+ unless obj.has_tag?(:return)
+ obj.add_tag(YARD::Tags::Tag.new(:return,
+ "a new instance of #{namespace.name}", namespace.name.to_s))
+ end
+ elsif mscope == :class && obj.docstring.blank? && %w(inherited included
+ extended method_added method_removed method_undefined).include?(meth)
+ obj.add_tag(YARD::Tags::Tag.new(:private, nil))
+ elsif meth.to_s =~ /\?$/
+ if obj.tag(:return) && (obj.tag(:return).types || []).empty?
+ obj.tag(:return).types = ['Boolean']
+ elsif obj.tag(:return).nil?
+ unless obj.tags(:overload).any? {|overload| overload.tag(:return) }
+ obj.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
+ end
+ end
+ end
+
+ if obj.has_tag?(:option)
+ # create the options parameter if its missing
+ obj.tags(:option).each do |option|
+ expected_param = option.name
+ unless obj.tags(:param).find {|x| x.name == expected_param }
+ new_tag = YARD::Tags::Tag.new(:param, "a customizable set of options", "Hash", expected_param)
+ obj.add_tag(new_tag)
+ end
+ end
+ end
+
+ info = obj.attr_info
+ if info
+ if meth.to_s =~ /=$/ # writer
+ info[:write] = obj if info[:read]
+ elsif info[:write]
+ info[:read] = obj
+ end
+ end
+
+ parse_block(:owner => obj) # mainly for yield/exceptions
+ end
+end