In Files

  • rbs-1.0.4/lib/rbs/errors.rb

Parent

Methods

Class/Module Index [+]

Quicksearch

RBS::RecursiveAncestorError

Attributes

ancestors[R]
location[R]

Public Class Methods

check!(self_ancestor, ancestors:, location:) click to toggle source
 
               # File rbs-1.0.4/lib/rbs/errors.rb, line 62
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
 
               # File rbs-1.0.4/lib/rbs/errors.rb, line 42
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