diff options
| author | Justin M. Keyes <justinkz@gmail.com> | 2025-02-21 02:02:32 +0100 |
|---|---|---|
| committer | Justin M. Keyes <justinkz@gmail.com> | 2025-02-26 23:06:22 +0100 |
| commit | be1fbe38b31b6046d396407c4efbf238941c6b08 (patch) | |
| tree | 697a429f5ac903d766c2faaf5044fa7a16eeea77 /test/testutil.lua | |
| parent | f4921e2b7deb4812414998a521c33f920f571c20 (diff) | |
| download | rneovim-be1fbe38b31b6046d396407c4efbf238941c6b08.tar.gz rneovim-be1fbe38b31b6046d396407c4efbf238941c6b08.tar.bz2 rneovim-be1fbe38b31b6046d396407c4efbf238941c6b08.zip | |
feat(lua): vim.text.indent()
Problem:
Indenting text is a common task in plugins/scripts for
presentation/formatting, yet vim has no way of doing it (especially
"dedent", and especially non-buffer text).
Solution:
Introduce `vim.text.indent()`. It sets the *exact* indentation because
that's a more difficult (and thus more useful) task than merely
"increasing the current indent" (which is somewhat easy with a `gsub()`
one-liner).
Diffstat (limited to 'test/testutil.lua')
| -rw-r--r-- | test/testutil.lua | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/test/testutil.lua b/test/testutil.lua index e69dcae120..3655a87d93 100644 --- a/test/testutil.lua +++ b/test/testutil.lua @@ -148,6 +148,7 @@ end --- @param actual string --- @return boolean function M.matches(pat, actual) + assert(pat and pat ~= '', 'pat must be a non-empty string') if nil ~= string.match(actual, pat) then return true end @@ -641,28 +642,9 @@ end --- @param leave_indent? integer --- @return string function M.dedent(str, leave_indent) - -- find minimum common indent across lines - local indent --- @type string? - for line in str:gmatch('[^\n]+') do - local line_indent = line:match('^%s+') or '' - if indent == nil or #line_indent < #indent then - indent = line_indent - end - end - - if not indent or #indent == 0 then - -- no minimum common indent - return str - end - - local left_indent = (' '):rep(leave_indent or 0) - -- create a pattern for the indent - indent = indent:gsub('%s', '[ \t]') - -- strip it from the first line - str = str:gsub('^' .. indent, left_indent) - -- strip it from the remaining lines - str = str:gsub('[\n]' .. indent, '\n' .. left_indent) - return str + -- Last blank line often has non-matching indent, so remove it. + str = str:gsub('\n[ ]+$', '\n') + return (vim.text.indent(leave_indent or 0, str)) end function M.intchar2lua(ch) |