fix(lua): don't mutate opts parameter of vim.keymap.del (#18227)

`vim.keymap.del` takes an `opts` parameter that lets caller refer to and
delete buffer-local mappings. For some reason the implementation of
`vim.keymap.del` mutates the table that is passed in, setting
`opts.buffer` to `nil`. This is wrong and also undocumented.
This commit is contained in:
Andrey Mishchenko 2022-04-22 20:01:08 -04:00 committed by GitHub
parent 116a3f4683
commit 4e4914ab2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 1 deletions

View File

@ -130,7 +130,6 @@ function keymap.del(modes, lhs, opts)
local buffer = false
if opts.buffer ~= nil then
buffer = opts.buffer == true and 0 or opts.buffer
opts.buffer = nil
end
if buffer == false then

View File

@ -2755,6 +2755,39 @@ describe('vim.keymap', function()
eq('\nNo mapping found', helpers.exec_capture('nmap asdf'))
end)
it('works with buffer-local mappings', function()
eq(0, exec_lua [[
GlobalCount = 0
vim.keymap.set('n', 'asdf', function() GlobalCount = GlobalCount + 1 end, {buffer=true})
return GlobalCount
]])
feed('asdf\n')
eq(1, exec_lua[[return GlobalCount]])
exec_lua [[
vim.keymap.del('n', 'asdf', {buffer=true})
]]
feed('asdf\n')
eq(1, exec_lua[[return GlobalCount]])
eq('\nNo mapping found', helpers.exec_capture('nmap asdf'))
end)
it('does not mutate the opts parameter', function()
eq(true, exec_lua [[
opts = {buffer=true}
vim.keymap.set('n', 'asdf', function() end, opts)
return opts.buffer
]])
eq(true, exec_lua [[
vim.keymap.del('n', 'asdf', opts)
return opts.buffer
]])
end)
it('can do <Plug> mappings', function()
eq(0, exec_lua [[
GlobalCount = 0