Class: RBS::Prototype::Runtime::StructGenerator
- Inherits:
-
ValueObjectBase
- Object
- ValueObjectBase
- RBS::Prototype::Runtime::StructGenerator
- Defined in:
- lib/rbs/prototype/runtime/value_object_generator.rb,
sig/prototype/runtime.rbs
Class Method Summary collapse
Instance Method Summary collapse
- #add_decl_members(decl) ⇒ void
- #build_overload_for_keyword_arguments ⇒ AST::Members::MethodDefinition::Overload
- #build_overload_for_positional_arguments ⇒ AST::Members::MethodDefinition::Overload
-
#build_s_keyword_init_p ⇒ Array[AST::Members::MethodDefinition]
def self.keyword_init?: () -> bool?.
-
#build_s_new ⇒ Array[AST::Members::MethodDefinition]
def self.new: (?untyped foo, ?untyped bar) -> instance | (?foo: untyped, ?bar: untyped) -> instance.
- #build_super_class ⇒ AST::Declarations::Class::Super
Methods inherited from ValueObjectBase
#build_decl, #build_member_accessors, #build_s_members, #initialize
Methods included from Helpers
#const_name, #const_name!, #only_name, #to_type_name, #untyped
Constructor Details
This class inherits a constructor from RBS::Prototype::Runtime::ValueObjectBase
Class Method Details
.generatable?(target) ⇒ Boolean
92 93 94 95 96 97 98 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 92 def self.generatable?(target) return false unless target < Struct # Avoid direct inherited class like `class Option < Struct` return false unless target.respond_to?(:members) true end |
Instance Method Details
#add_decl_members(decl) ⇒ void
This method returns an undefined value.
106 107 108 109 110 111 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 106 def add_decl_members(decl) decl.members.concat build_s_new decl.members.concat build_s_keyword_init_p decl.members.concat build_s_members decl.members.concat build_member_accessors(AST::Members::AttrAccessor) end |
#build_overload_for_keyword_arguments ⇒ AST::Members::MethodDefinition::Overload
158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 158 def build_overload_for_keyword_arguments AST::Members::MethodDefinition::Overload.new( annotations: [], method_type: MethodType.new( type: Types::Function.empty(Types::Bases::Instance.new(location: nil)).update( optional_keywords: @target_class.members.to_h { |m| [m, Types::Function::Param.new(name: nil, type: untyped)] }, ), type_params: [], block: nil, location: nil, ) ) end |
#build_overload_for_positional_arguments ⇒ AST::Members::MethodDefinition::Overload
144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 144 def build_overload_for_positional_arguments AST::Members::MethodDefinition::Overload.new( annotations: [], method_type: MethodType.new( type: Types::Function.empty(Types::Bases::Instance.new(location: nil)).update( optional_positionals: @target_class.members.map { |m| Types::Function::Param.new(name: m, type: untyped) }, ), type_params: [], block: nil, location: nil, ) ) end |
#build_s_keyword_init_p ⇒ Array[AST::Members::MethodDefinition]
def self.keyword_init?: () -> bool?
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 173 def build_s_keyword_init_p return_type = @target_class.keyword_init?.nil? \ ? Types::Bases::Nil.new(location: nil) : Types::Literal.new(literal: @target_class.keyword_init?, location: nil) type = Types::Function.empty(return_type) [ AST::Members::MethodDefinition.new( name: :keyword_init?, overloads: [ AST::Members::MethodDefinition::Overload.new( annotations: [], method_type: MethodType.new( type: type, type_params: [], block: nil, location: nil, ) ) ], kind: :singleton, location: nil, comment: nil, annotations: [], overloading: false, visibility: nil ) ] end |
#build_s_new ⇒ Array[AST::Members::MethodDefinition]
def self.new: (?untyped foo, ?untyped bar) -> instance | (?foo: untyped, ?bar: untyped) -> instance
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 115 def build_s_new [:new, :[]].map do |name| new_overloads = [] #: Array[AST::Members::MethodDefinition::Overload] case @target_class.keyword_init? when false new_overloads << build_overload_for_positional_arguments when true new_overloads << build_overload_for_keyword_arguments when nil new_overloads << build_overload_for_positional_arguments new_overloads << build_overload_for_keyword_arguments else raise end AST::Members::MethodDefinition.new( name: name, overloads: new_overloads, kind: :singleton, location: nil, comment: nil, annotations: [], overloading: false, visibility: nil ) end end |
#build_super_class ⇒ AST::Declarations::Class::Super
102 103 104 |
# File 'lib/rbs/prototype/runtime/value_object_generator.rb', line 102 def build_super_class AST::Declarations::Class::Super.new(name: TypeName.parse("::Struct"), args: [untyped], location: nil) end |