From 968947b3c340b904b7211f55d0395d81663f2043 Mon Sep 17 00:00:00 2001 From: "PRIZ ;]" Date: Sat, 3 May 2025 13:34:25 -0500 Subject: [PATCH] docs(lua): typing for vim.fn.winlayout #33817 Problem: `any[]` means nothing, and the return value is not the same as what's documented in the comment (eg, Lua returns `{ "row", { { "leaf", 1000 }, { "leaf", 1001 } } }`, not `{ "row", { "leaf", 1000, "leaf", 1001 } }`) Solution: Create two classes (vim.fn.winlayout.leaf and vim.fn.winlayout.branch) and one alias that links the two together. Also: Due to LuaLS limitations, there is an empty class, vim.fn.winlayout.empty Signed-Off-By: VoxelPrismatic (cherry picked from commit 902b689c4d57094cc8955f8274773a308b2e8f08) --- runtime/doc/builtin.txt | 2 +- runtime/lua/vim/_meta/builtin_types.lua | 15 +++++++++++++++ runtime/lua/vim/_meta/vimfn.lua | 2 +- src/nvim/eval.lua | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index bffc4b203d..30506bbec9 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -12029,7 +12029,7 @@ winlayout([{tabnr}]) *winlayout()* • {tabnr} (`integer?`) Return: ~ - (`any[]`) + (`vim.fn.winlayout.ret`) winline() *winline()* The result is a Number, which is the screen line of the cursor diff --git a/runtime/lua/vim/_meta/builtin_types.lua b/runtime/lua/vim/_meta/builtin_types.lua index 763153f38d..6886cd6bb7 100644 --- a/runtime/lua/vim/_meta/builtin_types.lua +++ b/runtime/lua/vim/_meta/builtin_types.lua @@ -297,3 +297,18 @@ --- A list of dictionaries with information about --- undo blocks. --- @field entries vim.fn.undotree.entry[] + +--- @class vim.fn.winlayout.leaf +--- @field [1] "leaf" Node type +--- @field [2] integer winid + +--- @class vim.fn.winlayout.branch +--- @field [1] "row" | "col" Node type +--- @field [2] (vim.fn.winlayout.leaf|vim.fn.winlayout.branch)[] children + +--- @class vim.fn.winlayout.empty + +--- @alias vim.fn.winlayout.ret +--- | vim.fn.winlayout.leaf +--- | vim.fn.winlayout.branch +--- | vim.fn.winlayout.empty diff --git a/runtime/lua/vim/_meta/vimfn.lua b/runtime/lua/vim/_meta/vimfn.lua index a69dd3d9b0..fc802f36e8 100644 --- a/runtime/lua/vim/_meta/vimfn.lua +++ b/runtime/lua/vim/_meta/vimfn.lua @@ -10929,7 +10929,7 @@ function vim.fn.winheight(nr) end --- < --- --- @param tabnr? integer ---- @return any[] +--- @return vim.fn.winlayout.ret function vim.fn.winlayout(tabnr) end --- The result is a Number, which is the screen line of the cursor diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index f042d9210c..866711c2b1 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -13239,7 +13239,7 @@ M.funcs = { ]=], name = 'winlayout', params = { { 'tabnr', 'integer' } }, - returns = 'any[]', + returns = 'vim.fn.winlayout.ret', signature = 'winlayout([{tabnr}])', }, winline = {