All checks were successful
NeoVim tests / plenary-tests (push) Successful in 23s
30 lines
761 B
Lua
30 lines
761 B
Lua
local M = {}
|
|
|
|
--------------------------------------------------------------------------------
|
|
--- eat_while
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- @param s string
|
|
--- @param pos number
|
|
--- @param predicate fun(c: string, i: number, s: string): boolean
|
|
function M.eat_while(s, pos, predicate)
|
|
local eaten = ''
|
|
local curr = pos
|
|
local watchdog = 0
|
|
while curr <= #s do
|
|
watchdog = watchdog + 1
|
|
if watchdog > #s then error 'infinite loop' end
|
|
|
|
local c = s:sub(curr, curr)
|
|
if not predicate(c, curr, s) then break end
|
|
eaten = eaten .. c
|
|
curr = curr + 1
|
|
end
|
|
return eaten, curr
|
|
end
|
|
|
|
--- @param c string
|
|
function M.is_whitespace(c) return c == ' ' or c == '\t' or c == '\n' end
|
|
|
|
return M
|