diff options
Diffstat (limited to 'lib/diff/lcs/block.rb')
-rw-r--r-- | lib/diff/lcs/block.rb | 30 |
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] |