mirror of
https://github.com/neovim/neovim.git
synced 2025-01-01 17:23:36 -07:00
api/ui: verify compatibility of UI events
This commit is contained in:
parent
1cf50cbfd9
commit
bcab880bb6
@ -66,7 +66,7 @@ void scroll(Integer count)
|
|||||||
// Second revison of the grid protocol, used with ext_linegrid ui option
|
// Second revison of the grid protocol, used with ext_linegrid ui option
|
||||||
void default_colors_set(Integer rgb_fg, Integer rgb_bg, Integer rgb_sp,
|
void default_colors_set(Integer rgb_fg, Integer rgb_bg, Integer rgb_sp,
|
||||||
Integer cterm_fg, Integer cterm_bg)
|
Integer cterm_fg, Integer cterm_bg)
|
||||||
FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL;
|
FUNC_API_SINCE(4) FUNC_API_REMOTE_IMPL;
|
||||||
void hl_attr_define(Integer id, HlAttrs rgb_attrs, HlAttrs cterm_attrs,
|
void hl_attr_define(Integer id, HlAttrs rgb_attrs, HlAttrs cterm_attrs,
|
||||||
Array info)
|
Array info)
|
||||||
FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL FUNC_API_BRIDGE_IMPL;
|
FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL FUNC_API_BRIDGE_IMPL;
|
||||||
|
@ -46,12 +46,12 @@ end)
|
|||||||
describe("api functions", function()
|
describe("api functions", function()
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
|
|
||||||
local function func_table(metadata)
|
local function name_table(entries)
|
||||||
local functions = {}
|
local by_name = {}
|
||||||
for _,f in ipairs(metadata.functions) do
|
for _,e in ipairs(entries) do
|
||||||
functions[f.name] = f
|
by_name[e.name] = e
|
||||||
end
|
end
|
||||||
return functions
|
return by_name
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Remove metadata that is not essential to backwards-compatibility.
|
-- Remove metadata that is not essential to backwards-compatibility.
|
||||||
@ -67,6 +67,15 @@ describe("api functions", function()
|
|||||||
return f
|
return f
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function check_ui_event_compatible(old_e, new_e)
|
||||||
|
-- check types of existing params are the same
|
||||||
|
-- adding parameters is ok, but removing params is not (gives nil error)
|
||||||
|
eq(old_e.since, new_e.since, old_e.name)
|
||||||
|
for i,p in ipairs(old_e.parameters) do
|
||||||
|
eq(new_e.parameters[i][1], p[1], old_e.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Level 0 represents methods from 0.1.5 and earlier, when 'since' was not
|
-- Level 0 represents methods from 0.1.5 and earlier, when 'since' was not
|
||||||
-- yet defined, and metadata was not filtered of internal keys like 'async'.
|
-- yet defined, and metadata was not filtered of internal keys like 'async'.
|
||||||
local function clean_level_0(metadata)
|
local function clean_level_0(metadata)
|
||||||
@ -89,8 +98,10 @@ describe("api functions", function()
|
|||||||
stable = api_level
|
stable = api_level
|
||||||
end
|
end
|
||||||
|
|
||||||
local funcs_new = func_table(api)
|
local funcs_new = name_table(api.functions)
|
||||||
|
local ui_events_new = name_table(api.ui_events)
|
||||||
local funcs_compat = {}
|
local funcs_compat = {}
|
||||||
|
local ui_events_compat = {}
|
||||||
for level = compat, stable do
|
for level = compat, stable do
|
||||||
local path = ('test/functional/fixtures/api_level_'..
|
local path = ('test/functional/fixtures/api_level_'..
|
||||||
tostring(level)..'.mpack')
|
tostring(level)..'.mpack')
|
||||||
@ -119,8 +130,18 @@ describe("api functions", function()
|
|||||||
filter_function_metadata(funcs_new[f.name]))
|
filter_function_metadata(funcs_new[f.name]))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
funcs_compat[level] = name_table(old_api.functions)
|
||||||
|
|
||||||
funcs_compat[level] = func_table(old_api)
|
-- UI events were formalized in level 3
|
||||||
|
if level >= 3 then
|
||||||
|
for _,e in ipairs(old_api.ui_events) do
|
||||||
|
local new_e = ui_events_new[e.name]
|
||||||
|
if new_e ~= nil then
|
||||||
|
check_ui_event_compatible(e, new_e)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ui_events_compat[level] = name_table(old_api.ui_events)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for _,f in ipairs(api.functions) do
|
for _,f in ipairs(api.functions) do
|
||||||
@ -140,9 +161,38 @@ describe("api functions", function()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif f.since > api_level then
|
elseif f.since > api_level then
|
||||||
error("function "..f.name.." has since value > api_level. "..
|
if api.version.api_prerelease then
|
||||||
"Please bump NVIM_API_CURRENT and set "..
|
error("New function "..f.name.." should use since value "..
|
||||||
"NVIM_API_PRERELEASE to true in CMakeLists.txt.")
|
api_level)
|
||||||
|
else
|
||||||
|
error("function "..f.name.." has since value > api_level. "..
|
||||||
|
"Bump NVIM_API_CURRENT and set "..
|
||||||
|
"NVIM_API_PRERELEASE to true in CMakeLists.txt.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for _,e in ipairs(api.ui_events) do
|
||||||
|
if e.since <= stable then
|
||||||
|
local e_old = ui_events_compat[e.since][e.name]
|
||||||
|
if e_old == nil then
|
||||||
|
local errstr = ("UI event "..e.name.." has too low since value. "..
|
||||||
|
"For new events set it to "..(stable+1)..".")
|
||||||
|
if not api.version.api_prerelease then
|
||||||
|
errstr = (errstr.." Also bump NVIM_API_CURRENT and set "..
|
||||||
|
"NVIM_API_PRERELEASE to true in CMakeLists.txt.")
|
||||||
|
end
|
||||||
|
error(errstr)
|
||||||
|
end
|
||||||
|
elseif e.since > api_level then
|
||||||
|
if api.version.api_prerelease then
|
||||||
|
error("New UI event "..e.name.." should use since value "..
|
||||||
|
api_level)
|
||||||
|
else
|
||||||
|
error("UI event "..e.name.." has since value > api_level. "..
|
||||||
|
"Bump NVIM_API_CURRENT and set "..
|
||||||
|
"NVIM_API_PRERELEASE to true in CMakeLists.txt.")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user