class RBS::Prototype::Runtime::ValueObjectBase

Public Class Methods

new(target_class) click to toggle source
# File rbs-3.7.0/lib/rbs/prototype/runtime/value_object_generator.rb, line 11
def initialize(target_class)
  @target_class = target_class
end

Public Instance Methods

build_decl() click to toggle source
# File rbs-3.7.0/lib/rbs/prototype/runtime/value_object_generator.rb, line 15
def build_decl
  decl = AST::Declarations::Class.new(
    name: to_type_name(only_name(@target_class)),
    type_params: [],
    super_class: build_super_class,
    members: [],
    annotations: [],
    location: nil,
    comment: nil
  )

  add_decl_members(decl)

  decl
end

Private Instance Methods

build_member_accessors(ast_members_class) click to toggle source

attr_accessor foo: untyped

# File rbs-3.7.0/lib/rbs/prototype/runtime/value_object_generator.rb, line 74
def build_member_accessors(ast_members_class)
  @target_class.members.map do |member|
    ast_members_class.new(
      name: member,
      ivar_name: nil,
      type: untyped,
      kind: :instance,
      location: nil,
      comment: nil,
      annotations: []
    )
  end
end
build_s_members() click to toggle source

def self.members: () -> [ :foo, :bar ] def members: () -> [ :foo, :bar ]

# File rbs-3.7.0/lib/rbs/prototype/runtime/value_object_generator.rb, line 35
def build_s_members
  (
    [:singleton, :instance] #: Array[AST::Members::MethodDefinition::kind]
  ).map do |kind|
    AST::Members::MethodDefinition.new(
      name: :members,
      overloads: [
        AST::Members::MethodDefinition::Overload.new(
          annotations: [],
          method_type: MethodType.new(
            type: Types::Function.empty(
              Types::Tuple.new(
                types: @target_class.members.map do |member|
                  if member.to_s.ascii_only?
                    Types::Literal.new(literal: member, location: nil)
                  else
                    BuiltinNames::Symbol.instance_type
                  end
                end,
                location: nil
              )
            ),
            type_params: [],
            block: nil,
            location: nil,
          )
        )
      ],
      kind: kind,
      location: nil,
      comment: nil,
      annotations: [],
      overloading: false,
      visibility: nil
    )
  end
end