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

Inherits:
Object
  • Object
show all
Defined in:
lib/json5/generated_parser.rb

Overview

Bottom-up syntax rewriter with kind-name dispatch.

Instance Method Summary collapse

Instance Method Details

#rewrite(root) ⇒ Object

RBS:

  • (SyntaxNode root) -> SyntaxNode

Raises:

  • (TypeError)


1879
1880
1881
1882
1883
1884
1885
# File 'lib/json5/generated_parser.rb', line 1879

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

RBS:

  • (element element) -> green



1888
1889
1890
1891
1892
1893
1894
# File 'lib/json5/generated_parser.rb', line 1888

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