changeset 31849:dbec60b8c253 v9.0.1257

patch 9.0.1257: code style is not check in test scripts Commit: https://github.com/vim/vim/commit/94722c510745a0cfd494c51625a514b92dd2bfb2 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 28 19:19:03 2023 +0000 patch 9.0.1257: code style is not check in test scripts Problem: Code style is not check in test scripts. Solution: Add basic code style check for test files.
author Bram Moolenaar <Bram@vim.org>
date Sat, 28 Jan 2023 20:30:04 +0100
parents b83cac410fcf
children 088d635bfa11
files src/testdir/keycode_check.vim src/testdir/runtest.vim src/testdir/setup.vim src/testdir/summarize.vim src/testdir/test_assert.vim src/testdir/test_autocmd.vim src/testdir/test_blob.vim src/testdir/test_blockedit.vim src/testdir/test_channel.vim src/testdir/test_cmd_lists.vim src/testdir/test_codestyle.vim src/testdir/test_diffmode.vim src/testdir/test_edit.vim src/testdir/test_expand.vim src/testdir/test_expand_dllpath.vim src/testdir/test_expand_func.vim src/testdir/test_fold.vim src/testdir/test_goto.vim src/testdir/test_increment.vim src/testdir/test_indent.vim src/testdir/test_ins_complete.vim src/testdir/test_listchars.vim src/testdir/test_map_functions.vim src/testdir/test_method.vim src/testdir/test_mswin_event.vim src/testdir/test_normal.vim src/testdir/test_popup.vim src/testdir/test_popupwin_textprop.vim src/testdir/test_quickfix.vim src/testdir/test_regexp_latin.vim src/testdir/test_scroll_opt.vim src/testdir/test_signals.vim src/testdir/test_signs.vim src/testdir/test_statusline.vim src/testdir/test_substitute.vim src/testdir/test_tagfunc.vim src/testdir/test_tagjump.vim src/testdir/test_termcodes.vim src/testdir/test_textprop.vim src/testdir/test_timers.vim src/testdir/test_true_false.vim src/testdir/test_utf8.vim src/testdir/test_vim9_assign.vim src/testdir/test_vim9_class.vim src/testdir/test_vim9_disassemble.vim src/testdir/test_vim9_expr.vim src/testdir/test_vim9_func.vim src/testdir/test_vim9_import.vim src/testdir/test_viminfo.vim src/testdir/test_virtualedit.vim src/testdir/test_visual.vim src/testdir/test_winbuf_close.vim src/testdir/test_xxd.vim src/testdir/unix.vim src/testdir/vim9.vim src/version.c
diffstat 56 files changed, 243 insertions(+), 204 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/keycode_check.vim
+++ b/src/testdir/keycode_check.vim
@@ -4,8 +4,8 @@ vim9script
 #
 # Usage:  vim -u NONE -S keycode_check.vim
 #
-# Author: 	Bram Moolenaar
-# Last Update: 	2022 Nov 15
+# Author:	Bram Moolenaar
+# Last Update:	2022 Nov 15
 #
 # The codes are stored in the file "keycode_check.json", so that you can
 # compare the results of various terminals.
@@ -449,7 +449,7 @@ enddef
 # The main loop
 while true
   var action = inputlist(['Select operation:',
-    			'1. List results',
+			'1. List results',
 			'2. Add results for a new terminal',
 			'3. Replace results',
 			'4. Clear results',
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -59,7 +59,7 @@ if has('gui_running')
 endif
 
 " Check that the screen size is at least 24 x 80 characters.
-if &lines < 24 || &columns < 80 
+if &lines < 24 || &columns < 80
   let error = 'Screen size too small! Tests require at least 24 lines with 80 characters, got ' .. &lines .. ' lines with ' .. &columns .. ' characters'
   echoerr error
   split test.log
--- a/src/testdir/setup.vim
+++ b/src/testdir/setup.vim
@@ -20,7 +20,7 @@ if has('packages')
   let &packpath = &rtp
 endif
 
-" Only when the +eval feature is present. 
+" Only when the +eval feature is present.
 if 1
   " Make sure the .Xauthority file can be found after changing $HOME.
   if $XAUTHORITY == ''
--- a/src/testdir/summarize.vim
+++ b/src/testdir/summarize.vim
@@ -33,7 +33,7 @@ if 1
     silent %s/^SKIPPED \zs.*/\=Count(submatch(0), 'skipped')/egn
     silent %s/^\(\d\+\)\s\+FAILED:/\=Count(submatch(1), 'failed')/egn
 
-    call extend(output, ["Skipped:"]) 
+    call extend(output, ["Skipped:"])
     call extend(output, skipped_output)
 
     call extend(output, [
--- a/src/testdir/test_assert.vim
+++ b/src/testdir/test_assert.vim
@@ -190,9 +190,9 @@ func Test_wrong_error_type()
 endfunc
 
 func Test_compare_fail()
-  let s:v = {}          
-  let s:x = {"a": s:v} 
-  let s:v["b"] = s:x   
+  let s:v = {}
+  let s:x = {"a": s:v}
+  let s:v["b"] = s:x
   let s:w = {"c": s:x, "d": ''}
   try
     call assert_equal(s:w, '')
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -269,8 +269,8 @@ func Test_win_tab_autocmd()
   augroup testing
     au WinNew * call add(g:record, 'WinNew')
     au WinClosed * call add(g:record, 'WinClosed')
-    au WinEnter * call add(g:record, 'WinEnter') 
-    au WinLeave * call add(g:record, 'WinLeave') 
+    au WinEnter * call add(g:record, 'WinEnter')
+    au WinLeave * call add(g:record, 'WinLeave')
     au TabNew * call add(g:record, 'TabNew')
     au TabClosed * call add(g:record, 'TabClosed')
     au TabEnter * call add(g:record, 'TabEnter')
@@ -3406,7 +3406,7 @@ endfunc
 
 func Test_Visual_doautoall_redraw()
   call setline(1, ['a', 'b'])
-  new 
+  new
   wincmd p
   call feedkeys("G\<C-V>", 'txn')
   autocmd User Explode ++once redraw
@@ -4121,7 +4121,7 @@ endfunc
 
 func Test_autocmd_split_dummy()
   " Autocommand trying to split a window containing a dummy buffer.
-  auto BufReadPre * exe "sbuf " .. expand("<abuf>") 
+  auto BufReadPre * exe "sbuf " .. expand("<abuf>")
   " Avoid the "W11" prompt
   au FileChangedShell * let v:fcs_choice = 'reload'
   func Xautocmd_changelist()
--- a/src/testdir/test_blob.vim
+++ b/src/testdir/test_blob.vim
@@ -498,7 +498,7 @@ func Test_blob_read_write()
       call assert_equal(b[-3 :], br5)
       VAR br6 = readblob('Xblob', -3, 2)
       call assert_equal(b[-3 : -2], br6)
-      
+
       #" reading past end of file, empty result
       VAR br1e = readblob('Xblob', 10000)
       call assert_equal(0z, br1e)
--- a/src/testdir/test_blockedit.vim
+++ b/src/testdir/test_blockedit.vim
@@ -52,7 +52,7 @@ func Test_blockinsert_autoindent()
   let expected =<< trim END
       vim9script
       var d = {
-      	a: (): asdf => 0,
+	a: (): asdf => 0,
       b: (): asdf => 0,
       c: (): asdf => 0,
       }
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -20,7 +20,7 @@ endif
 " call ch_logfile('channellog', 'w')
 
 func SetUp()
-  if g:testfunc =~ '_ipv6()$' 
+  if g:testfunc =~ '_ipv6()$'
     let s:localhost = '[::1]:'
     let s:testscript = 'test_channel_6.py'
   elseif g:testfunc =~ '_unix()$'
@@ -1220,7 +1220,7 @@ endfunc
 func Test_pipe_to_buffer_raw()
   let options = {'out_mode': 'raw', 'out_io': 'buffer', 'out_name': 'testout'}
   split testout
-  let job = job_start([s:python, '-c', 
+  let job = job_start([s:python, '-c',
         \ 'import sys; [sys.stdout.write(".") and sys.stdout.flush() for _ in range(10000)]'], options)
   " the job may be done quickly, also accept "dead"
   call assert_match('^\%(dead\|run\)$', job_status(job))
--- a/src/testdir/test_cmd_lists.vim
+++ b/src/testdir/test_cmd_lists.vim
@@ -50,7 +50,7 @@ func Test_cmd_lists()
           \ 'interface',
           \ 'public',
           \ 'static',
-          \ 'this', 
+          \ 'this',
           \ 'type',
           \ '++',
           \ '--',
--- a/src/testdir/test_codestyle.vim
+++ b/src/testdir/test_codestyle.vim
@@ -41,5 +41,42 @@ def Test_source_files()
   bwipe!
 enddef
 
+def Test_test_files()
+  for fname in glob('*.vim', 0, 1)
+    exe 'edit ' .. fname
+
+    # some files intentionally have misplaced white space
+    if fname =~ 'test_cindent.vim' || fname =~ 'test_join.vim'
+      continue
+    endif
+
+    # skip files that are known to have a space before a tab
+    if fname !~ 'test_comments.vim'
+        && fname !~ 'test_listchars.vim'
+        && fname !~ 'test_visual.vim'
+      cursor(1, 1)
+      var lnum = search(fname =~ "test_regexp_latin" ? '[^á] \t' : ' \t')
+      assert_equal(0, lnum, 'testdir/' .. fname .. ': space before tab')
+    endif
+
+    # skip files that are known to have trailing white space
+    if fname !~ 'test_cmdline.vim'
+            && fname !~ 'test_let.vim'
+            && fname !~ 'test_tagjump.vim'
+            && fname !~ 'test_vim9_cmd.vim'
+      cursor(1, 1)
+      var lnum = search(
+          fname =~ 'test_vim9_assign.vim' ? '[^=]\s$'
+          : fname =~ 'test_vim9_class.vim' ? '[^)]\s$'
+          : fname =~ 'test_vim9_script.vim' ? '[^,:3]\s$'
+          : fname =~ 'test_visual.vim' ? '[^/]\s$'
+          : '[^\\]\s$')
+      assert_equal(0, lnum, 'testdir/' .. fname .. ': trailing white space')
+    endif
+  endfor
+
+  bwipe!
+enddef
+
 
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -360,7 +360,7 @@ func Test_dp_do_buffer()
   call assert_equal('10', getline('.'))
   21
   call assert_equal('two', getline('.'))
-  diffget one 
+  diffget one
   call assert_equal('20', getline('.'))
 
   31
@@ -1113,7 +1113,7 @@ func Test_diff_with_syntax()
   CheckScreendump
 
   let lines =<< trim END
-  	void doNothing() {
+	void doNothing() {
 	   int x = 0;
 	   char *s = "hello";
 	   return 5;
@@ -1121,7 +1121,7 @@ func Test_diff_with_syntax()
   END
   call writefile(lines, 'Xprogram1.c', 'D')
   let lines =<< trim END
-  	void doSomething() {
+	void doSomething() {
 	   int x = 0;
 	   char *s = "there";
 	   return 5;
@@ -1130,7 +1130,7 @@ func Test_diff_with_syntax()
   call writefile(lines, 'Xprogram2.c', 'D')
 
   let lines =<< trim END
-  	edit Xprogram1.c
+	edit Xprogram1.c
 	diffsplit Xprogram2.c
   END
   call writefile(lines, 'Xtest_diff_syntax', 'D')
@@ -1307,12 +1307,12 @@ endfunc
 func Test_diff_and_scroll()
   " this was causing an ml_get error
   set ls=2
-  for i in range(winheight(0) * 2) 
-    call setline(i, i < winheight(0) - 10 ? i : i + 10) 
+  for i in range(winheight(0) * 2)
+    call setline(i, i < winheight(0) - 10 ? i : i + 10)
   endfor
   vnew
-  for i in range(winheight(0)*2 + 10) 
-    call setline(i, i < winheight(0) - 10 ? 0 : i) 
+  for i in range(winheight(0)*2 + 10)
+    call setline(i, i < winheight(0) - 10 ? 0 : i)
   endfor
   diffthis
   wincmd p
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -2072,7 +2072,7 @@ func Test_edit_overlong_file_name()
   file %%%%%%%%%%%%%%%%%%%%%%%%%%
   file %%%%%%
   set readonly
-  set ls=2 
+  set ls=2
 
   redraw!
   set noreadonly ls&
--- a/src/testdir/test_expand.vim
+++ b/src/testdir/test_expand.vim
@@ -45,9 +45,9 @@ endfunc
 
 func Test_expand_tilde_filename()
   split ~
-  call assert_equal('~', expand('%')) 
+  call assert_equal('~', expand('%'))
   call assert_notequal(expand('%:p'), expand('~/'))
-  call assert_match('\~', expand('%:p')) 
+  call assert_match('\~', expand('%:p'))
   bwipe!
 endfunc
 
--- a/src/testdir/test_expand_dllpath.vim
+++ b/src/testdir/test_expand_dllpath.vim
@@ -4,12 +4,12 @@ func s:test_expand_dllpath(optname)
   let $TEST_EXPAND_DLLPATH = '/dllpath/lib' . substitute(a:optname, '\zedll$', '.', '')
   execute 'let dllpath_save = &' . a:optname
   try
-    execute 'set ' . a:optname . '=$TEST_EXPAND_DLLPATH' 
-    execute 'call assert_equal("' . $TEST_EXPAND_DLLPATH . '", &' . a:optname . ')' 
+    execute 'set ' . a:optname . '=$TEST_EXPAND_DLLPATH'
+    execute 'call assert_equal("' . $TEST_EXPAND_DLLPATH . '", &' . a:optname . ')'
 
     execute 'set ' . a:optname . '=~' . $TEST_EXPAND_DLLPATH
     let home = substitute($HOME, '\\', '/', 'g')
-    execute 'call assert_equal("' . home . $TEST_EXPAND_DLLPATH . '", &' . a:optname . ')' 
+    execute 'call assert_equal("' . home . $TEST_EXPAND_DLLPATH . '", &' . a:optname . ')'
   finally
     execute 'let &' . a:optname . ' = dllpath_save'
     let $TEST_EXPAND_DLLPATH = ''
--- a/src/testdir/test_expand_func.vim
+++ b/src/testdir/test_expand_func.vim
@@ -7,15 +7,15 @@ let s:slnum = str2nr(expand('<slnum>'))
 let s:sflnum = str2nr(expand('<sflnum>'))
 
 func s:expand_sfile()
-  return expand('<sfile>')  
+  return expand('<sfile>')
 endfunc
 
 func s:expand_slnum()
-  return str2nr(expand('<slnum>'))  
+  return str2nr(expand('<slnum>'))
 endfunc
 
 func s:expand_sflnum()
-  return str2nr(expand('<sflnum>'))  
+  return str2nr(expand('<sflnum>'))
 endfunc
 
 " This test depends on the location in the test file, put it first.
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -456,7 +456,7 @@ func Test_move_folds_around_manual()
   %foldopen!
   13m7
   call Check_foldlevels([1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 2, 1, 0])
-  
+
   bw!
 endfunc
 
@@ -705,7 +705,7 @@ func Test_fold_create_marker_in_C()
   let content =<< trim [CODE]
     /*
      * comment
-     * 
+     *
      *
      */
     int f(int* p) {
--- a/src/testdir/test_goto.vim
+++ b/src/testdir/test_goto.vim
@@ -17,7 +17,7 @@ endfunc
 func Test_gD()
   let lines =<< trim [CODE]
     int x;
-  
+
     int func(void)
     {
       return x;
@@ -30,7 +30,7 @@ endfunc
 func Test_gD_too()
   let lines =<< trim [CODE]
     Filename x;
-  
+
     int Filename
     int func() {
       Filename x;
@@ -44,7 +44,7 @@ func Test_gD_comment()
   let lines =<< trim [CODE]
     /* int x; */
     int x;
-  
+
     int func(void)
     {
       return x;
@@ -58,7 +58,7 @@ func Test_gD_inline_comment()
   let lines =<< trim [CODE]
     int y /* , x */;
     int x;
-  
+
     int func(void)
     {
       return x;
@@ -72,7 +72,7 @@ func Test_gD_string()
   let lines =<< trim [CODE]
     char *s[] = "x";
     int x = 1;
-  
+
     int func(void)
     {
       return x;
@@ -85,7 +85,7 @@ endfunc
 func Test_gD_string_same_line()
   let lines =<< trim [CODE]
     char *s[] = "x", int x = 1;
-  
+
     int func(void)
     {
       return x;
@@ -99,7 +99,7 @@ func Test_gD_char()
   let lines =<< trim [CODE]
     char c = 'x';
     int x = 1;
-  
+
     int func(void)
     {
       return x;
@@ -112,7 +112,7 @@ endfunc
 func Test_gd()
   let lines =<< trim [CODE]
     int x;
-  
+
     int func(int x)
     {
       return x;
@@ -146,7 +146,7 @@ func Test_gd_not_local()
     {
       return x;
     }
-  
+
     int func2(int x)
     {
       return x;
@@ -173,9 +173,9 @@ func Test_gd_missing_braces()
     def func1(a)
       a + 1
     end
-  
+
     a = 1
-  
+
     def func2()
       return a
     end
@@ -252,11 +252,11 @@ func Test_gd_inline_comment_body()
     int func(void)
     {
       int y /* , x */;
-  
+
       for (/* int x = 0 */; y < 2; y++);
-  
+
       int x = 0;
-  
+
       return x;
     }
   [CODE]
@@ -292,7 +292,7 @@ func Test_gd_string()
     {
       char *s = "x";
       int x = 1;
-  
+
       return x;
     }
   [CODE]
@@ -304,7 +304,7 @@ func Test_gd_string_only()
     int func(void)
     {
       char *s = "x";
-  
+
       return x;
     }
   [CODE]
@@ -341,7 +341,7 @@ func Test_gd_local_block()
         char *b = "NULL";
         return b;
       }
-  
+
       return 0;
     }
   [CODE]
--- a/src/testdir/test_increment.vim
+++ b/src/testdir/test_increment.vim
@@ -704,7 +704,7 @@ endfunc
 " Text:
 "   1 23
 "   4 56
-" 
+"
 " Expected:
 "   1) f2 Ctrl-V jl <ctrl-a>, repeat twice afterwards with .
 "   1 26
--- a/src/testdir/test_indent.vim
+++ b/src/testdir/test_indent.vim
@@ -175,7 +175,7 @@ func Test_modeline_indent_expr()
 endfunc
 
 func Test_indent_func_with_gq()
-  
+
   function GetTeXIndent()
     " Sample indent expression for TeX files
     let lnum = prevnonblank(v:lnum - 1)
@@ -186,7 +186,7 @@ func Test_indent_func_with_gq()
     let line = getline(lnum)
     let ind = indent(lnum)
     " Add a 'shiftwidth' after beginning of environments.
-    if line =~ '\\begin{center}' 
+    if line =~ '\\begin{center}'
       let ind = ind + shiftwidth()
     endif
     return ind
@@ -248,7 +248,7 @@ func Test_indent_func_with_gq()
 
   bwipe!
   delmark ab
-  delfunction GetTeXIndent 
+  delfunction GetTeXIndent
 endfu
 
 func Test_formatting_keeps_first_line_indent()
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2149,7 +2149,7 @@ endfunc
 
 func Test_ins_complete_end_of_line()
   " this was reading past the end of the line
-  new  
+  new
   norm 8o€ý 
   sil! norm o
 
--- a/src/testdir/test_listchars.vim
+++ b/src/testdir/test_listchars.vim
@@ -506,7 +506,7 @@ func Test_listchars_composing()
   set list
 
   set listchars=eol:$,space:_,nbsp:=
-  
+
   let nbsp1 = nr2char(0xa0)
   let nbsp2 = nr2char(0x202f)
   call append(0, [
--- a/src/testdir/test_map_functions.vim
+++ b/src/testdir/test_map_functions.vim
@@ -1,7 +1,7 @@
 " Tests for maparg(), mapcheck(), mapset(), maplist()
 " Also test utf8 map with a 0x80 byte.
 
-func s:SID()     
+func s:SID()
   return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$'))
 endfunc
 
@@ -18,7 +18,7 @@ func Test_maparg()
   call assert_equal({'silent': 0, 'noremap': 0, 'script': 0, 'lhs': 'foo<C-V>',
         \ 'lhsraw': "foo\x80\xfc\x04V", 'lhsrawalt': "foo\x16",
         \ 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': sid, 'scriptversion': 1,
-        \ 'lnum': lnum + 1, 
+        \ 'lnum': lnum + 1,
 	\ 'rhs': 'is<F4>foo', 'buffer': 0, 'abbr': 0, 'mode_bits': 0x47},
 	\ maparg('foo<C-V>', '', 0, 1))
   call assert_equal({'silent': 1, 'noremap': 1, 'script': 1, 'lhs': 'bar',
--- a/src/testdir/test_method.vim
+++ b/src/testdir/test_method.vim
@@ -127,7 +127,7 @@ endfunc
 
 func Test_method_syntax()
   eval [1, 2, 3]  ->sort( )
-  eval [1, 2, 3]  
+  eval [1, 2, 3]
 	\ ->sort(
 	\ )
   eval [1, 2, 3]->sort()
--- a/src/testdir/test_mswin_event.vim
+++ b/src/testdir/test_mswin_event.vim
@@ -43,7 +43,7 @@ func SendKeyStr(keystring)
   endfor
 endfunc
 
-" This tells Vim to execute the buffered keys as user commands, 
+" This tells Vim to execute the buffered keys as user commands,
 " ie. same as feekdeys with mode X would do.
 func ExecuteBufferedKeys()
   if has('gui_running')
@@ -158,7 +158,7 @@ let s:VK = {
   let s:MOD_MASK_SHIFT = 0x02
   let s:MOD_MASK_CTRL  = 0x04
   let s:MOD_MASK_ALT   = 0x08
-  
+
   let s:vim_key_modifiers = [
     \ ["",       0,   []],
     \ ["S-",     2,   [s:VK.LSHIFT]],
@@ -431,7 +431,7 @@ func Test_mswin_event_character_keys()
 " Test for lowercase 'a' to 'z', VK codes 65(0x41) - 90(0x5A)
 " Note: VK_A-VK_Z virtual key codes coincide with uppercase ASCII codes A-Z.
 " eg VK_A is 65, and the ASCII character code for uppercase 'A' is also 65.
-" Caution: these are interpreted as lowercase when Shift is NOT pressed. 
+" Caution: these are interpreted as lowercase when Shift is NOT pressed.
 " eg, sending VK_A (65) 'A' Key code without shift modifier, will produce ASCII
 " char 'a' (91) as the output.  The ASCII codes for the lowercase letters are
 " numbered 32 higher than their uppercase versions.
@@ -808,7 +808,7 @@ func Test_mswin_event_mouse()
   call MouseShiftWheelDown(2, 1)
   call feedkeys("H", 'Lx!')
   " should scroll from where it is (4) + visible buffer height - cmdheight
-  let shift_scroll_height = line('w$') - line('w0') - &cmdheight 
+  let shift_scroll_height = line('w$') - line('w0') - &cmdheight
   call assert_equal(4 + shift_scroll_height, line('.'))
 
   " Shift Scroll Up
@@ -821,7 +821,7 @@ func Test_mswin_event_mouse()
     call MSWinMouseEvent(0x100, 2, 1, 0, 0, 0x04)
     call feedkeys("H", 'Lx!')
     " should scroll from where it is (4) + visible buffer height - cmdheight
-    let shift_scroll_height = line('w$') - line('w0') - &cmdheight 
+    let shift_scroll_height = line('w$') - line('w0') - &cmdheight
     call assert_equal(4 + shift_scroll_height, line('.'))
 
     " Shift Scroll Up (using MOD)
@@ -854,7 +854,7 @@ func Test_mswin_event_mouse()
   call feedkeys('g0', 'Lx!')
   " should scroll from where it is (7) + window width
   call assert_equal(7 + winwidth(0), col('.'))
- 
+
   " Shift Scroll Left
   call MouseShiftWheelLeft(1, 50)
   call feedkeys('g0', 'Lx!')
@@ -880,8 +880,8 @@ func Test_mswin_event_mouse()
           \ substitute(e, '[<>]', '', 'g') .. '")<CR>'
   endfor
 
-  " Test various mouse buttons 
-  "(0 - Left, 1 - Middle, 2 - Right, 
+  " Test various mouse buttons
+  "(0 - Left, 1 - Middle, 2 - Right,
   " 0x300 - MOUSE_X1/FROM_LEFT_3RD_BUTTON,
   " 0x400 - MOUSE_X2/FROM_LEFT_4TH_BUTTON)
   for button in [0, 1, 2, 0x300, 0x400]
@@ -971,10 +971,10 @@ func Test_mswin_event_error_handling()
   let args = #{button: 0, row: 2, col: 4, move: 0, multiclick: 0, modifiers: 0}
   call assert_fails("call test_mswin_event('a1b2c3', args)", 'E475:')
   call assert_fails("call test_mswin_event(test_null_string(), {})", 'E475:')
-  
+
   call assert_fails("call test_mswin_event([], args)", 'E1174:')
   call assert_fails("call test_mswin_event('abc', [])", 'E1206:')
-  
+
   call assert_false(test_mswin_event('mouse', test_null_dict()))
   let args = #{row: 2, col: 4, multiclick: 0, modifiers: 0}
   call assert_false(test_mswin_event('mouse', args))
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -2209,7 +2209,7 @@ func Test_normal29_brace()
     a character like this:
     .NH
     End of text here
-  
+
   [DATA]
   call assert_equal(expected, getline(1, '$'))
 
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -16,7 +16,7 @@ func ListMonths()
   if !empty(entered)
     let mth = filter(mth, 'v:val=~"^".entered')
   endif
-  call complete(1, mth) 
+  call complete(1, mth)
   return ''
 endfunc
 
@@ -74,7 +74,7 @@ func Test_popup_complete()
   call feedkeys("aJu\<f5>\<c-p>l\<c-y>", 'tx')
   call assert_equal(["Jul"], getline(1,2))
   %d
-  
+
   " any-non printable, non-white character: Add this character and
   " reduce number of matches
   call feedkeys("aJu\<f5>\<c-p>l\<c-n>\<c-y>", 'tx')
@@ -96,7 +96,7 @@ func Test_popup_complete()
   call feedkeys("aJ\<f5>".repeat("\<c-n>",3)."\<c-l>\<esc>", 'tx')
   call assert_equal(["J"], getline(1,2))
   %d
-  
+
   " <c-l> - Insert one character from the current match
   call feedkeys("aJ\<f5>".repeat("\<c-n>",4)."\<c-l>\<esc>", 'tx')
   call assert_equal(["January"], getline(1,2))
@@ -856,7 +856,7 @@ func Test_popup_position()
   call term_sendkeys(buf, "jI123456789_\<Esc>")
   call term_sendkeys(buf, "GA\<C-N>")
   call VerifyScreenDump(buf, 'Test_popup_position_04', {'rows': 10})
-  
+
   call term_sendkeys(buf, "\<Esc>u")
   call StopVimInTerminal(buf)
 endfunc
--- a/src/testdir/test_popupwin_textprop.vim
+++ b/src/testdir/test_popupwin_textprop.vim
@@ -21,7 +21,7 @@ func Test_textprop_popup()
 		\ bufnr: bufnr('%'),
 		\ })
 	let winid = popup_create('the text', #{
-	      \ pos: 'botleft', 
+	      \ pos: 'botleft',
 	      \ textprop: 'popupMarker',
 	      \ border: [],
 	      \ padding: [0,1,0,1],
@@ -67,25 +67,25 @@ func Test_textprop_popup_corners()
 		\ type: 'popupMarker',
 		\ })
 	let winid = popup_create('bottom left', #{
-	      \ pos: 'botleft', 
+	      \ pos: 'botleft',
 	      \ textprop: 'popupMarker',
 	      \ textpropwin: win_getid(),
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('bottom right', #{
-	      \ pos: 'botright', 
+	      \ pos: 'botright',
 	      \ textprop: 'popupMarker',
 	      \ border: [],
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('top left', #{
-	      \ pos: 'topleft', 
+	      \ pos: 'topleft',
 	      \ textprop: 'popupMarker',
 	      \ border: [],
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('top right', #{
-	      \ pos: 'topright', 
+	      \ pos: 'topright',
 	      \ textprop: 'popupMarker',
 	      \ padding: [0,1,0,1],
 	      \ })
@@ -127,14 +127,14 @@ func Test_textprop_popup_offsets()
 		\ type: 'popupMarker',
 		\ })
 	let winid = popup_create('bottom left', #{
-	      \ pos: 'botleft', 
+	      \ pos: 'botleft',
 	      \ line: -1,
 	      \ col: 2,
 	      \ textprop: 'popupMarker',
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('bottom right', #{
-	      \ pos: 'botright', 
+	      \ pos: 'botright',
 	      \ line: -1,
 	      \ col: -2,
 	      \ textprop: 'popupMarker',
@@ -142,7 +142,7 @@ func Test_textprop_popup_offsets()
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('top left', #{
-	      \ pos: 'topleft', 
+	      \ pos: 'topleft',
 	      \ line: 1,
 	      \ col: 2,
 	      \ textprop: 'popupMarker',
@@ -150,7 +150,7 @@ func Test_textprop_popup_offsets()
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('top right', #{
-	      \ pos: 'topright', 
+	      \ pos: 'topright',
 	      \ line: 1,
 	      \ col: -2,
 	      \ textprop: 'popupMarker',
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -1211,20 +1211,20 @@ func Test_efm1()
     "Xtestfile", linenr 16: yet another problem
     Error in "Xtestfile" at line 17:
     x should be a dot
-    	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
                 ^
     Error in "Xtestfile" at line 18:
     x should be a dot
-    	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
     .............^
     Error in "Xtestfile" at line 19:
     x should be a dot
-    	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
     --------------^
     Error in "Xtestfile" at line 20:
     x should be a dot
-    	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
-    	       ^
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
+	       ^
 
     Does anyone know what is the problem and how to correction it?
     "Xtestfile", line 21 col 9: What is the title of the quickfix window?
@@ -1570,7 +1570,7 @@ func Test_efm2()
      failUnlessEqual
         raise self.failureException, \\
     W:AssertionError: 34 != 33
-  
+
     --------------------------------------------------------------
     Ran 27 tests in 0.063s
   [DATA]
--- a/src/testdir/test_regexp_latin.vim
+++ b/src/testdir/test_regexp_latin.vim
@@ -1149,7 +1149,7 @@ def Test_compare_column_matchstr()
   # matchstr().
   enew
   setline(1, ['one', 'two', 'three'])
-  :3 
+  :3
   :/ee
   bwipe!
   set re=1
--- a/src/testdir/test_scroll_opt.vim
+++ b/src/testdir/test_scroll_opt.vim
@@ -271,18 +271,18 @@ func Test_smoothscroll_wrap_long_line()
   call term_sendkeys(buf, ":set scrolloff=1\<CR>")
   call term_sendkeys(buf, "10|\<C-E>")
   call VerifyScreenDump(buf, 'Test_smooth_long_6', {})
-  
+
   " 'scrolloff' set to 1, scrolling down, cursor moves screen line up
   call term_sendkeys(buf, "\<C-E>")
   call term_sendkeys(buf, "gjgj")
   call term_sendkeys(buf, "\<C-Y>")
   call VerifyScreenDump(buf, 'Test_smooth_long_7', {})
-  
+
   " 'scrolloff' set to 2, scrolling up, cursor moves screen line down
   call term_sendkeys(buf, ":set scrolloff=2\<CR>")
   call term_sendkeys(buf, "10|\<C-E>")
   call VerifyScreenDump(buf, 'Test_smooth_long_8', {})
-  
+
   " 'scrolloff' set to 2, scrolling down, cursor moves screen line up
   call term_sendkeys(buf, "\<C-E>")
   call term_sendkeys(buf, "gj")
@@ -320,7 +320,7 @@ func Test_smoothscroll_wrap_long_line()
   call term_sendkeys(buf, "3Gzt")
   call term_sendkeys(buf, "\<C-E>j")
   call VerifyScreenDump(buf, 'Test_smooth_long_15', {})
-  
+
   call StopVimInTerminal(buf)
 endfunc
 
@@ -335,7 +335,7 @@ func Test_smoothscroll_one_long_line()
   call writefile(lines, 'XSmoothOneLong', 'D')
   let buf = RunVimInTerminal('-S XSmoothOneLong', #{rows: 6, cols: 40})
   call VerifyScreenDump(buf, 'Test_smooth_one_long_1', {})
-  
+
   call term_sendkeys(buf, "\<C-E>")
   call VerifyScreenDump(buf, 'Test_smooth_one_long_2', {})
 
@@ -357,7 +357,7 @@ func Test_smoothscroll_long_line_showbre
   call writefile(lines, 'XSmoothLongShowbreak', 'D')
   let buf = RunVimInTerminal('-S XSmoothLongShowbreak', #{rows: 6, cols: 40})
   call VerifyScreenDump(buf, 'Test_smooth_long_showbreak_1', {})
-  
+
   call term_sendkeys(buf, "\<C-E>")
   call VerifyScreenDump(buf, 'Test_smooth_long_showbreak_2', {})
 
@@ -465,7 +465,7 @@ func Test_smoothscroll_cursor_scrolloff(
   call NewWindow(10, 20)
   setl smoothscroll wrap
   setl scrolloff=3
-  
+
   " 120 chars are 6 screen lines
   call setline(1, "abcdefghijklmnopqrstABCDEFGHIJKLMNOPQRSTabcdefghijklmnopqrstABCDEFGHIJKLMNOPQRSTabcdefghijklmnopqrstABCDEFGHIJKLMNOPQRST")
   call setline(2, "below")
--- a/src/testdir/test_signals.vim
+++ b/src/testdir/test_signals.vim
@@ -133,7 +133,7 @@ func Test_signal_TSTP()
   sleep 100m
 
   " We resume after the suspend.  Sleep a bit for the signal to take effect,
-  " also when running under valgrind. 
+  " also when running under valgrind.
   exe 'silent !kill -s CONT ' .. pid_vim
   call WaitForAssert({-> assert_true(filereadable('XautoOut2'))})
   sleep 10m
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -1775,10 +1775,10 @@ func Test_sign_cursor_position()
   let lines =<< trim END
 	call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
 	call cursor(2,1)
-   	sign define s1 texthl=Search text==>
-   	sign define s2 linehl=Pmenu
+	sign define s1 texthl=Search text==>
+	sign define s2 linehl=Pmenu
 	redraw
-   	sign place 10 line=2 name=s1
+	sign place 10 line=2 name=s1
   END
   call writefile(lines, 'XtestSigncolumn', 'D')
   let buf = RunVimInTerminal('-S XtestSigncolumn', {'rows': 6})
--- a/src/testdir/test_statusline.vim
+++ b/src/testdir/test_statusline.vim
@@ -413,7 +413,7 @@ func Test_statusline()
   " Test statusline works with 80+ items
   function! StatusLabel()
     redrawstatus
-    return '[label]'	
+    return '[label]'
   endfunc
   let statusline = '%{StatusLabel()}'
   for i in range(150)
--- a/src/testdir/test_substitute.vim
+++ b/src/testdir/test_substitute.vim
@@ -707,7 +707,7 @@ func Test_sub_highlight_zero_match()
 endfunc
 
 func Test_nocatch_sub_failure_handling()
-  " normal error results in all replacements 
+  " normal error results in all replacements
   func Foo()
     foobar
   endfunc
--- a/src/testdir/test_tagfunc.vim
+++ b/src/testdir/test_tagfunc.vim
@@ -93,7 +93,7 @@ func Test_tagfunc()
   delf NullTagFunc
 
   bwipe!
-  set tags& tfu& cpt& 
+  set tags& tfu& cpt&
   call delete('Xfile1')
 endfunc
 
--- a/src/testdir/test_tagjump.vim
+++ b/src/testdir/test_tagjump.vim
@@ -743,7 +743,7 @@ func Test_tag_guess()
   let code =<< trim [CODE]
 
     int FUNC1  (int x) { }
-    int 
+    int
     func2   (int y) { }
     int * func3 () { }
 
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -894,7 +894,7 @@ func Test_term_mouse_multiple_clicks_to_
   let save_term = &term
   let save_ttymouse = &ttymouse
   call test_override('no_query_mouse', 1)
-  
+
   " 'mousetime' must be sufficiently large, or else the test is flaky when
   " using a ssh connection with X forwarding; i.e. ssh -X (issue #7563).
   set mouse=a term=xterm mousetime=600
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -2745,7 +2745,7 @@ func Test_prop_with_text_below_after_emp
 
   let lines =<< trim END
       vim9script
-      
+
       setline(1, ['vim9script', '', 'three', ''])
 
       # Add text prop below empty line 2 with padding.
@@ -2768,13 +2768,13 @@ func Test_prop_with_text_below_after_emp
   END
   call writefile(lines, 'XscriptPropBelowAfterEmpty', 'D')
   let buf = RunVimInTerminal('-S XscriptPropBelowAfterEmpty', #{rows: 8, cols: 60})
-  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_1', {}) 
+  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_1', {})
 
   call term_sendkeys(buf, ":set number\<CR>")
-  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_2', {}) 
+  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_2', {})
 
   call term_sendkeys(buf, ":set nowrap\<CR>")
-  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_3', {}) 
+  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_3', {})
 
   call StopVimInTerminal(buf)
 endfunc
@@ -3310,7 +3310,7 @@ func Test_insert_text_start_incl()
       prop_type_add('propnotincl', {highlight: 'NonText', start_incl: false})
       prop_add(1, 15, {type: 'propnotincl', text: 'before '})
 
-      set cindent sw=4 
+      set cindent sw=4
       prop_type_add('argname', {highlight: 'DiffChange', start_incl: true})
       prop_add(3, 10, {type: 'argname', text: 'arg: '})
   END
@@ -3751,7 +3751,7 @@ func Test_text_prop_diff_mode()
 
   call StopVimInTerminal(buf)
 endfunc
- 
+
 func Test_error_when_using_negative_id()
   call prop_type_add('test1', #{highlight: 'ErrorMsg'})
   call prop_add(1, 1, #{type: 'test1', text: 'virtual'})
--- a/src/testdir/test_timers.vim
+++ b/src/testdir/test_timers.vim
@@ -393,7 +393,7 @@ endfunc
 " vgetc().
 func Test_nocatch_timer_garbage_collect()
   " FIXME: why does this fail only on MacOS M1?
-  try 
+  try
     CheckNotMacM1
   catch /Skipped/
     let g:skipped_reason = v:exception
--- a/src/testdir/test_true_false.vim
+++ b/src/testdir/test_true_false.vim
@@ -47,11 +47,11 @@ func Test_if()
 endfunc
 
 function Try_arg_true_false(expr, false_val, true_val)
-  for v in ['v:false', '0', '"0"', '"foo"', '" "'] 
+  for v in ['v:false', '0', '"0"', '"foo"', '" "']
     let r = eval(substitute(a:expr, '%v%', v, ''))
     call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . string(a:false_val) . ' but ' . string(r))
   endfor
-  for v in ['v:true', '1', '"1"', '"1foo"'] 
+  for v in ['v:true', '1', '"1"', '"1foo"']
     let r = eval(substitute(a:expr, '%v%', v, ''))
     call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . string(a:true_val) . ' but ' . string(r))
   endfor
@@ -115,11 +115,11 @@ func Test_true_false_arg()
 endfunc
 
 function Try_arg_non_zero(expr, false_val, true_val)
-  for v in ['v:false', '0', '[1]', '{2:3}', '3.4'] 
+  for v in ['v:false', '0', '[1]', '{2:3}', '3.4']
     let r = eval(substitute(a:expr, '%v%', v, ''))
     call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r)
   endfor
-  for v in ['v:true', '1', '" "', '"0"'] 
+  for v in ['v:true', '1', '" "', '"0"']
     let r = eval(substitute(a:expr, '%v%', v, ''))
     call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . a:true_val . ' but ' . r)
   endfor
@@ -135,14 +135,14 @@ func Test_non_zero_arg()
   call Try_arg_non_zero("shellescape('foo%', %v%)", "'foo%'", "'foo\\%'")
 
   " visualmode() needs to be called twice to check
-  for v in [v:false, 0, [1], {2:3}, 3.4] 
+  for v in [v:false, 0, [1], {2:3}, 3.4]
     normal vv
     let r = visualmode(v)
     call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
     let r = visualmode(v)
     call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r)
   endfor
-  for v in [v:true, 1, " ", "0"] 
+  for v in [v:true, 1, " ", "0"]
     normal vv
     let r = visualmode(v)
     call assert_equal('v', r, 'result for ' . v . ' is not "v" but ' . r)
--- a/src/testdir/test_utf8.vim
+++ b/src/testdir/test_utf8.vim
@@ -1,5 +1,5 @@
 " Tests for Unicode manipulations
- 
+
 source check.vim
 source view_util.vim
 source screendump.vim
@@ -107,7 +107,7 @@ func Test_list2str_str2list_latin1()
 
   let save_encoding = &encoding
   set encoding=latin1
-  
+
   let lres = str2list(s, 1)
   let sres = list2str(l, 1)
   call assert_equal([65, 66, 67], str2list("ABC"))
@@ -123,7 +123,7 @@ endfunc
 func Test_screenchar_utf8()
   new
 
-  " 1-cell, with composing characters 
+  " 1-cell, with composing characters
   call setline(1, ["ABC\u0308"])
   redraw
   call assert_equal([0x0041], screenchars(1, 1))
@@ -133,7 +133,7 @@ func Test_screenchar_utf8()
   call assert_equal("B", screenstring(1, 2))
   call assert_equal("C\u0308", screenstring(1, 3))
 
-  " 2-cells, with composing characters 
+  " 2-cells, with composing characters
   let text = "\u3042\u3044\u3046\u3099"
   call setline(1, text)
   redraw
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1833,7 +1833,7 @@ def Test_assign_lambda()
   v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(any): bool')
 
   lines =<< trim END
-      echo filter([1, 2, 3], (_, v: string) => v + 1) 
+      echo filter([1, 2, 3], (_, v: string) => v + 1)
   END
   v9.CheckDefAndScriptFailure(lines, 'E1051:')
 enddef
@@ -1935,7 +1935,7 @@ def Test_var_func_call()
       endif
       return 'this'
     endfunc
-    var val: string = GetValue() 
+    var val: string = GetValue()
     # env var is always a string
     var env = $TERM
   END
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -48,7 +48,7 @@ def Test_class_basic()
   lines =<< trim END
       vim9script
       class Something
-      endclass school's out 
+      endclass school's out
   END
   v9.CheckScriptFailure(lines, 'E488:')
 
@@ -623,7 +623,7 @@ def Test_class_member()
       TextPos.AddToCounter(3)
       assert_equal(3, TextPos.counter)
       assert_fails('echo TextPos.noSuchMember', 'E1338:')
-      
+
       def GetCounter(): number
         return TextPos.counter
       enddef
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -2085,7 +2085,7 @@ def Test_disassemble_return_bool()
         '8 COND2BOOL\_s*' ..
         '9 STORE $3\_s*' ..
         'return name\_s*' ..
-        '\d\+ LOAD $3\_s*' ..   
+        '\d\+ LOAD $3\_s*' ..
         '\d\+ RETURN',
         instr)
   assert_equal(true, InvertBool())
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -44,7 +44,7 @@ def Test_expr1_ternary()
       echo ['a'] + (1 ? ['b'] : ['c'] # comment
                 )
 
-      # with constant condition expression is not evaluated 
+      # with constant condition expression is not evaluated
       assert_equal('one', 1 ? 'one' : xxx)
 
       var Some: func = function('len')
@@ -74,7 +74,7 @@ def Test_expr1_ternary_vimscript()
   # check line continuation
   var lines =<< trim END
       var name = 1
-      		? 'yes'
+		? 'yes'
 		: 'no'
       assert_equal('yes', name)
   END
@@ -82,7 +82,7 @@ def Test_expr1_ternary_vimscript()
 
   lines =<< trim END
       var name = v:false
-      		? 'yes'
+		? 'yes'
 		: 'no'
       assert_equal('no', name)
   END
@@ -90,7 +90,7 @@ def Test_expr1_ternary_vimscript()
 
   lines =<< trim END
       var name = v:false ?
-      		'yes' :
+		'yes' :
 		'no'
       assert_equal('no', name)
   END
@@ -98,7 +98,7 @@ def Test_expr1_ternary_vimscript()
 
   lines =<< trim END
       var name = v:false ?  # comment
-      		'yes' :
+		'yes' :
                 # comment
 		'no' # comment
       assert_equal('no', name)
@@ -317,22 +317,22 @@ def Test_expr2_vimscript()
   # check line continuation
   var lines =<< trim END
       var name = 0
-      		|| 1
+		|| 1
       assert_equal(true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
 
   lines =<< trim END
       var name = v:false
-      		|| v:true
-      		|| v:false
+		|| v:true
+		|| v:false
       assert_equal(v:true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
 
   lines =<< trim END
       var name = v:false ||
-      		v:true ||
+		v:true ||
 		v:false
       assert_equal(v:true, name)
   END
@@ -341,7 +341,7 @@ def Test_expr2_vimscript()
   lines =<< trim END
       var name = v:false || # comment
                 # comment
-      		v:true ||
+		v:true ||
                 # comment
 		v:false # comment
       assert_equal(v:true, name)
@@ -456,23 +456,23 @@ def Test_expr3_vimscript()
   # check line continuation
   var lines =<< trim END
       var name = 0
-      		&& 1
+		&& 1
       assert_equal(false, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
 
   lines =<< trim END
       var name = v:true
-      		&& v:true
-      		&& v:true
+		&& v:true
+		&& v:true
       assert_equal(v:true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
 
   lines =<< trim END
       var name = v:true &&
-      		v:true &&
-      		v:true
+		v:true &&
+		v:true
       assert_equal(v:true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -480,9 +480,9 @@ def Test_expr3_vimscript()
   lines =<< trim END
       var name = v:true &&  # comment
                 # comment
-      		v:true &&
+		v:true &&
                 # comment
-      		v:true
+		v:true
       assert_equal(v:true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -887,7 +887,7 @@ def Test_expr4_compare_null()
   # variables declared at script level used in a :def function
   lines =<< trim END
       vim9script
-      
+
       var l_decl: list<number>
       var l_empty = []
       var l_null = null_list
@@ -914,7 +914,7 @@ def Test_expr4_compare_null()
         assert_true(caught)
       enddef
       TestList()
-      
+
       var b_decl: blob
       var b_empty = 0z
       var b_null = null_blob
@@ -941,7 +941,7 @@ def Test_expr4_compare_null()
         assert_true(caught)
       enddef
       TestBlob()
-      
+
       var d_decl: dict<number>
       var d_empty = {}
       var d_null = null_dict
@@ -1274,7 +1274,7 @@ def Test_expr4_vim9script()
   # check line continuation
   var lines =<< trim END
       var name = 0
-      		< 1
+		< 1
       assert_equal(true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1282,14 +1282,14 @@ def Test_expr4_vim9script()
   lines =<< trim END
       var name = 123
                 # comment
-      		!= 123
+		!= 123
       assert_equal(false, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
 
   lines =<< trim END
       var name = 123 ==
-      			123
+			123
       assert_equal(true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1297,7 +1297,7 @@ def Test_expr4_vim9script()
   lines =<< trim END
       var list = [1, 2, 3]
       var name = list
-      		is list
+		is list
       assert_equal(true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1306,7 +1306,7 @@ def Test_expr4_vim9script()
       var list = [1, 2, 3]
       var name = list # comment
                  # comment
-      		is list
+		is list
       assert_equal(true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1314,7 +1314,7 @@ def Test_expr4_vim9script()
   lines =<< trim END
       var myblob = 0z1234
       var name = myblob
-      		isnot 0z11
+		isnot 0z11
       assert_equal(true, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1526,7 +1526,7 @@ def Test_expr6_vim9script()
   # check line continuation
   var lines =<< trim END
       var name = 11
-      		+ 77
+		+ 77
 		- 22
       assert_equal(66, name)
   END
@@ -1551,7 +1551,7 @@ def Test_expr6_vim9script()
 
   lines =<< trim END
       var name = 'one'
-      		.. 'two'
+		.. 'two'
       assert_equal('onetwo', name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1859,7 +1859,7 @@ def Test_expr7_vim9script()
   # check line continuation
   var lines =<< trim END
       var name = 11
-      		* 22
+		* 22
 		/ 3
       assert_equal(80, name)
   END
@@ -1867,7 +1867,7 @@ def Test_expr7_vim9script()
 
   lines =<< trim END
       var name = 25
-      		% 10
+		% 10
       assert_equal(5, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
@@ -1877,14 +1877,14 @@ def Test_expr7_vim9script()
                 # comment
 
                 # comment
-      		% 10
+		% 10
       assert_equal(5, name)
   END
   v9.CheckDefAndScriptSuccess(lines)
 
   lines =<< trim END
       var name = 11 *
-      		22 /
+		22 /
 		3
       assert_equal(80, name)
   END
@@ -2775,7 +2775,7 @@ def Test_expr9_dict()
       var dkeys = {['key']: 'string',
                    [12]: 'numberexpr',
                    34: 'number',
-                   [true]: 'bool'} 
+                   [true]: 'bool'}
       assert_equal('string', dkeys['key'])
       assert_equal('numberexpr', dkeys[12])
       assert_equal('number', dkeys[34])
@@ -2798,7 +2798,7 @@ def Test_expr9_dict()
       assert_equal('dict<list<unknown>>', typename(dl))
   END
   v9.CheckDefAndScriptSuccess(lines)
- 
+
   # legacy syntax doesn't work
   v9.CheckDefAndScriptFailure(["var x = #{key: 8}"], 'E1170:', 1)
   v9.CheckDefAndScriptFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
@@ -3206,7 +3206,7 @@ enddef
 def Test_expr_member_vim9script()
   var lines =<< trim END
       var d = {one:
-      		'one',
+		'one',
 		two: 'two',
 		1: 1,
 		_: 2}
@@ -3494,19 +3494,19 @@ def Test_expr9_legacy_script()
   assert_equal('ok', g:LegacyReturn())
 
   lines =<< trim END
-      vim9script 
-      def GetNumber(): number   
+      vim9script
+      def GetNumber(): number
           legacy return notexists
-      enddef 
+      enddef
       echo GetNumber()
   END
   v9.CheckScriptFailure(lines, 'E121: Undefined variable: notexists')
 
   lines =<< trim END
-      vim9script 
-      def GetNumber(): number   
-          legacy return range(3)->map('v:val + 1') 
-      enddef 
+      vim9script
+      def GetNumber(): number
+          legacy return range(3)->map('v:val + 1')
+      enddef
       echo GetNumber()
   END
   v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<number>')
@@ -3631,7 +3631,7 @@ def Test_expr9_method_call()
 
       var Join = (l) => join(l, 'x')
       assert_equal('axb', ['a', 'b']->(Join)())
-      
+
       var sorted = [3, 1, 2]
                     -> sort()
       assert_equal([1, 2, 3], sorted)
index 44a8d4b106532168bc50cb3c5058df8b641c5a62..f9ff3bc3e6c1c5a4c2d26bb333bb6f823678b88c
GIT binary patch
literal 104198
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
K%s#+z_J0A-!q5r;
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -2656,7 +2656,7 @@ def Test_autoload_mapping()
 
       import autoload 'toggle.vim'
 
-      nnoremap <silent> <expr> tt toggle.Toggle() 
+      nnoremap <silent> <expr> tt toggle.Toggle()
       nnoremap <silent> xx <ScriptCmd>toggle.Doit()<CR>
       nnoremap <silent> yy <Cmd>toggle.Doit()<CR>
   END
--- a/src/testdir/test_viminfo.vim
+++ b/src/testdir/test_viminfo.vim
@@ -301,7 +301,7 @@ func Test_cmdline_history_order()
   call test_settime(39)
   call histadd(':', "echo '39'")
   wviminfo Xviminfo
-  
+
   call histdel(':')
   rviminfo Xviminfo
   call assert_equal("echo '39'", histget(':', -1))
@@ -560,7 +560,7 @@ func Test_viminfo_encoding()
   sp Xviminfo
   call assert_equal('latin1', &fenc)
   close
-  
+
   call histdel(':')
   rviminfo Xviminfo
   call assert_equal("echo 'é'", histget(':', -1))
--- a/src/testdir/test_virtualedit.vim
+++ b/src/testdir/test_virtualedit.vim
@@ -585,14 +585,14 @@ func Test_virtualedit_mouse()
   set virtualedit&
 endfunc
 
-" this was replacing the NUL at the end of the line 
+" this was replacing the NUL at the end of the line
 func Test_virtualedit_replace_after_tab()
   new
   s/\v/	0
   set ve=all
   let @" = ''
   sil! norm vPvr0
-  
+
   call assert_equal("\t0", getline(1))
   set ve&
   bwipe!
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -1167,8 +1167,8 @@ endfunc
 func Test_visual_put_in_block_using_zp()
   new
   " paste using zP
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
-    \ '/subdir', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
+    \ '/subdir',
     \ '/longsubdir',
     \ '/longlongsubdir'])
   exe "normal! 5G\<c-v>2j$y"
@@ -1176,8 +1176,8 @@ func Test_visual_put_in_block_using_zp()
   call assert_equal(['/path/subdir;text', '/path/longsubdir;text', '/path/longlongsubdir;text'], getline(1, 3))
   %d
   " paste using zP
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
-    \ '/subdir', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
+    \ '/subdir',
     \ '/longsubdir',
     \ '/longlongsubdir'])
   exe "normal! 5G\<c-v>2j$y"
@@ -1190,7 +1190,7 @@ func Test_visual_put_in_block_using_zy_a
   new
 
   " Test 1) Paste using zp - after the cursor without trailing spaces
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
     \ 'texttext  /subdir           columntext',
 		\ 'texttext  /longsubdir       columntext',
     \ 'texttext  /longlongsubdir   columntext'])
@@ -1200,7 +1200,7 @@ func Test_visual_put_in_block_using_zy_a
 
   " Test 2) Paste using zP - in front of the cursor without trailing spaces
   %d
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
     \ 'texttext  /subdir           columntext',
 		\ 'texttext  /longsubdir       columntext',
     \ 'texttext  /longlongsubdir   columntext'])
@@ -1210,7 +1210,7 @@ func Test_visual_put_in_block_using_zy_a
 
   " Test 3) Paste using p - with trailing spaces
   %d
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
     \ 'texttext  /subdir           columntext',
 		\ 'texttext  /longsubdir       columntext',
     \ 'texttext  /longlongsubdir   columntext'])
@@ -1220,7 +1220,7 @@ func Test_visual_put_in_block_using_zy_a
 
   " Test 4) Paste using P - with trailing spaces
   %d
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
     \ 'texttext  /subdir           columntext',
 		\ 'texttext  /longsubdir       columntext',
     \ 'texttext  /longlongsubdir   columntext'])
@@ -1230,7 +1230,7 @@ func Test_visual_put_in_block_using_zy_a
 
   " Test 5) Yank with spaces inside the block
   %d
-  call setline(1, ['/path;text', '/path;text', '/path;text', '', 
+  call setline(1, ['/path;text', '/path;text', '/path;text', '',
     \ 'texttext  /sub    dir/           columntext',
     \ 'texttext  /lon    gsubdir/       columntext',
     \ 'texttext  /lon    glongsubdir/   columntext'])
--- a/src/testdir/test_winbuf_close.vim
+++ b/src/testdir/test_winbuf_close.vim
@@ -219,7 +219,7 @@ func Test_window_close_splitright_noequa
   execute "normal \<c-w>b"
   let h = winheight(0)
   let w = win_getid()
-  new 
+  new
   q
   call assert_equal(h, winheight(0), "Window height does not match eight before opening and closing another window")
   call assert_equal(w, win_getid(), "Did not return to original window after opening and closing a window")
--- a/src/testdir/test_xxd.vim
+++ b/src/testdir/test_xxd.vim
@@ -232,7 +232,7 @@ func Test_xxd()
       };
       unsigned int varName_len = 11;
     [CODE]
-  
+
     call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
   endfor
 
@@ -289,7 +289,7 @@ func Test_xxd_patch()
   exe cmd1
   exe cmd2
   call assert_equal(['00000000: 3a 3a 45 45 3a 3a 3a 3a 46 46                    ::EE::::FF'], readfile('Xxxdout'))
-  
+
   call writefile(["2: 41 41", "08: 42 42"], 'Xxxdin')
   call writefile(['::::::::'], 'Xxxdfile')
   exe cmd1
@@ -305,7 +305,7 @@ func Test_xxd_patch()
   exe cmd1
   exe cmd2
   call assert_equal(['00000000: 3a 3a 45 45 3a 3a 3a 3a 42 44 46 46              ::EE::::BDFF'], readfile('Xxxdout'))
-  
+
   call delete('Xxxdout')
 endfunc
 
--- a/src/testdir/unix.vim
+++ b/src/testdir/unix.vim
@@ -2,7 +2,7 @@
 " Always use "sh", don't use the value of "$SHELL".
 set shell=sh
 
-" Only when the +eval feature is present. 
+" Only when the +eval feature is present.
 if 1
   " While some tests overwrite $HOME to prevent them from polluting user files,
   " we need to remember the original value so that we can tell external systems
--- a/src/testdir/vim9.vim
+++ b/src/testdir/vim9.vim
@@ -195,14 +195,14 @@ endfunc
 # CheckLegacyAndVim9Success()
 export def CheckTransLegacySuccess(lines: list<string>)
   var legacylines = lines->mapnew((_, v) =>
-  				v->substitute('\<VAR\>', 'let', 'g')
-		           	 ->substitute('\<LET\>', 'let', 'g')
-		           	 ->substitute('\<LSTART\>', '{', 'g')
-		           	 ->substitute('\<LMIDDLE\>', '->', 'g')
+				v->substitute('\<VAR\>', 'let', 'g')
+				 ->substitute('\<LET\>', 'let', 'g')
+				 ->substitute('\<LSTART\>', '{', 'g')
+				 ->substitute('\<LMIDDLE\>', '->', 'g')
 				 ->substitute('\<LEND\>', '}', 'g')
 				 ->substitute('\<TRUE\>', '1', 'g')
 				 ->substitute('\<FALSE\>', '0', 'g')
-		           	 ->substitute('#"', ' "', 'g'))
+				 ->substitute('#"', ' "', 'g'))
   CheckLegacySuccess(legacylines)
 enddef
 
@@ -262,14 +262,14 @@ export def CheckLegacyAndVim9Failure(lin
   endif
 
   var legacylines = lines->mapnew((_, v) =>
-  				v->substitute('\<VAR\>', 'let', 'g')
-		           	 ->substitute('\<LET\>', 'let', 'g')
-		           	 ->substitute('#"', ' "', 'g'))
+				v->substitute('\<VAR\>', 'let', 'g')
+				 ->substitute('\<LET\>', 'let', 'g')
+				 ->substitute('#"', ' "', 'g'))
   CheckLegacyFailure(legacylines, legacyError)
 
   var vim9lines = lines->mapnew((_, v) =>
-  				v->substitute('\<VAR\>', 'var', 'g')
-		           	 ->substitute('\<LET ', '', 'g'))
+				v->substitute('\<VAR\>', 'var', 'g')
+				 ->substitute('\<LET ', '', 'g'))
   CheckDefExecFailure(vim9lines, defError)
   CheckScriptFailure(['vim9script'] + vim9lines, scriptError)
 enddef
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1257,
+/**/
     1256,
 /**/
     1255,