diff options
author | VanaIgr <vanaigranov@gmail.com> | 2024-02-11 14:17:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-12 04:17:15 +0800 |
commit | 3faedb0509545a01d84a37bdadf4a9150cc03d5c (patch) | |
tree | 13883c2bb5b86bcbde4da90ce629e9ec640657bc /src/nvim/change.c | |
parent | 46390635cd3adf6c6ac4f34914ae93777b8fc15a (diff) | |
download | rneovim-3faedb0509545a01d84a37bdadf4a9150cc03d5c.tar.gz rneovim-3faedb0509545a01d84a37bdadf4a9150cc03d5c.tar.bz2 rneovim-3faedb0509545a01d84a37bdadf4a9150cc03d5c.zip |
refactor(indent): refactor computing of a string's indent size (#27252)
The `get_indent_str_vtab()` function currently calls `tabstop_padding()`
every time a tab is encountered (unless tabstops aren't used).
`tabstop_padding()` either does a division by 'tabstop' If 'vartabstop'
is not set, or iterates through the 'vartabstop' list to find current
tab width.
Since the virtual column only increases, we can keep track of where the
next tabstop would be, and update this information once it was reached.
`get_indent_str_vtab()` also depends on 'listchars' "tab" value from the
current window, even though it may be called for a line from the same
buffer in a different window. In most cases, it is called with tabstops
enabled (last argument was `false`), so I split the function into one
that uses tabstops and the other that doesn't.
I removed `get_indent_str()` since I couldn't find any calls to it.
Diffstat (limited to 'src/nvim/change.c')
-rw-r--r-- | src/nvim/change.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/src/nvim/change.c b/src/nvim/change.c index e0b5822233..e01921a826 100644 --- a/src/nvim/change.c +++ b/src/nvim/change.c @@ -1149,9 +1149,7 @@ bool open_line(int dir, int flags, int second_line_indent, bool *did_do_comment) // indent to use for the new line. if (curbuf->b_p_ai || do_si) { // count white space on current line - newindent = get_indent_str_vtab(saved_line, - curbuf->b_p_ts, - curbuf->b_p_vts_array, false); + newindent = indent_size_ts(saved_line, curbuf->b_p_ts, curbuf->b_p_vts_array); if (newindent == 0 && !(flags & OPENLINE_COM_LIST)) { newindent = second_line_indent; // for ^^D command in insert mode } @@ -1593,9 +1591,7 @@ bool open_line(int dir, int flags, int second_line_indent, bool *did_do_comment) // Recompute the indent, it may have changed. if (curbuf->b_p_ai || do_si) { - newindent = get_indent_str_vtab(leader, - curbuf->b_p_ts, - curbuf->b_p_vts_array, false); + newindent = indent_size_ts(leader, curbuf->b_p_ts, curbuf->b_p_vts_array); } // Add the indent offset |