diff options
-rw-r--r-- | runtime/doc/fold.txt | 7 | ||||
-rw-r--r-- | src/optionstr.c | 5 | ||||
-rw-r--r-- | src/strings.c | 2 | ||||
-rw-r--r-- | src/testdir/test_blob.vim | 14 | ||||
-rw-r--r-- | src/testdir/test_expr.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_filter_map.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_fold.vim | 31 | ||||
-rw-r--r-- | src/testdir/test_listdict.vim | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
9 files changed, 60 insertions, 4 deletions
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt index 56c3c75c3..cac76bad9 100644 --- a/runtime/doc/fold.txt +++ b/runtime/doc/fold.txt @@ -122,7 +122,7 @@ Try to avoid the "=", "a" and "s" return values, since Vim often has to search backwards for a line for which the fold level is defined. This can be slow. If the 'foldexpr' expression starts with s: or |<SID>|, then it is replaced -with the script ID (|local-function|). Example: > +with the script ID (|local-function|). Examples: > set foldexpr=s:MyFoldExpr() set foldexpr=<SID>SomeFoldExpr() < @@ -529,6 +529,11 @@ The resulting line is truncated to fit in the window, it never wraps. When there is room after the text, it is filled with the character specified by 'fillchars'. +If the 'foldtext' expression starts with s: or |<SID>|, then it is replaced +with the script ID (|local-function|). Examples: > + set foldtext=s:MyFoldText() + set foldtext=<SID>SomeFoldText() +< Note that backslashes need to be used for characters that the ":set" command handles differently: Space, backslash and double-quote. |option-backslash| diff --git a/src/optionstr.c b/src/optionstr.c index c69354ece..ae584d02b 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -2310,6 +2310,7 @@ ambw_end: # endif # ifdef FEAT_FOLDING varp == &curwin->w_p_fde || + varp == &curwin->w_p_fdt || # endif gvarp == &p_fex || # ifdef FEAT_FIND_ID @@ -2341,8 +2342,10 @@ ambw_end: p_opt = &p_dex; # endif # ifdef FEAT_FOLDING - if(varp == &curwin->w_p_fde) // 'foldexpr' + if (varp == &curwin->w_p_fde) // 'foldexpr' p_opt = &curwin->w_p_fde; + if (varp == &curwin->w_p_fdt) // 'foldtext' + p_opt = &curwin->w_p_fdt; # endif if (gvarp == &p_fex) // 'formatexpr' p_opt = &curbuf->b_p_fex; diff --git a/src/strings.c b/src/strings.c index 6a6b0f43c..3dd685695 100644 --- a/src/strings.c +++ b/src/strings.c @@ -905,8 +905,6 @@ string_filter_map( set_vim_var_nr(VV_KEY, idx); if (filter_map_one(&tv, expr, filtermap, &newtv, &rem) == FAIL || did_emsg) - break; - if (did_emsg) { clear_tv(&newtv); clear_tv(&tv); diff --git a/src/testdir/test_blob.vim b/src/testdir/test_blob.vim index 3ce95756f..69c86963c 100644 --- a/src/testdir/test_blob.vim +++ b/src/testdir/test_blob.vim @@ -37,6 +37,7 @@ func Test_blob_create() call assert_fails('VAR b = 0z001122.') call assert_fails('call get("", 1)', 'E896:') call assert_equal(0, len(test_null_blob())) + call assert_equal(0z, copy(test_null_blob())) END call CheckLegacyAndVim9Success(lines) endfunc @@ -369,6 +370,14 @@ func Test_blob_add() add(test_null_blob(), 0x22) END call CheckDefExecAndScriptFailure(lines, 'E1131:') + + let lines =<< trim END + let b = 0zDEADBEEF + lockvar b + call add(b, 0) + unlockvar b + END + call CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_empty() @@ -445,6 +454,9 @@ func Test_blob_func_remove() remove(b, 0) END call CheckScriptFailure(lines, 'E741:') + + call assert_fails('echo remove(0z1020, [])', 'E745:') + call assert_fails('echo remove(0z1020, 0, [])', 'E745:') endfunc func Test_blob_read_write() @@ -474,6 +486,7 @@ func Test_blob_filter() call assert_equal(0zADEF, filter(0zDEADBEEF, 'v:key % 2')) END call CheckLegacyAndVim9Success(lines) + call assert_fails('echo filter(0z10, "a10")', 'E121:') endfunc " map() item in blob @@ -489,6 +502,7 @@ func Test_blob_map() call map(0z00, '[9]') END call CheckLegacyAndVim9Failure(lines, 'E978:') + call assert_fails('echo map(0z10, "a10")', 'E121:') endfunc func Test_blob_index() diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index ba2e2597a..8a65a8990 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -405,6 +405,7 @@ func Test_printf_misc() call assert_equal('[00000あiう]', printf('[%010.7S]', 'あiう')) call assert_equal('1%', printf('%d%%', 1)) + call assert_notequal('', printf('%p', "abc")) END call CheckLegacyAndVim9Success(lines) diff --git a/src/testdir/test_filter_map.vim b/src/testdir/test_filter_map.vim index 1767a9966..6cde45350 100644 --- a/src/testdir/test_filter_map.vim +++ b/src/testdir/test_filter_map.vim @@ -183,6 +183,7 @@ func Test_filter_map_string() call assert_equal('', map('', "v:val == 'a'")) call assert_equal('', map(test_null_string(), "v:val == 'a'")) call assert_fails('echo map("abc", "10")', 'E928:') + call assert_fails('echo map("abc", "a10")', 'E121:') END call CheckLegacyAndVim9Success(lines) diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim index d35b7c807..e3b6b6e58 100644 --- a/src/testdir/test_fold.vim +++ b/src/testdir/test_fold.vim @@ -1408,4 +1408,35 @@ func Test_foldexpr_scriptlocal_func() bw! endfunc +" Test for using a script-local function for 'foldtext' +func Test_foldtext_scriptlocal_func() + func! s:FoldText() + let g:FoldTextArgs = [v:foldstart, v:foldend] + return foldtext() + endfunc + new | only + call setline(1, range(50)) + let g:FoldTextArgs = [] + set foldmethod=manual + set foldtext=s:FoldText() + norm! 4Gzf4j + redraw! + call assert_equal(expand('<SID>') .. 'FoldText()', &foldtext) + call assert_equal([4, 8], g:FoldTextArgs) + set foldtext& + bw! + new | only + call setline(1, range(50)) + let g:FoldTextArgs = [] + set foldmethod=manual + set foldtext=<SID>FoldText() + norm! 8Gzf4j + redraw! + call assert_equal(expand('<SID>') .. 'FoldText()', &foldtext) + call assert_equal([8, 12], g:FoldTextArgs) + set foldtext& + bw! + delfunc s:FoldText +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim index e7b658878..fbb917b9b 100644 --- a/src/testdir/test_listdict.vim +++ b/src/testdir/test_listdict.vim @@ -1163,6 +1163,7 @@ func Test_listdict_extend() let d = {'a': 'A', 'b': 'B'} call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'error')", 'E737:') + call assert_fails("call extend(d, {'b': 0}, [])", 'E730:') call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'xxx')", 'E475:') if has('float') call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 1.2)", 'E475:') diff --git a/src/version.c b/src/version.c index 7b8b0a683..64086c3de 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3908, +/**/ 3907, /**/ 3906, |