class Class
Represents a Ruby class definition wrapper for RBS generation.
Definitions
def initialize(definition)
Initialize a new class wrapper.
Signature
-
parameter
definition
Decode::Definition
The class definition to wrap.
Implementation
def initialize(definition)
super
@generics = nil
end
def generics
Extract generic type parameters from the class definition.
Signature
-
returns
Array
The generic type parameters for this class.
Implementation
def generics
@generics ||= extract_generics
end
def to_rbs_ast(method_definitions = [], index = nil)
Convert the class definition to RBS AST
Implementation
def to_rbs_ast(method_definitions = [], index = nil)
name = simple_name_to_rbs(@definition.name)
comment = extract_comment(@definition)
# Extract generics from RBS tags
type_params = generics.map do |generic|
::RBS::AST::TypeParam.new(
name: generic.to_sym,
variance: nil,
upper_bound: nil,
location: nil
)
end
# Build method definitions
methods = method_definitions.map{|method_def| Method.new(method_def).to_rbs_ast(index)}.compact
# Extract super class if present
super_class = if @definition.super_class
::RBS::AST::Declarations::Class::Super.new(
name: qualified_name_to_rbs(@definition.super_class),
args: [],
location: nil
)
end
# Create the class declaration with generics
::RBS::AST::Declarations::Class.new(
name: name,
type_params: type_params,
super_class: super_class,
members: methods,
annotations: [],
location: nil,
comment: comment
)
end
def simple_name_to_rbs(name)
Convert a simple name to RBS TypeName (not qualified)
Implementation
def simple_name_to_rbs(name)
::RBS::TypeName.new(name: name.to_sym, namespace: ::RBS::Namespace.empty)
end
def qualified_name_to_rbs(qualified_name)
Convert a qualified name to RBS TypeName
Implementation
def qualified_name_to_rbs(qualified_name)
parts = qualified_name.split("::")
name = parts.pop
namespace = ::RBS::Namespace.new(path: parts.map(&:to_sym), absolute: true)
::RBS::TypeName.new(name: name.to_sym, namespace: namespace)
end