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 /src/gen/gen_help_html.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 'src/gen/gen_help_html.lua')
-rw-r--r-- | src/gen/gen_help_html.lua | 22 |
1 files changed, 3 insertions, 19 deletions
diff --git a/src/gen/gen_help_html.lua b/src/gen/gen_help_html.lua index 53a65fd65f..57210f6ac1 100644 --- a/src/gen/gen_help_html.lua +++ b/src/gen/gen_help_html.lua @@ -148,10 +148,6 @@ local function url_encode(s) ) end -local function expandtabs(s) - return s:gsub('\t', (' '):rep(8)) --[[ @as string ]] -end - local function to_titlecase(s) local text = '' for w in vim.gsplit(s, '[ \t]+') do @@ -275,25 +271,13 @@ end --- --- Blank lines (empty or whitespace-only) are ignored. local function get_indent(s) - local min_indent = nil - for line in vim.gsplit(s, '\n') do - if line and not is_blank(line) then - local ws = expandtabs(line:match('^%s+') or '') - min_indent = (not min_indent or ws:len() < min_indent) and ws:len() or min_indent - end - end - return min_indent or 0 + local _, indent = vim.text.indent(0, s, { expandtab = 8 }) + return indent end --- Removes the common indent level, after expanding tabs to 8 spaces. local function trim_indent(s) - local indent_size = get_indent(s) - local trimmed = '' - for line in vim.gsplit(s, '\n') do - line = expandtabs(line) - trimmed = ('%s%s\n'):format(trimmed, line:sub(indent_size + 1)) - end - return trimmed:sub(1, -2) + return vim.text.indent(0, s, { expandtab = 8 }) end --- Gets raw buffer text in the node's range (+/- an offset), as a newline-delimited string. |