lib/yard/code_objects/class_object.rb in yard-0.9.16 vs lib/yard/code_objects/class_object.rb in yard-0.9.17
- old
+ new
@@ -1,146 +1,146 @@
-# frozen_string_literal: true
-module YARD::CodeObjects
- register_separator NSEP, :class
-
- # A ClassObject represents a Ruby class in source code. It is a {ModuleObject}
- # with extra inheritance semantics through the superclass.
- class ClassObject < NamespaceObject
- # The {ClassObject} that this class object inherits from in Ruby source.
- # @return [ClassObject] a class object that is the superclass of this one
- attr_reader :superclass
-
- # Creates a new class object in +namespace+ with +name+
- #
- # @see Base.new
- def initialize(namespace, name, *args, &block)
- super
-
- if is_exception?
- self.superclass ||= "::Exception" unless P(namespace, name) == P(:Exception)
- else
- case P(namespace, name).path
- when "BasicObject"
- nil
- when "Object"
- self.superclass ||= "::BasicObject"
- else
- self.superclass ||= "::Object"
- end
- end
- end
-
- # Whether or not the class is a Ruby Exception
- #
- # @return [Boolean] whether the object represents a Ruby exception
- def is_exception?
- inheritance_tree.reverse.any? {|o| BUILTIN_EXCEPTIONS_HASH.key? o.path }
- end
-
- # Returns the inheritance tree of the object including self.
- #
- # @param [Boolean] include_mods whether or not to include mixins in the
- # inheritance tree.
- # @return [Array<NamespaceObject>] the list of code objects that make up
- # the inheritance tree.
- def inheritance_tree(include_mods = false)
- list = (include_mods ? mixins(:instance, :class) : [])
- if superclass.is_a?(Proxy) || superclass.respond_to?(:inheritance_tree)
- list += [superclass] unless superclass == P(:Object) || superclass == P(:BasicObject)
- end
- [self] + list.map do |m|
- next m if m == self
- next m unless m.respond_to?(:inheritance_tree)
- m.inheritance_tree(include_mods)
- end.flatten.uniq
- end
-
- # Returns the list of methods matching the options hash. Returns
- # all methods if hash is empty.
- #
- # @param [Hash] opts the options hash to match
- # @option opts [Boolean] :inherited (true) whether inherited methods should be
- # included in the list
- # @option opts [Boolean] :included (true) whether mixed in methods should be
- # included in the list
- # @return [Array<MethodObject>] the list of methods that matched
- def meths(opts = {})
- opts = SymbolHash[:inherited => true].update(opts)
- list = super(opts)
- list += inherited_meths(opts).reject do |o|
- next(false) if opts[:all]
- list.find {|o2| o2.name == o.name && o2.scope == o.scope }
- end if opts[:inherited]
- list
- end
-
- # Returns only the methods that were inherited.
- #
- # @return [Array<MethodObject>] the list of inherited method objects
- def inherited_meths(opts = {})
- inheritance_tree[1..-1].inject([]) do |list, superclass|
- if superclass.is_a?(Proxy)
- list
- else
- list += superclass.meths(opts).reject do |o|
- next(false) if opts[:all]
- child(:name => o.name, :scope => o.scope) ||
- list.find {|o2| o2.name == o.name && o2.scope == o.scope }
- end
- end
- end
- end
-
- # Returns the list of constants matching the options hash.
- #
- # @param [Hash] opts the options hash to match
- # @option opts [Boolean] :inherited (true) whether inherited constant should be
- # included in the list
- # @option opts [Boolean] :included (true) whether mixed in constant should be
- # included in the list
- # @return [Array<ConstantObject>] the list of constant that matched
- def constants(opts = {})
- opts = SymbolHash[:inherited => true].update(opts)
- super(opts) + (opts[:inherited] ? inherited_constants : [])
- end
-
- # Returns only the constants that were inherited.
- #
- # @return [Array<ConstantObject>] the list of inherited constant objects
- def inherited_constants
- inheritance_tree[1..-1].inject([]) do |list, superclass|
- if superclass.is_a?(Proxy)
- list
- else
- list += superclass.constants.reject do |o|
- child(:name => o.name) || list.find {|o2| o2.name == o.name }
- end
- end
- end
- end
-
- # Sets the superclass of the object
- #
- # @param [Base, Proxy, String, Symbol, nil] object the superclass value
- # @return [void]
- def superclass=(object)
- case object
- when Base, Proxy, NilClass
- @superclass = object
- when String, Symbol
- @superclass = Proxy.new(namespace, object)
- else
- raise ArgumentError, "superclass must be CodeObject, Proxy, String or Symbol"
- end
-
- if name == @superclass.name && namespace != YARD::Registry.root && !object.is_a?(Base)
- @superclass = Proxy.new(namespace.namespace, object)
- end
-
- if @superclass == self
- msg = "superclass #{@superclass.inspect} cannot be the same as the declared class #{inspect}"
- @superclass = P("::Object")
- raise ArgumentError, msg
- end
- end
- end
-end
+# frozen_string_literal: true
+module YARD::CodeObjects
+ register_separator NSEP, :class
+
+ # A ClassObject represents a Ruby class in source code. It is a {ModuleObject}
+ # with extra inheritance semantics through the superclass.
+ class ClassObject < NamespaceObject
+ # The {ClassObject} that this class object inherits from in Ruby source.
+ # @return [ClassObject] a class object that is the superclass of this one
+ attr_reader :superclass
+
+ # Creates a new class object in +namespace+ with +name+
+ #
+ # @see Base.new
+ def initialize(namespace, name, *args, &block)
+ super
+
+ if is_exception?
+ self.superclass ||= "::Exception" unless P(namespace, name) == P(:Exception)
+ else
+ case P(namespace, name).path
+ when "BasicObject"
+ nil
+ when "Object"
+ self.superclass ||= "::BasicObject"
+ else
+ self.superclass ||= "::Object"
+ end
+ end
+ end
+
+ # Whether or not the class is a Ruby Exception
+ #
+ # @return [Boolean] whether the object represents a Ruby exception
+ def is_exception?
+ inheritance_tree.reverse.any? {|o| BUILTIN_EXCEPTIONS_HASH.key? o.path }
+ end
+
+ # Returns the inheritance tree of the object including self.
+ #
+ # @param [Boolean] include_mods whether or not to include mixins in the
+ # inheritance tree.
+ # @return [Array<NamespaceObject>] the list of code objects that make up
+ # the inheritance tree.
+ def inheritance_tree(include_mods = false)
+ list = (include_mods ? mixins(:instance, :class) : [])
+ if superclass.is_a?(Proxy) || superclass.respond_to?(:inheritance_tree)
+ list += [superclass] unless superclass == P(:Object) || superclass == P(:BasicObject)
+ end
+ [self] + list.map do |m|
+ next m if m == self
+ next m unless m.respond_to?(:inheritance_tree)
+ m.inheritance_tree(include_mods)
+ end.flatten.uniq
+ end
+
+ # Returns the list of methods matching the options hash. Returns
+ # all methods if hash is empty.
+ #
+ # @param [Hash] opts the options hash to match
+ # @option opts [Boolean] :inherited (true) whether inherited methods should be
+ # included in the list
+ # @option opts [Boolean] :included (true) whether mixed in methods should be
+ # included in the list
+ # @return [Array<MethodObject>] the list of methods that matched
+ def meths(opts = {})
+ opts = SymbolHash[:inherited => true].update(opts)
+ list = super(opts)
+ list += inherited_meths(opts).reject do |o|
+ next(false) if opts[:all]
+ list.find {|o2| o2.name == o.name && o2.scope == o.scope }
+ end if opts[:inherited]
+ list
+ end
+
+ # Returns only the methods that were inherited.
+ #
+ # @return [Array<MethodObject>] the list of inherited method objects
+ def inherited_meths(opts = {})
+ inheritance_tree[1..-1].inject([]) do |list, superclass|
+ if superclass.is_a?(Proxy)
+ list
+ else
+ list += superclass.meths(opts).reject do |o|
+ next(false) if opts[:all]
+ child(:name => o.name, :scope => o.scope) ||
+ list.find {|o2| o2.name == o.name && o2.scope == o.scope }
+ end
+ end
+ end
+ end
+
+ # Returns the list of constants matching the options hash.
+ #
+ # @param [Hash] opts the options hash to match
+ # @option opts [Boolean] :inherited (true) whether inherited constant should be
+ # included in the list
+ # @option opts [Boolean] :included (true) whether mixed in constant should be
+ # included in the list
+ # @return [Array<ConstantObject>] the list of constant that matched
+ def constants(opts = {})
+ opts = SymbolHash[:inherited => true].update(opts)
+ super(opts) + (opts[:inherited] ? inherited_constants : [])
+ end
+
+ # Returns only the constants that were inherited.
+ #
+ # @return [Array<ConstantObject>] the list of inherited constant objects
+ def inherited_constants
+ inheritance_tree[1..-1].inject([]) do |list, superclass|
+ if superclass.is_a?(Proxy)
+ list
+ else
+ list += superclass.constants.reject do |o|
+ child(:name => o.name) || list.find {|o2| o2.name == o.name }
+ end
+ end
+ end
+ end
+
+ # Sets the superclass of the object
+ #
+ # @param [Base, Proxy, String, Symbol, nil] object the superclass value
+ # @return [void]
+ def superclass=(object)
+ case object
+ when Base, Proxy, NilClass
+ @superclass = object
+ when String, Symbol
+ @superclass = Proxy.new(namespace, object)
+ else
+ raise ArgumentError, "superclass must be CodeObject, Proxy, String or Symbol"
+ end
+
+ if name == @superclass.name && namespace != YARD::Registry.root && !object.is_a?(Base)
+ @superclass = Proxy.new(namespace.namespace, object)
+ end
+
+ if @superclass == self
+ msg = "superclass #{@superclass.inspect} cannot be the same as the declared class #{inspect}"
+ @superclass = P("::Object")
+ raise ArgumentError, msg
+ end
+ end
+ end
+end