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

Instance Method Summary collapse

Class Method Details

.green_element(value) ⇒ Object

RBS:

  • (green | element value) -> green

Raises:

  • (TypeError)


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

RBS:

  • (SyntaxNode previous, GreenNode green) -> SyntaxNode



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

RBS:

  • (element target, green | element replacement) -> SyntaxNode

Raises:

  • (TypeError)


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_elementgreen

RBS:

  • (green | element value) -> green

Parameters:

  • value (green, element)

Returns:

  • (green)


19
# File 'sig/ibex/runtime/cst/editing.rbs', line 19

def self?.green_element: (green | element value) -> green

#self?.red_rootSyntaxNode

RBS:

  • (SyntaxNode previous, GreenNode green) -> SyntaxNode

Parameters:

Returns:



16
# File 'sig/ibex/runtime/cst/editing.rbs', line 16

def self?.red_root: (SyntaxNode previous, GreenNode green) -> SyntaxNode

#self?.replaceSyntaxNode

RBS:

  • (element target, green | element replacement) -> SyntaxNode

Parameters:

  • target (element)
  • replacement (green, element)

Returns:



13
# File 'sig/ibex/runtime/cst/editing.rbs', line 13

def self?.replace: (element target, green | element replacement) -> SyntaxNode