Enable intra-line highlights to handle multiple regions

For example consider:

    -The cat in the hat.
    +The ox in the box.

Before this change the highlights would be:

    -The cat in the hat.
         ^^^^^^^^^^^^^^
    +The ox in the box.
         ^^^^^^^^^^^^^

After this change the highlights are:

    -The cat in the hat.
         ^^^        ^^^
    +The ox in the box.
         ^^        ^^^

Another example; before:

    -The quick brown fox jumped
    +The (quick) brown (fox) jumped
         ^^^^^^^^^^^^^^^^^^^

And after:

    -The quick brown fox jumped
    +The (quick) brown (fox) jumped
         ^     ^       ^   ^
This commit is contained in:
Andy Stewart
2019-09-24 10:26:31 +01:00
parent 68e735b92c
commit 9231bda97f
2 changed files with 130 additions and 58 deletions

View File

@@ -917,14 +917,22 @@ endfunction
function Test_common_prefix()
" nothing in common
call assert_equal(0, gitgutter#diff_highlight#common_prefix('-abcde', '+pqrst'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('-abcde', '+pqrst'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('abcde', 'pqrst'))
" something in common
call assert_equal(3, gitgutter#diff_highlight#common_prefix('-abcde', '+abcpq'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('-abcde', '+abcpq'))
call assert_equal(2, gitgutter#diff_highlight#common_prefix('abcde', 'abcpq'))
call assert_equal(0, gitgutter#diff_highlight#common_prefix('abc', 'apq'))
" everything in common
call assert_equal(5, gitgutter#diff_highlight#common_prefix('-abcde', '+abcde'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('-abcde', '+abcde'))
call assert_equal(4, gitgutter#diff_highlight#common_prefix('abcde', 'abcde'))
" different lengths
call assert_equal(2, gitgutter#diff_highlight#common_prefix('-abcde', '+abx'))
call assert_equal(2, gitgutter#diff_highlight#common_prefix('-abx', '+abcde'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('-abcde', '+abx'))
call assert_equal(1, gitgutter#diff_highlight#common_prefix('abcde', 'abx'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('-abx', '+abcde'))
call assert_equal(1, gitgutter#diff_highlight#common_prefix('abx', 'abcde'))
call assert_equal(-1, gitgutter#diff_highlight#common_prefix('-abcde', '+abc'))
call assert_equal(2, gitgutter#diff_highlight#common_prefix('abcde', 'abc'))
endfunction
@@ -1010,5 +1018,12 @@ function Test_diff_highlight()
" two edits
let hunk = ['-The cat in the hat.', '+The ox in the box.']
call assert_equal([[1, '-', 6, 8], [1, '-', 17, 19], [2, '+', 6, 7], [2, '+', 16, 18]], gitgutter#diff_highlight#process(hunk))
call assert_equal([[1, '-', 6, 8], [2, '+', 6, 7], [1, '-', 17, 19], [2, '+', 16, 18]], gitgutter#diff_highlight#process(hunk))
endfunction
function Test_lcs()
call assert_equal('', gitgutter#diff_highlight#lcs('', 'foo'))
call assert_equal('', gitgutter#diff_highlight#lcs('foo', ''))
call assert_equal('bar', gitgutter#diff_highlight#lcs('foobarbaz', 'bbart'))
endfunction