class RBS::DefinitionBuilder

def build_singleton0(type_name)


Builds a definition for singleton without .new method.
def build_singleton0(type_name)
  try_cache type_name, cache: singleton0_cache do
    entry = env.class_decls[type_name] or raise "Unknown name for build_singleton0: #{type_name}"
    ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
    ancestors = ancestor_builder.singleton_ancestors(type_name)
    self_type = Types::ClassSingleton.new(name: type_name, location: nil)
    Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
      one_ancestors = ancestor_builder.one_singleton_ancestors(type_name)
      methods = method_builder.build_singleton(type_name)
      if super_class = one_ancestors.super_class
        case super_class
        when Definition::Ancestor::Instance
          defn = build_instance(super_class.name)
        when Definition::Ancestor::Singleton
          defn = build_singleton0(super_class.name)
        end
        definition.methods.merge!(defn.methods)
        definition.instance_variables.merge!(defn.instance_variables)
      end
      one_ancestors.each_extended_module do |mod|
        mod.args.each do |arg|
          validate_type_presence(arg)
        end
        subst = tapp_subst(mod.name, mod.args)
        define_instance(definition, mod.name, subst, define_class_vars: false)
      end
      all_interfaces = one_ancestors.each_extended_interface.flat_map do |interface|
        other_interfaces = ancestor_builder.interface_ancestors(interface.name).ancestors #: Array[Definition::Ancestor::Instance]
        other_interfaces = other_interfaces.select {|ancestor| ancestor.source }
        [interface, *other_interfaces]
      end
      interface_methods = interface_methods(all_interfaces)
      import_methods(definition, type_name, methods, interface_methods, Substitution.new, nil)
      entry.decls.each do |d|
        d.decl.members.each do |member|
          case member
          when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
            if member.kind == :singleton
              ivar_name = case member.ivar_name
                          when false
                            nil
                          else
                            member.ivar_name || :"@#{member.name}"
                          end
              if ivar_name
                insert_variable(type_name, definition.instance_variables, name: ivar_name, type: member.type, source: member)
              end
            end
          when AST::Members::ClassInstanceVariable
            insert_variable(type_name, definition.instance_variables, name: member.name, type: member.type, source: member)
          end
        end
      end
      instance_definition = build_instance(type_name)
      definition.class_variables.replace(instance_definition.class_variables)
    end
  end
end