Module: Ibex::Runtime::CST::Editing
- Defined in:
- lib/ibex/runtime/cst/editing.rb,
sig/ibex/runtime/cst/editing.rbs
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
Instance Method Summary collapse
Class Method Details
.green_element(value) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/ibex/runtime/cst/editing.rb', line 46 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
36 37 38 39 40 41 42 |
# File 'lib/ibex/runtime/cst/editing.rb', line 36 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
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/ibex/runtime/cst/editing.rb', line 15 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 |
Instance Method Details
#self?.green_element ⇒ green
19 |
# File 'sig/ibex/runtime/cst/editing.rbs', line 19
def self?.green_element: (green | element value) -> green
|
#self?.red_root ⇒ SyntaxNode
16 |
# File 'sig/ibex/runtime/cst/editing.rbs', line 16
def self?.red_root: (SyntaxNode previous, GreenNode green) -> SyntaxNode
|
#self?.replace ⇒ SyntaxNode
13 |
# File 'sig/ibex/runtime/cst/editing.rbs', line 13
def self?.replace: (element target, green | element replacement) -> SyntaxNode
|