class RBS::Types::Record
Attributes
all_fields
[R]
Hash[key, [ t, bool ]]
All types of all files
If the key is required, the second value of the tuple is true. If the key is optional, the second value of the tuple is false.
fields
[R]
Hash[key, t]
location
[R]
loc?
optional_fields
[R]
Hash[key, t]
Public Class Methods
(fields: Hash[key, t], location: loc?) → void
(all_fields: Hash[key, [ t, bool ]], location: loc?) → void
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 541 def initialize(all_fields: nil, fields: nil, location:) case when fields && all_fields.nil? @all_fields = fields.transform_values { |v| [v, true] } @fields = fields @optional_fields = {} when all_fields && fields.nil? @all_fields = all_fields @fields = {} @optional_fields = {} all_fields.each do |(k, (v, required))| if required @fields[k] = v else @optional_fields[k] = v end end else raise ArgumentError, "only one of `:fields` or `:all_fields` is required" end @location = location end
Public Instance Methods
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 565 def ==(other) other.is_a?(Record) && other.fields == fields && other.optional_fields == optional_fields end
Also aliased as: eql?
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 615 def each_type(&block) if block fields.each_value(&block) optional_fields.each_value(&block) else enum_for :each_type end end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 575 def free_variables(set = Set.new) set.tap do fields.each_value do |type| type.free_variables set end optional_fields.each_value do |type| type.free_variables set end end end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 646 def has_classish_type? each_type.any? {|type| type.has_classish_type? } end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 642 def has_self_type? each_type.any? {|type| type.has_self_type? } end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 571 def hash self.class.hash ^ all_fields.hash end
() { (t) → t } → Record
() → Enumerator[t, Record]
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 631 def map_type(&block) if block Record.new( all_fields: all_fields.transform_values {|type, required| [yield(type), required] }, location: location ) else enum_for :map_type end end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 624 def map_type_name(&block) Record.new( all_fields: all_fields.transform_values {|ty, required| [ty.map_type_name(&block), required] }, location: location ) end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 590 def sub(s) return self if s.empty? self.class.new( all_fields: all_fields.transform_values {|ty, required| [ty.sub(s), required] }, location: location ) end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 586 def to_json(state = nil) { class: :record, fields: fields, optional_fields: optional_fields, location: location }.to_json(state) end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 599 def to_s(level = 0) return "{ }" if all_fields.empty? fields = all_fields.map do |key, (type, required)| field = if key.is_a?(Symbol) && key.match?(/\A[A-Za-z_][A-Za-z_0-9]*\z/) "#{key}: #{type}" else "#{key.inspect} => #{type}" end field = "?#{field}" unless required field end "{ #{fields.join(", ")} }" end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/types.rb, line 650 def with_nonreturn_void? each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference end