lib/steep/ast/types/helper.rb



module Steep
  module AST
    module Types
      module Helper
        module ChildrenLevel
          def level_of_children(children)
            levels = children.map(&:level)
            children.map(&:level).sort {|a, b| (b.size <=> a.size) || 0 }.inject() do |a, b|
              a.zip(b).map do |x, y|
                if x && y
                  x + y
                else
                  x || y || raise
                end
              end
            end || []
          end
        end

        module NoFreeVariables
          def free_variables()
            @fvs ||= Set.new
          end
        end

        module NoChild
          def each_child(&block)
            unless block
              enum_for :each_child
            end
          end
        end
      end
    end
  end
end