u.nvim/lua/u/utils/string.lua
Jonathan Apodaca df595a4278
All checks were successful
NeoVim tests / plenary-tests (push) Successful in 10s
experimental: renderer
2025-02-19 23:15:14 -07:00

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