Class: RBS::Types::Record
- Inherits:
-
Object
- Object
- RBS::Types::Record
- Includes:
- _TypeBase
- Defined in:
- lib/rbs/types.rb,
sig/types.rbs
Instance Attribute Summary collapse
-
#all_fields ⇒ Hash[key, [t, bool]]
readonly
All types of all files.
-
#fields ⇒ Hash[key, t]
readonly
Returns the value of attribute fields.
-
#location ⇒ loc?
readonly
Returns the value of attribute location.
-
#optional_fields ⇒ Hash[key, t]
readonly
Returns the value of attribute optional_fields.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #each_type(&block) ⇒ Object
- #free_variables(set = Set.new) ⇒ Object
- #has_classish_type? ⇒ Boolean
- #has_self_type? ⇒ Boolean
- #hash ⇒ Object
-
#initialize(all_fields: nil, fields: nil, location:) ⇒ Record
constructor
A new instance of Record.
- #map_type {|arg0| ... } ⇒ Object
- #map_type_name(&block) ⇒ Object
- #sub(s) ⇒ Object
- #to_json(state = nil) ⇒ Object
- #to_s(level = 0) ⇒ Object
- #with_nonreturn_void? ⇒ Boolean
Constructor Details
#initialize(fields:, location:) ⇒ void #initialize(all_fields:, location:) ⇒ void
Returns a new instance of Record.
541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 |
# File '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 |
Instance Attribute Details
#all_fields ⇒ Hash[key, [t, bool]] (readonly)
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.
310 311 312 |
# File 'sig/types.rbs', line 310 def all_fields @all_fields end |
#fields ⇒ Hash[key, t] (readonly)
Returns the value of attribute fields.
538 539 540 |
# File 'lib/rbs/types.rb', line 538 def fields @fields end |
#location ⇒ loc? (readonly)
Returns the value of attribute location.
539 540 541 |
# File 'lib/rbs/types.rb', line 539 def location @location end |
#optional_fields ⇒ Hash[key, t] (readonly)
Returns the value of attribute optional_fields.
538 539 540 |
# File 'lib/rbs/types.rb', line 538 def optional_fields @optional_fields end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
565 566 567 |
# File 'lib/rbs/types.rb', line 565 def ==(other) other.is_a?(Record) && other.fields == fields && other.optional_fields == optional_fields end |
#each_type(&block) ⇒ Object
615 616 617 618 619 620 621 622 |
# File '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 |
#free_variables(set = Set.new) ⇒ Object
575 576 577 578 579 580 581 582 583 584 |
# File '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 |
#has_classish_type? ⇒ Boolean
646 647 648 |
# File 'lib/rbs/types.rb', line 646 def has_classish_type? each_type.any? {|type| type.has_classish_type? } end |
#has_self_type? ⇒ Boolean
642 643 644 |
# File 'lib/rbs/types.rb', line 642 def has_self_type? each_type.any? {|type| type.has_self_type? } end |
#hash ⇒ Object
571 572 573 |
# File 'lib/rbs/types.rb', line 571 def hash self.class.hash ^ all_fields.hash end |
#map_type ⇒ Record #map_type ⇒ Enumerator[t, Record]
631 632 633 634 635 636 637 638 639 640 |
# File '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 |
#map_type_name(&block) ⇒ Object
624 625 626 627 628 629 |
# File '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 |
#sub(s) ⇒ Object
590 591 592 593 594 595 596 597 |
# File '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 |
#to_json(state = nil) ⇒ Object
586 587 588 |
# File '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 |
#to_s(level = 0) ⇒ Object
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 |
# File '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 |
#with_nonreturn_void? ⇒ Boolean
650 651 652 |
# File 'lib/rbs/types.rb', line 650 def with_nonreturn_void? each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference end |