aboutsummaryrefslogtreecommitdiff
path: root/src/gen/gen_vimdoc.lua
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2025-06-16 11:45:44 +0100
committerLewis Russell <me@lewisr.dev>2025-06-26 13:54:04 +0100
commit76de3e2d07f20c77b7ee6f72c8ec27b045e51ed1 (patch)
tree459bd875becca91797f796b1e06f73eb7d40c458 /src/gen/gen_vimdoc.lua
parent3eaa6c5a665999a9e374338137841937541ec33e (diff)
downloadrneovim-76de3e2d07f20c77b7ee6f72c8ec27b045e51ed1.tar.gz
rneovim-76de3e2d07f20c77b7ee6f72c8ec27b045e51ed1.tar.bz2
rneovim-76de3e2d07f20c77b7ee6f72c8ec27b045e51ed1.zip
docs(api): document types using LuaCATS types
- Render Lua types in api.txt. - Added `DictAs(name)` API type which acts the same as `Dict` (no parens) when generating the dispatchers, but acts the same as `Dict(name)` when generating docs. - Added `Tuple(...)` API type which is the treated the as `Array` for generating the dispatchers, but is used to document richer types. - Added `Enum(...)` API type to better document enums - Improve typing of some API functions. - Improve c_grammar to properly parse API types and replace string pattern logic in the parsers. - Removed all the hardcoded type overrides in gen_eval_files.lua
Diffstat (limited to 'src/gen/gen_vimdoc.lua')
-rwxr-xr-xsrc/gen/gen_vimdoc.lua31
1 files changed, 10 insertions, 21 deletions
diff --git a/src/gen/gen_vimdoc.lua b/src/gen/gen_vimdoc.lua
index faeda99dec..0d9f3cdcba 100755
--- a/src/gen/gen_vimdoc.lua
+++ b/src/gen/gen_vimdoc.lua
@@ -38,8 +38,6 @@ local INDENTATION = 4
--- List of files/directories for doxygen to read, relative to `base_dir`.
--- @field files string[]
---
---- @field exclude_types? true
----
--- Section name overrides. Key: filename (e.g., vim.c)
--- @field section_name? table<string,string>
---
@@ -119,7 +117,6 @@ local config = {
'autocmd.c',
'ui.c',
},
- exclude_types = true,
fn_name_pat = 'nvim_.*',
files = { 'src/nvim/api' },
section_name = {
@@ -550,9 +547,8 @@ end
--- @param xs (nvim.luacats.parser.param|nvim.luacats.parser.field)[]
--- @param generics? table<string,string>
--- @param classes? table<string,nvim.luacats.parser.class>
---- @param exclude_types? true
--- @param cfg nvim.gen_vimdoc.Config
-local function render_fields_or_params(xs, generics, classes, exclude_types, cfg)
+local function render_fields_or_params(xs, generics, classes, cfg)
local ret = {} --- @type string[]
xs = vim.tbl_filter(should_render_field_or_param, xs)
@@ -562,9 +558,6 @@ local function render_fields_or_params(xs, generics, classes, exclude_types, cfg
if p.type or p.desc then
indent = math.max(indent, #p.name + 3)
end
- if exclude_types then
- p.type = nil
- end
end
for _, p in ipairs(xs) do
@@ -627,7 +620,7 @@ local function render_class(class, classes, cfg)
table.insert(ret, md_to_vimdoc(class.desc, INDENTATION, INDENTATION, TEXT_WIDTH))
end
- local fields_txt = render_fields_or_params(class.fields, nil, classes, nil, cfg)
+ local fields_txt = render_fields_or_params(class.fields, nil, classes, cfg)
if not fields_txt:match('^%s*$') then
table.insert(ret, '\n Fields: ~\n')
table.insert(ret, fields_txt)
@@ -692,15 +685,12 @@ end
--- @param returns nvim.luacats.parser.return[]
--- @param generics? table<string,string>
--- @param classes? table<string,nvim.luacats.parser.class>
---- @param exclude_types boolean
-local function render_returns(returns, generics, classes, exclude_types)
+--- @return string?
+local function render_returns(returns, generics, classes)
local ret = {} --- @type string[]
- returns = vim.deepcopy(returns)
- if exclude_types then
- for _, r in ipairs(returns) do
- r.type = nil
- end
+ if #returns == 1 and returns[1].type == 'nil' then
+ return
end
if #returns > 1 then
@@ -720,7 +710,7 @@ local function render_returns(returns, generics, classes, exclude_types)
blk[#blk + 1] = rnm
blk[#blk + 1] = desc
- table.insert(ret, md_to_vimdoc(table.concat(blk, ' '), 8, 8, TEXT_WIDTH, true))
+ ret[#ret + 1] = md_to_vimdoc(table.concat(blk, ' '), 8, 8, TEXT_WIDTH, true)
end
return table.concat(ret)
@@ -788,8 +778,7 @@ local function render_fun(fun, classes, cfg)
end
if fun.params and #fun.params > 0 then
- local param_txt =
- render_fields_or_params(fun.params, fun.generics, classes, cfg.exclude_types, cfg)
+ local param_txt = render_fields_or_params(fun.params, fun.generics, classes, cfg)
if not param_txt:match('^%s*$') then
table.insert(ret, '\n Parameters: ~\n')
ret[#ret + 1] = param_txt
@@ -804,8 +793,8 @@ local function render_fun(fun, classes, cfg)
end
if fun.returns then
- local txt = render_returns(fun.returns, fun.generics, classes, cfg.exclude_types)
- if not txt:match('^%s*$') then
+ local txt = render_returns(fun.returns, fun.generics, classes)
+ if txt and not txt:match('^%s*$') then
table.insert(ret, '\n')
ret[#ret + 1] = txt
end