Class: Ibex::Runtime::CST::Cursor

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

Overview

Allocation-light cursor over Green elements and absolute offsets. rubocop:disable Naming/PredicateMethod -- cursor movement names follow the public tree-cursor convention.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node) ⇒ Cursor

Returns a new instance of Cursor.

RBS:

  • (SyntaxNode node) -> void



1559
1560
1561
1562
1563
# File 'lib/json5/generated_parser.rb', line 1559

def initialize(node)
  @green = node.green
  @offset = node.offset
  @frames = [] #: Array[frame]
end

Instance Attribute Details

#greenObject (readonly)

RBS:



1555
1556
1557
# File 'lib/json5/generated_parser.rb', line 1555

def green
  @green
end

#offsetObject (readonly)

Signature:

  • Integer



1556
1557
1558
# File 'lib/json5/generated_parser.rb', line 1556

def offset
  @offset
end

Instance Method Details

#goto_first_childObject

RBS:

  • () -> bool



1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
# File 'lib/json5/generated_parser.rb', line 1566

def goto_first_child
  green = @green
  return false unless green.is_a?(GreenNode)
  return false if green.children.empty?

  parent = green
  @frames << [parent, 0, @offset]
  @green = parent.children.fetch(0)
  true
end

#goto_next_siblingObject

RBS:

  • () -> bool



1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
# File 'lib/json5/generated_parser.rb', line 1578

def goto_next_sibling
  frame = @frames.last
  return false unless frame

  parent, index, parent_offset = frame
  next_index = index + 1
  return false if next_index >= parent.children.length

  frame[1] = next_index
  @offset = parent_offset + parent.children.first(next_index).sum(&:full_width)
  @green = parent.children.fetch(next_index)
  true
end

#goto_parentObject

RBS:

  • () -> bool



1593
1594
1595
1596
1597
1598
1599
1600
# File 'lib/json5/generated_parser.rb', line 1593

def goto_parent
  frame = @frames.pop
  return false unless frame

  @green = frame.fetch(0)
  @offset = frame.fetch(2)
  true
end

#kindObject

RBS:

  • () -> Integer



1603
# File 'lib/json5/generated_parser.rb', line 1603

def kind = @green.kind