class Parlour::Types::Proc

A type which can be called as a function.

Attributes

parameters[R]
return_type[R]

Public Class Methods

new(parameters, return_type) click to toggle source
# File lib/parlour/types.rb, line 533
def initialize(parameters, return_type)
  @parameters = parameters
  @return_type = return_type && to_type(return_type)
end

Public Instance Methods

==(other) click to toggle source
# File lib/parlour/types.rb, line 539
def ==(other)
  Proc === other && parameters == other.parameters && return_type == other.return_type
end
describe() click to toggle source
# File lib/parlour/types.rb, line 568
def describe
  # For simplicity, use RBS with pre-described parameter types
  rbs_params = parameters.map do |param|
    RbsGenerator::Parameter.new(param.name, type: param.type.describe, required: param.default.nil?)
  end
  "(#{rbs_params.map(&:to_rbs_param).join(', ')}) -> #{return_type&.describe || 'void'}"
end
generate_rbi() click to toggle source
# File lib/parlour/types.rb, line 550
def generate_rbi
  rbi_params = parameters.map do |param|
    RbiGenerator::Parameter.new(param.name, type: param.type, default: param.default)
  end
  "T.proc.params(#{rbi_params.map(&:to_sig_param).join(', ')}).#{
    @return_type ? "returns(#{@return_type.generate_rbi})" : 'void'
  }"
end
generate_rbs() click to toggle source
# File lib/parlour/types.rb, line 560
def generate_rbs
  rbs_params = parameters.map do |param|
    RbsGenerator::Parameter.new(param.name, type: param.type, required: param.default.nil?)
  end
  "(#{rbs_params.map(&:to_rbs_param).join(', ')}) -> #{return_type&.generate_rbs || 'void'}"
end