API/nvim_set_keymap: remove mode-shortname aliases

Reduce the API surface-area a bit. No need to have aliases for a mode.
ref #9924
This commit is contained in:
Justin M. Keyes
2019-05-12 13:24:20 +02:00
parent f35d233e07
commit 60aaae1c86
2 changed files with 35 additions and 36 deletions

View File

@@ -797,15 +797,14 @@ void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs,
mode_val = get_map_mode(&p, true); // mapmode-ic mode_val = get_map_mode(&p, true); // mapmode-ic
} else { } else {
mode_val = get_map_mode(&p, false); mode_val = get_map_mode(&p, false);
if (mode_val == VISUAL + SELECTMODE + NORMAL + OP_PENDING) { if ((mode_val == VISUAL + SELECTMODE + NORMAL + OP_PENDING)
// get_map_mode will treat "unrecognized" mode shortnames like "map" && mode.size > 0) {
// if it does, and the given shortname wasn't "m" or " ", then error // get_map_mode() treats unrecognized mode shortnames as ":map".
if (STRNCMP(p, "m", 2) && STRNCMP(p, " ", 2)) { // This is an error unless the given shortname was empty string "".
err_msg = "Invalid mode shortname: %s"; err_msg = "Invalid mode shortname: \"%s\"";
err_arg = (char *)p; err_arg = (char *)p;
err_type = kErrorTypeValidation; err_type = kErrorTypeValidation;
goto fail_with_message; goto fail_with_message;
}
} }
} }

View File

@@ -316,15 +316,15 @@ end)
describe('nvim_set_keymap, nvim_del_keymap', function() describe('nvim_set_keymap, nvim_del_keymap', function()
before_each(clear) before_each(clear)
-- generate_expected is truthy when we want to generate an expected output for -- `generate_expected` is truthy: for generating an expected output for
-- maparg(); mapargs() won't take '!' as an input, though it will return '!' -- maparg(), which does not accept "!" (though it returns "!" in its output
-- in its output if getting a mapping set with |:map!| -- if getting a mapping set with |:map!|).
local function normalize_mapmode(mode, generate_expected) local function normalize_mapmode(mode, generate_expected)
if not generate_expected and mode == '!' then if not generate_expected and mode == '!' then
-- can't retrieve mapmode-ic mappings with '!', but can with 'i' or 'c'. -- Cannot retrieve mapmode-ic mappings with "!", but can with "i" or "c".
mode = 'i' mode = 'i'
elseif mode == '' or mode == ' ' or mode == 'm' then elseif mode == '' then
mode = generate_expected and ' ' or 'm' mode = generate_expected and ' ' or mode
end end
return mode return mode
end end
@@ -355,13 +355,12 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
return to_return return to_return
end end
-- Retrieve a mapargs dict from neovim, if one exists -- Gets a maparg() dict from Nvim, if one exists.
local function get_mapargs(mode, lhs) local function get_mapargs(mode, lhs)
return funcs.maparg(lhs, normalize_mapmode(mode), false, true) return funcs.maparg(lhs, normalize_mapmode(mode), false, true)
end end
-- Test error handling it('error on empty LHS', function()
it('throws errors when given empty lhs', function()
-- escape parentheses in lua string, else comparison fails erroneously -- escape parentheses in lua string, else comparison fails erroneously
expect_err('Invalid %(empty%) LHS', expect_err('Invalid %(empty%) LHS',
meths.set_keymap, '', '', 'rhs', {}) meths.set_keymap, '', '', 'rhs', {})
@@ -371,7 +370,7 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
expect_err('Invalid %(empty%) LHS', meths.del_keymap, '', '') expect_err('Invalid %(empty%) LHS', meths.del_keymap, '', '')
end) end)
it('throws errors when given an lhs longer than MAXMAPLEN', function() it('error if LHS longer than MAXMAPLEN', function()
-- assume MAXMAPLEN of 50 chars, as declared in vim.h -- assume MAXMAPLEN of 50 chars, as declared in vim.h
local MAXMAPLEN = 50 local MAXMAPLEN = 50
local lhs = '' local lhs = ''
@@ -421,22 +420,23 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
expect_err('Shortname is too long: xnoremap', meths.del_keymap, 'xnoremap', 'lhs') expect_err('Shortname is too long: xnoremap', meths.del_keymap, 'xnoremap', 'lhs')
end) end)
it('throws errors when given unrecognized mode shortnames', function() it('error on invalid mode shortname', function()
expect_err('Invalid mode shortname: ?', expect_err('Invalid mode shortname: " "',
meths.set_keymap, ' ', 'lhs', 'rhs', {})
expect_err('Invalid mode shortname: "m"',
meths.set_keymap, 'm', 'lhs', 'rhs', {})
expect_err('Invalid mode shortname: "?"',
meths.set_keymap, '?', 'lhs', 'rhs', {}) meths.set_keymap, '?', 'lhs', 'rhs', {})
expect_err('Invalid mode shortname: "y"',
expect_err('Invalid mode shortname: y',
meths.set_keymap, 'y', 'lhs', 'rhs', {}) meths.set_keymap, 'y', 'lhs', 'rhs', {})
expect_err('Invalid mode shortname: "p"',
expect_err('Invalid mode shortname: p',
meths.set_keymap, 'p', 'lhs', 'rhs', {}) meths.set_keymap, 'p', 'lhs', 'rhs', {})
expect_err('Invalid mode shortname: "?"', meths.del_keymap, '?', 'lhs')
expect_err('Invalid mode shortname: ?', meths.del_keymap, '?', 'lhs') expect_err('Invalid mode shortname: "y"', meths.del_keymap, 'y', 'lhs')
expect_err('Invalid mode shortname: y', meths.del_keymap, 'y', 'lhs') expect_err('Invalid mode shortname: "p"', meths.del_keymap, 'p', 'lhs')
expect_err('Invalid mode shortname: p', meths.del_keymap, 'p', 'lhs')
end) end)
it('throws errors when optnames are almost right', function() it('error on invalid optnames', function()
expect_err('Invalid key: silentt', expect_err('Invalid key: silentt',
meths.set_keymap, 'n', 'lhs', 'rhs', {silentt = true}) meths.set_keymap, 'n', 'lhs', 'rhs', {silentt = true})
expect_err('Invalid key: sidd', expect_err('Invalid key: sidd',
@@ -445,7 +445,7 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
meths.set_keymap, 'n', 'lhs', 'rhs', {nowaiT = false}) meths.set_keymap, 'n', 'lhs', 'rhs', {nowaiT = false})
end) end)
it('does not recognize <buffer> as an option', function() it('error on <buffer> option key', function()
expect_err('Invalid key: buffer', expect_err('Invalid key: buffer',
meths.set_keymap, 'n', 'lhs', 'rhs', {buffer = true}) meths.set_keymap, 'n', 'lhs', 'rhs', {buffer = true})
end) end)
@@ -462,7 +462,7 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
end end
-- Perform tests of basic functionality -- Perform tests of basic functionality
it('can set ordinary mappings', function() it('sets ordinary mappings', function()
meths.set_keymap('n', 'lhs', 'rhs', {}) meths.set_keymap('n', 'lhs', 'rhs', {})
eq(generate_mapargs('n', 'lhs', 'rhs'), get_mapargs('n', 'lhs')) eq(generate_mapargs('n', 'lhs', 'rhs'), get_mapargs('n', 'lhs'))
@@ -470,7 +470,7 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
eq(generate_mapargs('v', 'lhs', 'rhs'), get_mapargs('v', 'lhs')) eq(generate_mapargs('v', 'lhs', 'rhs'), get_mapargs('v', 'lhs'))
end) end)
it('doesn\'t throw when lhs or rhs have leading/trailing WS', function() it('does not throw when LHS or RHS have leading/trailing whitespace', function()
meths.set_keymap('n', ' lhs', 'rhs', {}) meths.set_keymap('n', ' lhs', 'rhs', {})
eq(generate_mapargs('n', '<Space><Space><Space>lhs', 'rhs'), eq(generate_mapargs('n', '<Space><Space><Space>lhs', 'rhs'),
get_mapargs('n', ' lhs')) get_mapargs('n', ' lhs'))
@@ -505,8 +505,8 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
end) end)
-- Test some edge cases -- Test some edge cases
it('accepts "!" and " " and "" as synonyms for mapmode-nvo', function() it('"!" and empty string are synonyms for mapmode-nvo', function()
local nvo_shortnames = {'', ' ', '!'} local nvo_shortnames = {'', '!'}
for _, name in ipairs(nvo_shortnames) do for _, name in ipairs(nvo_shortnames) do
meths.set_keymap(name, 'lhs', 'rhs', {}) meths.set_keymap(name, 'lhs', 'rhs', {})
meths.del_keymap(name, 'lhs') meths.del_keymap(name, 'lhs')
@@ -653,7 +653,7 @@ describe('nvim_set_keymap, nvim_del_keymap', function()
end) end)
-- Perform exhaustive tests of basic functionality -- Perform exhaustive tests of basic functionality
local mapmodes = {'n', 'v', 'x', 's', 'o', '!', 'i', 'l', 'c', 't', ' ', ''} local mapmodes = {'n', 'v', 'x', 's', 'o', '!', 'i', 'l', 'c', 't', ''}
for _, mapmode in ipairs(mapmodes) do for _, mapmode in ipairs(mapmodes) do
it('can set/unset normal mappings in mapmode '..mapmode, function() it('can set/unset normal mappings in mapmode '..mapmode, function()
meths.set_keymap(mapmode, 'lhs', 'rhs', {}) meths.set_keymap(mapmode, 'lhs', 'rhs', {})