spacevim/bundle/vim-lua/lua/luavi.lua
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

83 lines
2.8 KiB
Lua

luavi = {}
local complete = require('luavi.complete')
function luavi.complete(findstart, base)
complete.complete(findstart, base)
end
local function fold_iter(buf, fromline, toline)
assert(fromline == nil or type(fromline) == "number", "fromline must be a number if specified!")
buf = buf or vimutils.current_buffer()
toline = toline or #buf
assert(type(toline) == "number", "toline must be a number if specified!")
local lineidx = fromline and (fromline - 1) or 0
-- to remember consecutive folds
local foldlist = {}
-- closure blocks opening/closing statements
local patterns = {{"do", "end"},
{"repeat", "until%s+.+"},
{"if%s+.+%s+then", "end"},
{"for%s+.+%s+do", "end"},
{"function.+", "end"},
{"return%s+function.+", "end"},
{"local%s+function%s+.+", "end"},
}
return function()
lineidx = lineidx + 1
if lineidx <= toline then
-- search for one of blocks statements
for i, t in ipairs(patterns) do
-- add whole line anchors
local tagopen = '^%s*' .. t[1] .. '%s*$'
local tagclose = '^%s*' .. t[2] .. '%s*$'
-- try to find opening statement
if string.find(buf[lineidx], tagopen) then
-- just remember it
table.insert(foldlist, t)
elseif string.find(buf[lineidx], tagclose) then -- check for closing statement
-- Proceed only if there is unclosed block in foldlist and its
-- closing statement matches.
if #foldlist > 0 and string.find(buf[lineidx], foldlist[#foldlist][2]) then
table.remove(foldlist)
-- Add 1 to foldlist length (synonymous to fold level) to include
-- closing statement in the fold too.
return #foldlist + 1, lineidx, buf[lineidx]
else
-- An incorrect situation where opening/closing statements didn't
-- match (probably due to malformed formating or erroneous code).
-- Just "reset" foldlist.
foldlist = {}
end
end
end
-- #foldlist is fold level
return #foldlist, lineidx, buf[lineidx]
end
end
end
function luavi.fold(linenum)
assert(type(linenum) == "number", "linenum must be a number!")
-- by default don't make nested folds
local innerfolds = false
-- though a configuration variable can enable it
if vimutils.eval('exists("b:lua_inner_folds")') == 1 then
innerfolds = vimutils.eval('b:lua_inner_folds') == 1
elseif vimutils.eval('exists("g:lua_inner_folds")') == 1 then
innerfolds = vimutils.eval('g:lua_inner_folds') == 1
end
for lvl, lineidx in fold_iter() do
if lineidx == linenum then
vim.command("return " .. (innerfolds and lvl or (lvl > 1 and 1 or lvl)))
break
end
end
end
return luavi