Class: Ibex::Runtime::CST::SyntaxRewriter

Inherits:
Object
  • Object
show all
Defined in:
lib/ibex/runtime/cst/rewriter.rb

Overview

Bottom-up syntax rewriter with kind-name dispatch.

Instance Method Summary collapse

Instance Method Details

#rewrite(root) ⇒ Object

Raises:

  • (TypeError)


15
16
17
18
19
20
21
# File 'lib/ibex/runtime/cst/rewriter.rb', line 15

def rewrite(root)
  green = visit(root)
  return root if green.equal?(root.green)
  raise TypeError, "a syntax root must remain a GreenNode" unless green.is_a?(GreenNode)

  Editing.red_root(root, green)
end

#visit(element) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/ibex/runtime/cst/rewriter.rb', line 24

def visit(element)
  rewritten = element.is_a?(SyntaxNode) ? visit_children(element) : element.green
  method = :"visit_#{method_name(element.kind_name)}"
  return rewritten unless respond_to?(method, true)

  Editing.green_element(__send__(method, rewritten_view(element, rewritten)))
end