class YARD::Handlers::Ruby::ClassHandler

Handles class declarations

Private Instance Methods

create_struct_superclass(superclass, superclass_def) click to toggle source
# File lib/yard/handlers/ruby/class_handler.rb, line 72
def create_struct_superclass(superclass, superclass_def)
  return if superclass == "Struct"
  the_super = register ClassObject.new(P("Struct"), superclass[8..-1]) do |o|
    o.superclass = "Struct"
  end
  parse_struct_superclass(the_super, superclass_def)
  the_super
end
extract_parameters(superclass) click to toggle source

Extract the parameters from the Struct.new AST node, returning them as a list of strings

@param [MethodCallNode] superclass the AST node for the Struct.new call @return [Array<String>] the member names to generate methods for

# File lib/yard/handlers/ruby/class_handler.rb, line 66
def extract_parameters(superclass)
  members = superclass.parameters.select {|x| x && x.type == :symbol_literal}
  members.map! {|x| x.source.strip[1..-1]}
  members
end
parse_struct_superclass(klass, superclass) click to toggle source
# File lib/yard/handlers/ruby/class_handler.rb, line 91
def parse_struct_superclass(klass, superclass)
  return unless superclass.call? && superclass.parameters
  members = extract_parameters(superclass)
  create_attributes(klass, members)
end
parse_superclass(superclass) click to toggle source
# File lib/yard/handlers/ruby/class_handler.rb, line 97
def parse_superclass(superclass)
  return nil unless superclass

  case superclass.type
  when :var_ref
    return namespace.path if superclass.first == s(:kw, "self")
    return superclass.source if superclass.first.type == :const
  when :const, :const_ref, :const_path_ref, :top_const_ref
    return superclass.source
  when :fcall, :command
    methname = superclass.method_name.source
    if methname == "DelegateClass"
      return superclass.parameters.first.source
    elsif superclass.method_name.type == :const
      return methname
    end
  when :call, :command_call
    cname = superclass.namespace.source
    if cname =~ /^O?Struct$/ && superclass.method_name(true) == :new
      return cname
    end
  end
  nil
end
struct_superclass_name(superclass) click to toggle source
# File lib/yard/handlers/ruby/class_handler.rb, line 81
def struct_superclass_name(superclass)
  if superclass.call?
    first = superclass.parameters.first
    if first.type == :string_literal && first[0].type == :string_content && first[0].size == 1
      return "Struct::#{first[0][0][0]}"
    end
  end
  "Struct"
end