class Tapioca::Compilers::Dsl::Base
Attributes
processable_constants[R]
Public Class Methods
new()
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 21 def initialize @processable_constants = T.let(Set.new(gather_constants), T::Set[Module]) end
Public Instance Methods
decorate(tree, constant)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 39 def decorate(tree, constant); end
gather_constants()
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 42 def gather_constants; end
handles?(constant)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 26 def handles?(constant) processable_constants.include?(constant) end
Private Instance Methods
all_classes()
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 47 def all_classes @all_classes = T.let(@all_classes, T.nilable(T::Enumerable[Class])) @all_classes ||= T.cast(ObjectSpace.each_object(Class), T::Enumerable[Class]).each end
all_modules()
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 53 def all_modules @all_modules = T.let(@all_modules, T.nilable(T::Enumerable[Module])) @all_modules ||= T.cast(ObjectSpace.each_object(Module), T::Enumerable[Module]).each end
compile_method_parameters_to_rbi(method_def)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 138 def compile_method_parameters_to_rbi(method_def) signature = T::Private::Methods.signature_for_method(method_def) method_def = signature.nil? ? method_def : signature.method method_types = parameters_types_from_signature(method_def, signature) method_def.parameters.each_with_index.map do |(type, name), index| fallback_arg_name = "_arg#{index}" name ||= fallback_arg_name name = name.to_s.gsub(/&|\*/, fallback_arg_name) # avoid incorrect names from `delegate` method_type = T.must(method_types[index]) case type when :req create_param(name, type: method_type) when :opt create_opt_param(name, type: method_type, default: "T.unsafe(nil)") when :rest create_rest_param(name, type: method_type) when :keyreq create_kw_param(name, type: method_type) when :key create_kw_opt_param(name, type: method_type, default: "T.unsafe(nil)") when :keyrest create_kw_rest_param(name, type: method_type) when :block create_block_param(name, type: method_type) else raise "Unknown type `#{type}`." end end end
compile_method_return_type_to_rbi(method_def)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 172 def compile_method_return_type_to_rbi(method_def) signature = T::Private::Methods.signature_for_method(method_def) return_type = signature.nil? ? "T.untyped" : name_of_type(signature.return_type) return_type = "void" if return_type == "<VOID>" # Map <NOT-TYPED> to `T.untyped` return_type = "T.untyped" if return_type == "<NOT-TYPED>" return_type end
create_block_param(name, type:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 128 def create_block_param(name, type:) create_typed_param(RBI::BlockParam.new(name), type) end
create_kw_opt_param(name, type:, default:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 118 def create_kw_opt_param(name, type:, default:) create_typed_param(RBI::KwOptParam.new(name, default), type) end
create_kw_param(name, type:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 113 def create_kw_param(name, type:) create_typed_param(RBI::KwParam.new(name), type) end
create_kw_rest_param(name, type:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 123 def create_kw_rest_param(name, type:) create_typed_param(RBI::KwRestParam.new(name), type) end
create_method_from_def(scope, method_def, class_method: false)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 88 def create_method_from_def(scope, method_def, class_method: false) scope.create_method( method_def.name.to_s, parameters: compile_method_parameters_to_rbi(method_def), return_type: compile_method_return_type_to_rbi(method_def), class_method: class_method ) end
create_opt_param(name, type:, default:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 103 def create_opt_param(name, type:, default:) create_typed_param(RBI::OptParam.new(name, default), type) end
create_param(name, type:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 98 def create_param(name, type:) create_typed_param(RBI::Param.new(name), type) end
create_rest_param(name, type:)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 108 def create_rest_param(name, type:) create_typed_param(RBI::RestParam.new(name), type) end
create_typed_param(param, type)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 133 def create_typed_param(param, type) RBI::TypedParam.new(param: param, type: type) end
parameters_types_from_signature(method_def, signature)
click to toggle source
# File lib/tapioca/compilers/dsl/base.rb, line 65 def parameters_types_from_signature(method_def, signature) params = T.let([], T::Array[String]) return method_def.parameters.map { "T.untyped" } unless signature # parameters types signature.arg_types.each { |arg_type| params << arg_type[1].to_s } # keyword parameters types signature.kwarg_types.each { |_, kwarg_type| params << kwarg_type.to_s } # rest parameter type params << signature.rest_type.to_s if signature.has_rest # special case `.void` in a proc unless signature.block_name.nil? params << signature.block_type.to_s.gsub("returns(<VOID>)", "void") end params end