lib/yard/handlers/ruby/method_handler.rb in yard-0.9.16 vs lib/yard/handlers/ruby/method_handler.rb in yard-0.9.17
- old
+ new
@@ -1,118 +1,118 @@
-# frozen_string_literal: true
-# Handles a method definition
-class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
- handles :def, :defs
-
- process do
- meth = statement.method_name(true).to_s
- args = format_args
- blk = statement.block
- nobj = namespace
- mscope = scope
- if statement.type == :defs
- if statement[0][0].type == :ident
- raise YARD::Parser::UndocumentableError, 'method defined on object instance'
- end
- nobj = P(namespace, statement[0].source) if statement[0][0].type == :const
- mscope = :class
- end
-
- nobj = P(namespace, nobj.value) while nobj.type == :constant
- obj = register MethodObject.new(nobj, meth, mscope) do |o|
- o.signature = method_signature
- 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 obj.constructor?
- 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(blk, :owner => obj) # mainly for yield/exceptions
- end
-
- def format_args
- args = statement.parameters
-
- params = []
-
- if args.unnamed_required_params
- params += args.unnamed_required_params.map {|a| [a.source, nil] }
- end
-
- if args.unnamed_optional_params
- params += args.unnamed_optional_params.map do |a|
- [a[0].source, a[1].source]
- end
- end
-
- params << ['*' + args.splat_param.source, nil] if args.splat_param
-
- if args.unnamed_end_params
- params += args.unnamed_end_params.map {|a| [a.source, nil] }
- end
-
- if args.named_params
- params += args.named_params.map do |a|
- [a[0].source, a[1] ? a[1].source : nil]
- end
- end
-
- if args.double_splat_param
- params << ['**' + args.double_splat_param.source, nil]
- end
-
- params << ['&' + args.block_param.source, nil] if args.block_param
-
- params
- end
-
- def method_signature
- method_name = statement.method_name(true)
- if statement.parameters.any? {|e| e }
- "def #{method_name}(#{statement.parameters.source})"
- else
- "def #{method_name}"
- end
- end
-end
+# frozen_string_literal: true
+# Handles a method definition
+class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
+ handles :def, :defs
+
+ process do
+ meth = statement.method_name(true).to_s
+ args = format_args
+ blk = statement.block
+ nobj = namespace
+ mscope = scope
+ if statement.type == :defs
+ if statement[0][0].type == :ident
+ raise YARD::Parser::UndocumentableError, 'method defined on object instance'
+ end
+ nobj = P(namespace, statement[0].source) if statement[0][0].type == :const
+ mscope = :class
+ end
+
+ nobj = P(namespace, nobj.value) while nobj.type == :constant
+ obj = register MethodObject.new(nobj, meth, mscope) do |o|
+ o.signature = method_signature
+ 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 obj.constructor?
+ 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(blk, :owner => obj) # mainly for yield/exceptions
+ end
+
+ def format_args
+ args = statement.parameters
+
+ params = []
+
+ if args.unnamed_required_params
+ params += args.unnamed_required_params.map {|a| [a.source, nil] }
+ end
+
+ if args.unnamed_optional_params
+ params += args.unnamed_optional_params.map do |a|
+ [a[0].source, a[1].source]
+ end
+ end
+
+ params << ['*' + args.splat_param.source, nil] if args.splat_param
+
+ if args.unnamed_end_params
+ params += args.unnamed_end_params.map {|a| [a.source, nil] }
+ end
+
+ if args.named_params
+ params += args.named_params.map do |a|
+ [a[0].source, a[1] ? a[1].source : nil]
+ end
+ end
+
+ if args.double_splat_param
+ params << ['**' + args.double_splat_param.source, nil]
+ end
+
+ params << ['&' + args.block_param.source, nil] if args.block_param
+
+ params
+ end
+
+ def method_signature
+ method_name = statement.method_name(true)
+ if statement.parameters.any? {|e| e }
+ "def #{method_name}(#{statement.parameters.source})"
+ else
+ "def #{method_name}"
+ end
+ end
+end