class RBS::RecursiveAncestorError - rbs: Ruby Standard Library Documentation

# class RBS::RecursiveAncestorError

### Attributes

ancestors[R]
location[R]

### Public Class Methods

check!(self_ancestor, ancestors:, location:) click to toggle source

    # File rbs-3.8.0/lib/rbs/errors.rb, line 134
    def self.check!(self_ancestor, ancestors:, location:)
      case self_ancestor
      when Definition::Ancestor::Instance
        if ancestors.any? {|a| a.is_a?(Definition::Ancestor::Instance) && a.name == self_ancestor.name }
          raise new(ancestors: ancestors + [self_ancestor], location: location)
        end
      when Definition::Ancestor::Singleton
        if ancestors.include?(self_ancestor)
          raise new(ancestors: ancestors + [self_ancestor], location: location)
        end
      end
    end

new(ancestors:, location:) click to toggle source
Calls superclass method

    # File rbs-3.8.0/lib/rbs/errors.rb, line 114
    def initialize(ancestors:, location:)
      @ancestors = ancestors
      @location = location

      names = ancestors.map do |ancestor|
        case ancestor
        when Definition::Ancestor::Singleton
          "singleton(#{ancestor.name})"
        when Definition::Ancestor::Instance
          if ancestor.args.empty?
            ancestor.name.to_s
          else
            "#{ancestor.name}[#{ancestor.args.join(", ")}]"
          end
        end
      end

      super "#{Location.to_string location}: Detected recursive ancestors: #{names.join(" < ")}"
    end