aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2024-09-23 12:15:06 +0200
committerJustin M. Keyes <justinkz@gmail.com>2024-09-23 14:42:57 +0200
commit17027d64726864c7bbdba5bee004eb581ac4b54a (patch)
tree0be1e9802cedc383e0dda38114c5535ffe653caa
parent737f58e23230ea14f1648ac1fc7f442ea0f8563c (diff)
downloadrneovim-17027d64726864c7bbdba5bee004eb581ac4b54a.tar.gz
rneovim-17027d64726864c7bbdba5bee004eb581ac4b54a.tar.bz2
rneovim-17027d64726864c7bbdba5bee004eb581ac4b54a.zip
refactor(api): rename Dictionary => Dict
In the api_info() output: :new|put =map(filter(api_info().functions, '!has_key(v:val,''deprecated_since'')'), 'v:val') ... {'return_type': 'ArrayOf(Integer, 2)', 'name': 'nvim_win_get_position', 'method': v:true, 'parameters': [['Window', 'window']], 'since': 1} The `ArrayOf(Integer, 2)` return type didn't break clients when we added it, which is evidence that clients don't use the `return_type` field, thus renaming Dictionary => Dict in api_info() is not a breaking change.
-rw-r--r--src/nvim/generators/gen_api_ui_events.lua5
-rw-r--r--test/functional/api/version_spec.lua14
2 files changed, 14 insertions, 5 deletions
diff --git a/src/nvim/generators/gen_api_ui_events.lua b/src/nvim/generators/gen_api_ui_events.lua
index 7f90039090..3e8ae19c9a 100644
--- a/src/nvim/generators/gen_api_ui_events.lua
+++ b/src/nvim/generators/gen_api_ui_events.lua
@@ -205,8 +205,9 @@ for _, ev in ipairs(events) do
ev_exported[attr] = ev[attr]
end
for _, p in ipairs(ev_exported.parameters) do
- if p[1] == 'HlAttrs' then
- p[1] = 'Dict'
+ if p[1] == 'HlAttrs' or p[1] == 'Dict' then
+ -- TODO(justinmk): for back-compat, but do clients actually look at this?
+ p[1] = 'Dictionary'
end
end
if not ev.noexport then
diff --git a/test/functional/api/version_spec.lua b/test/functional/api/version_spec.lua
index 5dad9978b7..617786eb2d 100644
--- a/test/functional/api/version_spec.lua
+++ b/test/functional/api/version_spec.lua
@@ -58,10 +58,18 @@ describe('api metadata', function()
return by_name
end
- -- Remove metadata that is not essential to backwards-compatibility.
- local function filter_function_metadata(f)
+ -- Remove or patch metadata that is not essential to backwards-compatibility.
+ local function normalize_func_metadata(f)
+ -- Dictionary was renamed to Dict. That doesn't break back-compat because clients don't actually
+ -- use the `return_type` field (evidence: "ArrayOf(…)" didn't break clients).
+ f.return_type = f.return_type:gsub('Dictionary', 'Dict')
+
f.deprecated_since = nil
for idx, _ in ipairs(f.parameters) do
+ -- Dictionary was renamed to Dict. Doesn't break back-compat because clients don't actually
+ -- use the `parameters` field of API metadata (evidence: "ArrayOf(…)" didn't break clients).
+ f.parameters[idx][1] = f.parameters[idx][1]:gsub('Dictionary', 'Dict')
+
f.parameters[idx][2] = '' -- Remove parameter name.
end
@@ -141,7 +149,7 @@ describe('api metadata', function()
)
end
else
- eq(filter_function_metadata(f), filter_function_metadata(funcs_new[f.name]))
+ eq(normalize_func_metadata(f), normalize_func_metadata(funcs_new[f.name]))
end
end
funcs_compat[level] = name_table(old_api[level].functions)