aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/diff.c6
-rw-r--r--test/functional/ui/diff_spec.lua28
-rw-r--r--test/functional/ui/highlight_spec.lua6
-rw-r--r--test/old/testdir/test_diffmode.vim10
4 files changed, 46 insertions, 4 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 7096c5fa8a..0c59b8eb67 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -736,6 +736,12 @@ static void clear_diffout(diffout_T *dout)
/// @return FAIL for failure.
static int diff_write_buffer(buf_T *buf, mmfile_t *m, linenr_T start, linenr_T end)
{
+ if (buf->b_ml.ml_flags & ML_EMPTY) {
+ m->ptr = NULL;
+ m->size = 0;
+ return OK;
+ }
+
size_t len = 0;
if (end < 0) {
diff --git a/test/functional/ui/diff_spec.lua b/test/functional/ui/diff_spec.lua
index bad35dd2af..8db6f776d1 100644
--- a/test/functional/ui/diff_spec.lua
+++ b/test/functional/ui/diff_spec.lua
@@ -614,6 +614,34 @@ int main(int argc, char **argv)
]])
end)
+ it('Diff empty and non-empty file', function()
+ write_file(fname, '', false)
+ write_file(fname_2, 'foo\nbar\nbaz', false)
+ reread()
+
+ feed(':set diffopt=filler<cr>')
+ screen:expect([[
+ {7: }{23:------------------}│{7: }{22:foo }|
+ {7: }{23:------------------}│{7: }{22:bar }|
+ {7: }{23:------------------}│{7: }{22:baz }|
+ {7: }^ │{1:~ }|
+ {1:~ }│{1:~ }|*10
+ {3:<onal-diff-screen-1 }{2:<l-diff-screen-1.2 }|
+ :set diffopt=filler |
+ ]])
+
+ feed(':set diffopt+=internal<cr>')
+ screen:expect([[
+ {7: }{23:------------------}│{7: }{22:foo }|
+ {7: }{23:------------------}│{7: }{22:bar }|
+ {7: }{23:------------------}│{7: }{22:baz }|
+ {7: }^ │{1:~ }|
+ {1:~ }│{1:~ }|*10
+ {3:<onal-diff-screen-1 }{2:<l-diff-screen-1.2 }|
+ :set diffopt+=internal |
+ ]])
+ end)
+
it('diffopt+=icase', function()
write_file(fname, 'a\nb\ncd\n', false)
write_file(fname_2, 'A\nb\ncDe\n', false)
diff --git a/test/functional/ui/highlight_spec.lua b/test/functional/ui/highlight_spec.lua
index 277bd96bd8..87d66fa604 100644
--- a/test/functional/ui/highlight_spec.lua
+++ b/test/functional/ui/highlight_spec.lua
@@ -596,13 +596,13 @@ describe('highlight', function()
]])
screen:expect(
[[
- {1: }^ |
+ {1: }{5:^ }|
{1: }{2:01}{3:234 67}{2:89}{5: }|
{4:~ }|*2
{7:[No Name] [+] }|
- {1: } |
{1: }{6:-----------------------}|
- {4:~ }|
+ {1: }{6:-----------------------}|
+ {1: } |
{8:[No Name] }|
|
]],
diff --git a/test/old/testdir/test_diffmode.vim b/test/old/testdir/test_diffmode.vim
index 31d66ebc4a..84cb7eb376 100644
--- a/test/old/testdir/test_diffmode.vim
+++ b/test/old/testdir/test_diffmode.vim
@@ -997,9 +997,17 @@ func Test_diff_screen()
call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
- " Test 19: test diffopt+=iwhiteall
+ " Test 20: test diffopt+=iwhiteall
call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
+ " Test 21: Delete all lines
+ call WriteDiffFiles(buf, [0], [])
+ call VerifyBoth(buf, "Test_diff_21", "")
+
+ " Test 22: Add line to empty file
+ call WriteDiffFiles(buf, [], [0])
+ call VerifyBoth(buf, "Test_diff_22", "")
+
" clean up
call StopVimInTerminal(buf)
call delete('Xdifile1')