Class: Ibex::Runtime::CST::TextEdit

Inherits:
Object
  • Object
show all
Defined in:
lib/ibex/runtime/cst/text_edit.rb,
sig/ibex/runtime/cst/text_edit.rbs

Overview

One byte-oriented source replacement.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(start:, delete_length:, insert_text:) ⇒ TextEdit

Returns a new instance of TextEdit.

RBS:

  • (start: Integer, delete_length: Integer, insert_text: String) -> void

Parameters:

  • start: (Integer)
  • delete_length: (Integer)
  • insert_text: (String)


62
63
64
65
66
67
68
69
70
# File 'lib/ibex/runtime/cst/text_edit.rb', line 62

def initialize(start:, delete_length:, insert_text:)
  raise ArgumentError, "start must be non-negative" if start.negative?
  raise ArgumentError, "delete_length must be non-negative" if delete_length.negative?

  @start = start
  @delete_length = delete_length
  @insert_text = insert_text.b.freeze
  freeze
end

Instance Attribute Details

#delete_lengthInteger (readonly)

Signature:

  • Integer

Returns:

  • (Integer)


58
59
60
# File 'lib/ibex/runtime/cst/text_edit.rb', line 58

def delete_length
  @delete_length
end

#insert_textString (readonly)

Signature:

  • String

Returns:

  • (String)


59
60
61
# File 'lib/ibex/runtime/cst/text_edit.rb', line 59

def insert_text
  @insert_text
end

#startInteger (readonly)

Signature:

  • Integer

Returns:

  • (Integer)


57
58
59
# File 'lib/ibex/runtime/cst/text_edit.rb', line 57

def start
  @start
end

Class Method Details

.normalize(edits) ⇒ Array[TextEdit]

Sort and merge adjacent edits while rejecting intersecting source ranges. All edits remain expressed against the unedited source.

RBS:

  • (Array[TextEdit] edits) -> Array[TextEdit]

Parameters:

Returns:



13
14
15
16
17
18
19
20
21
# File 'lib/ibex/runtime/cst/text_edit.rb', line 13

def normalize(edits)
  raise ArgumentError, "edits must contain only TextEdit values" unless edits.all?(TextEdit)

  merge_adjacent(
    edits.each_with_index.sort_by do |edit, index|
      [edit.start, edit.delete_length.zero? ? 0 : 1, index]
    end.map(&:first)
  ).freeze
end

Instance Method Details

#rangeRange[Integer]

RBS:

  • () -> Range[Integer]

Returns:

  • (Range[Integer])


73
# File 'lib/ibex/runtime/cst/text_edit.rb', line 73

def range = @start...(@start + @delete_length)