summaryrefslogtreecommitdiff
path: root/lib/diff/lcs/block.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/diff/lcs/block.rb')
-rw-r--r--lib/diff/lcs/block.rb30
1 files changed, 24 insertions, 6 deletions
diff --git a/lib/diff/lcs/block.rb b/lib/diff/lcs/block.rb
index 430702d..d31a4d3 100644
--- a/lib/diff/lcs/block.rb
+++ b/lib/diff/lcs/block.rb
@@ -1,15 +1,31 @@
# frozen_string_literal: true
+# typed: strict
# A block is an operation removing, adding, or changing a group of items.
# Basically, this is just a list of changes, where each change adds or
# deletes a single item. Used by bin/ldiff.
class Diff::LCS::Block
- attr_reader :changes, :insert, :remove
+ extend T::Sig
+ ArrayOfChange = T.type_alias { T::Array[Diff::LCS::Change] }
+
+ # The full set of changes in the block.
+ sig { returns(ArrayOfChange) }
+ attr_reader :changes
+
+ # The insertions in the block.
+ sig { returns(ArrayOfChange) }
+ attr_reader :insert
+
+ # The deletions in the block.
+ sig { returns(ArrayOfChange) }
+ attr_reader :remove
+
+ sig { params(chunk: ArrayOfChange).void }
def initialize(chunk)
- @changes = []
- @insert = []
- @remove = []
+ @changes = T.let([], ArrayOfChange)
+ @insert = T.let([], ArrayOfChange)
+ @remove = T.let([], ArrayOfChange)
chunk.each do |item|
@changes << item
@@ -18,12 +34,14 @@ class Diff::LCS::Block
end
end
+ sig { returns(Integer) }
def diff_size
- @insert.size - @remove.size
+ insert.size - remove.size
end
+ sig { returns(String) }
def op
- case [@remove.empty?, @insert.empty?]
+ case [remove.empty?, insert.empty?]
when [false, false]
'!'
when [false, true]