mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04:00
vim-patch:9.0.2041: trim(): hard to use default mask (#25692)
Problem: trim(): hard to use default mask (partly revert v9.0.2040) Solution: use default mask when it is empty The default 'mask' value is pretty complex, as it includes many characters. Yet, if one needs to specify the trimming direction, the third argument, 'trim()' currently requires the 'mask' value to be provided explicitly. Currently, an empty 'mask' will make 'trim()' call return 'text' value that is passed in unmodified. It is unlikely that someone is using it, so the chances of scripts being broken by this change are low. Also, this reverts commit 9.0.2040 (which uses v:none for the default and requires to use an empty string instead). closes: vim/vim#133588079917447
vim-patch:9.0.2040: trim(): hard to use default mask Problem: trim(): hard to use default mask Solution: Use default 'mask' when it is v:none The default 'mask' value is pretty complex, as it includes many characters. Yet, if one needs to specify the trimming direction, the third argument, 'trim()' currently requires the 'mask' value to be provided explicitly. 'v:none' is already used to mean "use the default argument value" in user defined functions. See |none-function_argument| in help. closes: vim/vim#133636e6386716f
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
This commit is contained in:
parent
3fd7449d5a
commit
bc5dfda441
9
runtime/doc/builtin.txt
generated
9
runtime/doc/builtin.txt
generated
@ -8291,15 +8291,18 @@ tr({src}, {fromstr}, {tostr}) *tr()*
|
||||
trim({text} [, {mask} [, {dir}]]) *trim()*
|
||||
Return {text} as a String where any character in {mask} is
|
||||
removed from the beginning and/or end of {text}.
|
||||
If {mask} is not given, {mask} is all characters up to 0x20,
|
||||
which includes Tab, space, NL and CR, plus the non-breaking
|
||||
space character 0xa0.
|
||||
|
||||
If {mask} is not given, or is an empty string, {mask} is all
|
||||
characters up to 0x20, which includes Tab, space, NL and CR,
|
||||
plus the non-breaking space character 0xa0.
|
||||
|
||||
The optional {dir} argument specifies where to remove the
|
||||
characters:
|
||||
0 remove from the beginning and end of {text}
|
||||
1 remove only at the beginning of {text}
|
||||
2 remove only at the end of {text}
|
||||
When omitted both ends are trimmed.
|
||||
|
||||
This function deals with multibyte characters properly.
|
||||
Returns an empty string on error.
|
||||
|
||||
|
9
runtime/lua/vim/_meta/vimfn.lua
generated
9
runtime/lua/vim/_meta/vimfn.lua
generated
@ -9845,15 +9845,18 @@ function vim.fn.tr(src, fromstr, tostr) end
|
||||
|
||||
--- Return {text} as a String where any character in {mask} is
|
||||
--- removed from the beginning and/or end of {text}.
|
||||
--- If {mask} is not given, {mask} is all characters up to 0x20,
|
||||
--- which includes Tab, space, NL and CR, plus the non-breaking
|
||||
--- space character 0xa0.
|
||||
---
|
||||
--- If {mask} is not given, or is an empty string, {mask} is all
|
||||
--- characters up to 0x20, which includes Tab, space, NL and CR,
|
||||
--- plus the non-breaking space character 0xa0.
|
||||
---
|
||||
--- The optional {dir} argument specifies where to remove the
|
||||
--- characters:
|
||||
--- 0 remove from the beginning and end of {text}
|
||||
--- 1 remove only at the beginning of {text}
|
||||
--- 2 remove only at the end of {text}
|
||||
--- When omitted both ends are trimmed.
|
||||
---
|
||||
--- This function deals with multibyte characters properly.
|
||||
--- Returns an empty string on error.
|
||||
---
|
||||
|
@ -11805,15 +11805,18 @@ M.funcs = {
|
||||
desc = [=[
|
||||
Return {text} as a String where any character in {mask} is
|
||||
removed from the beginning and/or end of {text}.
|
||||
If {mask} is not given, {mask} is all characters up to 0x20,
|
||||
which includes Tab, space, NL and CR, plus the non-breaking
|
||||
space character 0xa0.
|
||||
|
||||
If {mask} is not given, or is an empty string, {mask} is all
|
||||
characters up to 0x20, which includes Tab, space, NL and CR,
|
||||
plus the non-breaking space character 0xa0.
|
||||
|
||||
The optional {dir} argument specifies where to remove the
|
||||
characters:
|
||||
0 remove from the beginning and end of {text}
|
||||
1 remove only at the beginning of {text}
|
||||
2 remove only at the end of {text}
|
||||
When omitted both ends are trimmed.
|
||||
|
||||
This function deals with multibyte characters properly.
|
||||
Returns an empty string on error.
|
||||
|
||||
|
@ -2926,6 +2926,10 @@ void f_trim(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
|
||||
if (argvars[1].v_type == VAR_STRING) {
|
||||
mask = tv_get_string_buf_chk(&argvars[1], buf2);
|
||||
if (*mask == NUL) {
|
||||
mask = NULL;
|
||||
}
|
||||
|
||||
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||
bool error = false;
|
||||
// leading or trailing characters to trim
|
||||
|
@ -2099,6 +2099,10 @@ func Test_trim()
|
||||
let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
|
||||
call assert_equal("x", trim(chars . "x" . chars))
|
||||
|
||||
call assert_equal("x", trim(chars . "x" . chars, '', 0))
|
||||
call assert_equal("x" . chars, trim(chars . "x" . chars, '', 1))
|
||||
call assert_equal(chars . "x", trim(chars . "x" . chars, '', 2))
|
||||
|
||||
call assert_fails('let c=trim([])', 'E730:')
|
||||
endfunc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user