]> granicus.if.org Git - vim/commitdiff
patch 9.0.0837: append() reports failure when not appending anything v9.0.0837
authorBram Moolenaar <Bram@vim.org>
Sat, 5 Nov 2022 23:46:43 +0000 (23:46 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 5 Nov 2022 23:46:43 +0000 (23:46 +0000)
Problem:    append() reports failure when not appending anything.
Solution:   Only report failure when appending something. (closes #11498)

runtime/doc/builtin.txt
src/evalbuffer.c
src/testdir/test_bufline.vim
src/testdir/test_functions.vim
src/testdir/test_vim9_builtin.vim
src/version.c

index 98fd13840f634e413aece8e9e810b7d5fb68eeb5..1ee2dcbb08e87749491db0a96408a429ad3f0270 100644 (file)
@@ -806,8 +806,10 @@ append({lnum}, {text})                                     *append()*
                {lnum} can be zero to insert a line before the first one.
                {lnum} is used like with |getline()|.
                Returns 1 for failure ({lnum} out of range or out of memory),
-               0 for success.  In |Vim9| script an invalid argument or
-               negative number results in an error.  Example: >
+               0 for success.  When {text} is an empty list zero is returned,
+               no matter the value of {lnum}.
+               In |Vim9| script an invalid argument or negative number
+               results in an error.  Example: >
                        :let failed = append(line('$'), "# THE END")
                        :let failed = append(0, ["Chapter 1", "the beginning"])
 
@@ -835,7 +837,9 @@ appendbufline({buf}, {lnum}, {text})                        *appendbufline()*
                If {buf} is not a valid buffer or {lnum} is not valid, an
                error message is given. Example: >
                        :let failed = appendbufline(13, 0, "# THE START")
-<
+<              However, when {text} is an empty list then no error is given
+               for an invalid {lnum}, since {lnum} isn't actually used.
+
                Can also be used as a |method| after a List, the base is
                passed as the second argument: >
                        mylist->appendbufline(buf, lnum)
@@ -981,7 +985,7 @@ autocmd_add({acmds})                                        *autocmd_add()*
                        let acmd.bufnr = 5
                        let acmd.cmd = 'call BufEnterFunc()'
                        call autocmd_add([acmd])
-
+<
                Can also be used as a |method|: >
                        GetAutocmdList()->autocmd_add()
 <
@@ -7873,9 +7877,10 @@ setbufline({buf}, {lnum}, {text})                        *setbufline()*
                To insert lines use |appendbufline()|.
                Any text properties in {lnum} are cleared.
 
-               {text} can be a string to set one line, or a list of strings
-               to set multiple lines.  If the list extends below the last
-               line then those lines are added.
+               {text} can be a string to set one line, or a List of strings
+               to set multiple lines.  If the List extends below the last
+               line then those lines are added.  If the List is empty then
+               nothing is changed and zero is returned.
 
                For the use of {buf}, see |bufname()| above.
 
@@ -8060,7 +8065,8 @@ setline({lnum}, {text})                                   *setline()*
                When {lnum} is just below the last line the {text} will be
                added below the last line.
                {text} can be any type or a List of any type, each item is
-               converted to a String.
+               converted to a String.  When {text} is an empty List then
+               nothing is changed and FALSE is returned.
 
                If this succeeds, FALSE is returned.  If this fails (most likely
                because {lnum} is invalid) TRUE is returned.
index e77435b8f407dc1616422c71cf649676e3ca16bd..9ce1d41aeb3a8f5a1241ecbb056fb87aee73d8e8 100644 (file)
@@ -175,9 +175,7 @@ set_buffer_lines(
        l = lines->vval.v_list;
        if (l == NULL || list_len(l) == 0)
        {
-           // set proper return code
-           if (lnum > curbuf->b_ml.ml_line_count)
-               rettv->vval.v_number = 1;       // FAIL
+           // not appending anything always succeeds
            goto done;
        }
        CHECK_LIST_MATERIALIZE(l);
index c592877e81753fba4e8ef3a1d9d88a40aef2d72d..13e891bcf15327ccb046ccec092f9a43d67ef2df 100644 (file)
@@ -23,8 +23,8 @@ func Test_setbufline_getbufline()
 
   call assert_equal(1, setbufline(b, 5, 'x'))
   call assert_equal(1, setbufline(b, 5, ['x']))
-  call assert_equal(1, setbufline(b, 5, []))
-  call assert_equal(1, setbufline(b, 5, test_null_list()))
+  call assert_equal(0, setbufline(b, 5, []))
+  call assert_equal(0, setbufline(b, 5, test_null_list()))
 
   call assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
   call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
@@ -86,6 +86,11 @@ func Test_setline_startup()
   sleep 50m
   call assert_equal(['Hello'], readfile('Xtest'))
 
+  call assert_equal(0, setline(1, []))
+  call assert_equal(0, setline(1, test_null_list()))
+  call assert_equal(0, setline(5, []))
+  call assert_equal(0, setline(6, test_null_list()))
+
   call delete('Xtest')
 endfunc
 
@@ -112,8 +117,8 @@ func Test_appendbufline()
 
   call assert_equal(1, appendbufline(b, 4, 'x'))
   call assert_equal(1, appendbufline(b, 4, ['x']))
-  call assert_equal(1, appendbufline(b, 4, []))
-  call assert_equal(1, appendbufline(b, 4, test_null_list()))
+  call assert_equal(0, appendbufline(b, 4, []))
+  call assert_equal(0, appendbufline(b, 4, test_null_list()))
 
   call assert_equal(1, appendbufline(1234, 1, 'x'))
   call assert_equal(1, appendbufline(1234, 1, ['x']))
@@ -122,8 +127,8 @@ func Test_appendbufline()
 
   call assert_equal(0, appendbufline(b, 1, []))
   call assert_equal(0, appendbufline(b, 1, test_null_list()))
-  call assert_equal(1, appendbufline(b, 3, []))
-  call assert_equal(1, appendbufline(b, 3, test_null_list()))
+  call assert_equal(0, appendbufline(b, 3, []))
+  call assert_equal(0, appendbufline(b, 3, test_null_list()))
 
   call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
 
index 831a8946f6699b9ee44cbd88a895a65b27e91b68..131db109e3da703760afab9142b65df970bcf37a 100644 (file)
@@ -939,9 +939,13 @@ endfunc
 func Test_append()
   enew!
   split
-  call append(0, ["foo"])
-  call append(1, [])
-  call append(1, test_null_list())
+  call assert_equal(0, append(1, []))
+  call assert_equal(0, append(1, test_null_list()))
+  call assert_equal(0, append(0, ["foo"]))
+  call assert_equal(0, append(1, []))
+  call assert_equal(0, append(1, test_null_list()))
+  call assert_equal(0, append(8, []))
+  call assert_equal(0, append(9, test_null_list()))
   call assert_equal(['foo', ''], getline(1, '$'))
   split
   only
index e9ec43930e2a4e9848c7c4318af1b936bb281cb7..10ae2eeb03824ac2b96d6c2b5aec3b1914d0eeb7 100644 (file)
@@ -3721,8 +3721,8 @@ def Test_set_get_bufline()
 
       assert_equal(1, setbufline(b, 5, 'x'))
       assert_equal(1, setbufline(b, 5, ['x']))
-      assert_equal(1, setbufline(b, 5, []))
-      assert_equal(1, setbufline(b, 5, test_null_list()))
+      assert_equal(0, setbufline(b, 5, []))
+      assert_equal(0, setbufline(b, 5, test_null_list()))
 
       assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
       assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
index 2694639507aa5325c1ec8eb495020718f8f51943..56ccb053a267667bd4937a8c2385337e5c10bea0 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    837,
 /**/
     836,
 /**/