From a616272f568a9492580abfd22ab460457ecdbfa3 Mon Sep 17 00:00:00 2001 From: Famiu Haque Date: Fri, 24 May 2024 15:57:46 +0600 Subject: feat(complete): specify reason for CompleteDone Problem: `CompleteDone` currently does not specify the reason for why completion was done, which is problematic for completion plugins as they cannot know whether the event was triggered due to the completion being canceled, accepted, or for some other reason. Solution: Add a `reason` key to `v:event`, which is set by `CompleteDone` to indicate why completion ended. --- test/functional/autocmd/completedone_spec.lua | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/functional/autocmd/completedone_spec.lua (limited to 'test/functional') diff --git a/test/functional/autocmd/completedone_spec.lua b/test/functional/autocmd/completedone_spec.lua new file mode 100644 index 0000000000..33beb16db2 --- /dev/null +++ b/test/functional/autocmd/completedone_spec.lua @@ -0,0 +1,41 @@ +local t = require('test.testutil') +local n = require('test.functional.testnvim')() + +local clear = n.clear +local command = n.command +local call = n.call +local feed = n.feed +local eval = n.eval +local eq = t.eq + +describe('CompleteDone', function() + before_each(clear) + + describe('sets v:event.reason', function() + before_each(function() + clear() + command('autocmd CompleteDone * let g:donereason = v:event.reason') + feed('i') + call('complete', call('col', '.'), { 'foo', 'bar' }) + end) + + it('accept', function() + feed('') + eq('accept', eval('g:donereason')) + end) + describe('cancel', function() + it('on ', function() + feed('') + eq('cancel', eval('g:donereason')) + end) + it('on non-keyword character', function() + feed('') + eq('cancel', eval('g:donereason')) + end) + it('when overriden by another complete()', function() + call('complete', call('col', '.'), { 'bar', 'baz' }) + eq('cancel', eval('g:donereason')) + end) + end) + end) +end) -- cgit