Module: Ibex::Runtime::CST::Editing
- Defined in:
- lib/json5/generated_parser.rb
Overview
Shared path-copying operations for Red syntax elements.
Class Method Summary collapse
- .green_element(value) ⇒ Object
- .red_root(previous, green) ⇒ Object
- .replace(target, replacement) ⇒ Object
Class Method Details
.green_element(value) ⇒ Object
1779 1780 1781 1782 1783 1784 |
# File 'lib/json5/generated_parser.rb', line 1779 def green_element(value) return value.green if value.is_a?(SyntaxNode) || value.is_a?(SyntaxToken) return value if value.is_a?(GreenNode) || value.is_a?(GreenToken) raise TypeError, "replacement must be a Green syntax element or Red syntax view" end |
.red_root(previous, green) ⇒ Object
1769 1770 1771 1772 1773 1774 1775 |
# File 'lib/json5/generated_parser.rb', line 1769 def red_root(previous, green) source = SourceText.new(green.to_source, file: previous.source_text.file) SyntaxNode.new( green: green, kinds: previous.kinds, trivia_policy: previous.trivia_policy, source_text: source ) end |
.replace(target, replacement) ⇒ Object
1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 |
# File 'lib/json5/generated_parser.rb', line 1748 def replace(target, replacement) green = green_element(replacement) current = target parent = target.parent while parent children = parent.green.children.dup children[current.index] = green green = GreenNode.new( kind: parent.green.kind, children: children, flags: parent.green.intrinsic_flags, annotations: parent.green.annotations ) current = parent parent = parent.parent end raise TypeError, "the root replacement must be a GreenNode" unless green.is_a?(GreenNode) red_root(target.root, green) end |