aboutsummaryrefslogtreecommitdiff
path: root/scripts/gen_eval_files.lua
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/gen_eval_files.lua')
-rwxr-xr-xscripts/gen_eval_files.lua64
1 files changed, 45 insertions, 19 deletions
diff --git a/scripts/gen_eval_files.lua b/scripts/gen_eval_files.lua
index 25f3e30b74..b9ea4e73f0 100755
--- a/scripts/gen_eval_files.lua
+++ b/scripts/gen_eval_files.lua
@@ -2,7 +2,11 @@
-- Generator for various vimdoc and Lua type files
+local util = require('scripts.util')
+local fmt = string.format
+
local DEP_API_METADATA = 'build/funcs_metadata.mpack'
+local TEXT_WIDTH = 78
--- @class vim.api.metadata
--- @field name string
@@ -170,9 +174,9 @@ local function render_fun_sig(f, params)
end
if LUA_KEYWORDS[f] then
- return string.format("vim.fn['%s'] = function(%s) end", f, param_str)
+ return fmt("vim.fn['%s'] = function(%s) end", f, param_str)
else
- return string.format('function vim.fn.%s(%s) end', f, param_str)
+ return fmt('function vim.fn.%s(%s) end', f, param_str)
end
end
@@ -306,14 +310,13 @@ local function norm_text(x, special)
)
end
+--- Generates LuaLS docstring for an API function.
--- @param _f string
--- @param fun vim.EvalFn
--- @param write fun(line: string)
local function render_api_meta(_f, fun, write)
write('')
- local util = require('scripts.util')
-
if vim.startswith(fun.name, 'nvim__') then
write('--- @private')
end
@@ -365,7 +368,7 @@ local function render_api_meta(_f, fun, write)
end
local param_str = table.concat(param_names, ', ')
- write(string.format('function vim.api.%s(%s) end', fun.name, param_str))
+ write(fmt('function vim.api.%s(%s) end', fun.name, param_str))
end
--- @return table<string, vim.EvalFn>
@@ -393,6 +396,7 @@ local function get_api_keysets_meta()
return ret
end
+--- Generates LuaLS docstring for an API keyset.
--- @param _f string
--- @param fun vim.EvalFn
--- @param write fun(line: string)
@@ -412,6 +416,7 @@ local function get_eval_meta()
return require('src/nvim/eval').funcs
end
+--- Generates LuaLS docstring for a Vimscript "eval" function.
--- @param f string
--- @param fun vim.EvalFn
--- @param write fun(line: string)
@@ -421,7 +426,6 @@ local function render_eval_meta(f, fun, write)
end
local funname = fun.name or f
-
local params = process_params(fun.params)
write('')
@@ -445,16 +449,18 @@ local function render_eval_meta(f, fun, write)
for i, param in ipairs(params) do
local pname, ptype = param[1], param[2]
local optional = (pname ~= '...' and i > req_args) and '?' or ''
- write(string.format('--- @param %s%s %s', pname, optional, ptype))
+ write(fmt('--- @param %s%s %s', pname, optional, ptype))
end
if fun.returns ~= false then
- write('--- @return ' .. (fun.returns or 'any'))
+ local ret_desc = fun.returns_desc and ' # ' .. fun.returns_desc or ''
+ write('--- @return ' .. (fun.returns or 'any') .. ret_desc)
end
write(render_fun_sig(funname, params))
end
+--- Generates vimdoc heading for a Vimscript "eval" function signature.
--- @param name string
--- @param name_tag boolean
--- @param fun vim.EvalFn
@@ -486,19 +492,16 @@ local function render_sig_and_tag(name, name_tag, fun, write)
write(string.rep(' ', tag_pad_len) .. tag)
write(fun.signature)
else
- write(string.format('%s%s%s', fun.signature, string.rep(' ', tag_pad_len - siglen), tag))
+ write(fmt('%s%s%s', fun.signature, string.rep(' ', tag_pad_len - siglen), tag))
end
end
+--- Generates vimdoc for a Vimscript "eval" function.
--- @param f string
--- @param fun vim.EvalFn
--- @param write fun(line: string)
local function render_eval_doc(f, fun, write)
- if fun.deprecated then
- return
- end
-
- if not fun.signature then
+ if fun.deprecated or not fun.signature then
return
end
@@ -508,6 +511,9 @@ local function render_eval_doc(f, fun, write)
return
end
+ local params = process_params(fun.params)
+ local req_args = type(fun.args) == 'table' and fun.args[1] or fun.args or 0
+
local desc_l = split(vim.trim(fun.desc))
for _, l in ipairs(desc_l) do
l = l:gsub('^ ', '')
@@ -523,6 +529,26 @@ local function render_eval_doc(f, fun, write)
if #desc_l > 0 and not desc_l[#desc_l]:match('^<?$') then
write('')
end
+
+ if #params > 0 then
+ write(util.md_to_vimdoc('Parameters: ~', 16, 16, TEXT_WIDTH))
+ for i, param in ipairs(params) do
+ local pname, ptype = param[1], param[2]
+ local optional = (pname ~= '...' and i > req_args) and '?' or ''
+ local s = fmt('- %-14s (`%s%s`)', fmt('{%s}', pname), ptype, optional)
+ write(util.md_to_vimdoc(s, 16, 18, TEXT_WIDTH))
+ end
+ write('')
+ end
+
+ if fun.returns ~= false then
+ write(util.md_to_vimdoc('Return: ~', 16, 16, TEXT_WIDTH))
+ local ret = ('(`%s`)'):format((fun.returns or 'any'))
+ ret = ret .. (fun.returns_desc and ' ' .. fun.returns_desc or '')
+ ret = util.md_to_vimdoc(ret, 18, 18, TEXT_WIDTH)
+ write(ret)
+ write('')
+ end
end
--- @param d vim.option_defaults
@@ -760,9 +786,9 @@ local function render_option_doc(_f, opt, write)
local name_str --- @type string
if opt.abbreviation then
- name_str = string.format("'%s' '%s'", opt.full_name, opt.abbreviation)
+ name_str = fmt("'%s' '%s'", opt.full_name, opt.abbreviation)
else
- name_str = string.format("'%s'", opt.full_name)
+ name_str = fmt("'%s'", opt.full_name)
end
local otype = opt.type == 'boolean' and 'boolean' or opt.type
@@ -770,13 +796,13 @@ local function render_option_doc(_f, opt, write)
local v = render_option_default(opt.defaults, true)
local pad = string.rep('\t', math.max(1, math.ceil((24 - #name_str) / 8)))
if opt.defaults.doc then
- local deflen = #string.format('%s%s%s (', name_str, pad, otype)
+ local deflen = #fmt('%s%s%s (', name_str, pad, otype)
--- @type string
v = v:gsub('\n', '\n' .. string.rep(' ', deflen - 2))
end
- write(string.format('%s%s%s\t(default %s)', name_str, pad, otype, v))
+ write(fmt('%s%s%s\t(default %s)', name_str, pad, otype, v))
else
- write(string.format('%s\t%s', name_str, otype))
+ write(fmt('%s\t%s', name_str, otype))
end
write('\t\t\t' .. scope_to_doc(opt.scope) .. scope_more_doc(opt))