stellar/xdrgen

View on GitHub
lib/xdrgen/ast/declarations/base.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Xdrgen::AST
  module Declarations
    class Base < Treetop::Runtime::SyntaxNode
      TYPE_NODES = [
        Typespecs::Base,
        Concerns::NestedDefinition,
        Concerns::Contained,
      ]

      def type
        search(type_s) do |node|
          TYPE_NODES.any?{|t| node.is_a?(t)}
        end
      end

      private
      def search(cur_el, &predicate)
        return cur_el if predicate.call(cur_el)
        return if cur_el.elements.blank?

        cur_el.elements.each do |next_el|
          child_result = search(next_el, &predicate)
          return child_result if child_result.present?
        end
      end
    end
  end
end