File: tree_renderer.rb

package info (click to toggle)
ruby-mustermann19 0.4.3%2Bgit20160621-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 756 kB
  • ctags: 445
  • sloc: ruby: 7,197; makefile: 3
file content (22 lines) | stat: -rw-r--r-- 651 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require 'mustermann/ast/translator'

module Mustermann
  module AST
    # Turns an AST into a human readable string.
    # @!visibility private
    class TreeRenderer < Translator
      # @example
      #   Mustermann::AST::TreeRenderer.render Mustermann::Sinatra::Parser.parse('/foo')
      #
      # @!visibility private
      def self.render(ast)
        new.translate(ast)
      end

      translate(Object) { inspect }
      translate(Array) { map { |e| "\n" << t(e) }.join.gsub("\n", "\n  ") }
      translate(:node) { "#{node.type} #{t(payload)}" }
      translate(:with_look_ahead) { "#{node.type} #{t(head)} #{t(payload)}" }
    end
  end
end