neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

vim9.vim (7444B)


      1 " Use a different file name for each run.
      2 let s:sequence = 1
      3 
      4 func CheckDefSuccess(lines)
      5  return
      6 endfunc
      7 
      8 func CheckDefFailure(lines, error, lnum = -3)
      9  return
     10 endfunc
     11 
     12 func CheckDefExecFailure(lines, error, lnum = -3)
     13  return
     14 endfunc
     15 
     16 func CheckScriptFailure(lines, error, lnum = -3)
     17  if get(a:lines, 0, '') ==# 'vim9script'
     18    return
     19  endif
     20  let cwd = getcwd()
     21  let fname = 'XScriptFailure' .. s:sequence
     22  let s:sequence += 1
     23  call writefile(a:lines, fname)
     24  try
     25    call assert_fails('so ' .. fname, a:error, a:lines, a:lnum)
     26  finally
     27    call chdir(cwd)
     28    call delete(fname)
     29  endtry
     30 endfunc
     31 
     32 func CheckScriptSuccess(lines)
     33  if get(a:lines, 0, '') ==# 'vim9script'
     34    return
     35  endif
     36  let cwd = getcwd()
     37  let fname = 'XScriptSuccess' .. s:sequence
     38  let s:sequence += 1
     39  call writefile(a:lines, fname)
     40  try
     41    exe 'so ' .. fname
     42  finally
     43    call chdir(cwd)
     44    call delete(fname)
     45  endtry
     46 endfunc
     47 
     48 func CheckDefAndScriptSuccess(lines)
     49  return
     50 endfunc
     51 
     52 func CheckDefAndScriptFailure(lines, error, lnum = -3)
     53  return
     54 endfunc
     55 
     56 func CheckDefExecAndScriptFailure(lines, error, lnum = -3)
     57  return
     58 endfunc
     59 
     60 " Check that "lines" inside a legacy function has no error.
     61 func CheckLegacySuccess(lines)
     62  let cwd = getcwd()
     63  let fname = 'XlegacySuccess' .. s:sequence
     64  let s:sequence += 1
     65  call writefile(['func Func()'] + a:lines + ['endfunc'], fname)
     66  try
     67    exe 'so ' .. fname
     68    call Func()
     69  finally
     70    delfunc! Func
     71    call chdir(cwd)
     72    call delete(fname)
     73  endtry
     74 endfunc
     75 
     76 " Check that "lines" inside a legacy function results in the expected error
     77 func CheckLegacyFailure(lines, error)
     78  let cwd = getcwd()
     79  let fname = 'XlegacyFails' .. s:sequence
     80  let s:sequence += 1
     81  call writefile(['func Func()'] + a:lines + ['endfunc', 'call Func()'], fname)
     82  try
     83    call assert_fails('so ' .. fname, a:error)
     84  finally
     85    delfunc! Func
     86    call chdir(cwd)
     87    call delete(fname)
     88  endtry
     89 endfunc
     90 
     91 " Translate "lines" to legacy Vim script
     92 func s:LegacyTrans(lines)
     93  return a:lines->mapnew({_, v ->
     94 	\ v->substitute('\<VAR\>', 'let', 'g')
     95 	\  ->substitute('\<LET\>', 'let', 'g')
     96 	\  ->substitute('\<LSTART\>', '{', 'g')
     97 	\  ->substitute('\<LMIDDLE\>', '->', 'g')
     98 	\  ->substitute('\<LEND\>', '}', 'g')
     99 	\  ->substitute('\<TRUE\>', '1', 'g')
    100 	\  ->substitute('\<FALSE\>', '0', 'g')
    101 	\  ->substitute('#"', ' "', 'g')
    102 	\ })
    103 endfunc
    104 
    105 " Execute "lines" in a legacy function, translated as in
    106 " CheckLegacyAndVim9Success()
    107 func CheckTransLegacySuccess(lines)
    108  call CheckLegacySuccess(s:LegacyTrans(a:lines))
    109 endfunc
    110 
    111 func CheckTransDefSuccess(lines)
    112  return
    113 endfunc
    114 
    115 func CheckTransVim9Success(lines)
    116  return
    117 endfunc
    118 
    119 " Execute "lines" in a legacy function
    120 " Use 'VAR' for a declaration.
    121 " Use 'LET' for an assignment
    122 " Use ' #"' for a comment
    123 " Use LSTART arg LMIDDLE expr LEND for lambda
    124 " Use 'TRUE' for 1
    125 " Use 'FALSE' for 0
    126 func CheckLegacyAndVim9Success(lines)
    127  call CheckTransLegacySuccess(a:lines)
    128 endfunc
    129 
    130 " Execute "lines" in a legacy function
    131 " Use 'VAR' for a declaration.
    132 " Use 'LET' for an assignment
    133 " Use ' #"' for a comment
    134 func CheckLegacyAndVim9Failure(lines, error)
    135  if type(a:error) == type('string')
    136    let legacyError = a:error
    137  else
    138    let legacyError = a:error[0]
    139  endif
    140 
    141  let legacylines = a:lines->mapnew({_, v ->
    142                              \ v->substitute('\<VAR\>', 'let', 'g')
    143                              \  ->substitute('\<LET\>', 'let', 'g')
    144                              \  ->substitute('#"', ' "', 'g')
    145                              \ })
    146  call CheckLegacyFailure(legacylines, legacyError)
    147 endfunc
    148 
    149 " Check that "lines" inside a legacy function has no error.
    150 func CheckSourceLegacySuccess(lines)
    151  let cwd = getcwd()
    152  new
    153  call setline(1, ['func Func()'] + a:lines + ['endfunc', 'call Func()'])
    154  let bnr = bufnr()
    155  try
    156    :source
    157  finally
    158    delfunc! Func
    159    call chdir(cwd)
    160    exe $':bw! {bnr}'
    161  endtry
    162 endfunc
    163 
    164 " Check that "lines" inside a legacy function results in the expected error
    165 func CheckSourceLegacyFailure(lines, error)
    166  let cwd = getcwd()
    167  new
    168  call setline(1, ['func Func()'] + a:lines + ['endfunc', 'call Func()'])
    169  let bnr = bufnr()
    170  try
    171    call assert_fails('source', a:error)
    172  finally
    173    delfunc! Func
    174    call chdir(cwd)
    175    exe $':bw! {bnr}'
    176  endtry
    177 endfunc
    178 
    179 " Execute "lines" in a legacy function, translated as in
    180 " CheckSourceLegacyAndVim9Success()
    181 func CheckSourceTransLegacySuccess(lines)
    182  call CheckSourceLegacySuccess(s:LegacyTrans(a:lines))
    183 endfunc
    184 
    185 " Execute "lines" in a :def function, translated as in
    186 " CheckLegacyAndVim9Success()
    187 func CheckSourceTransDefSuccess(lines)
    188  return
    189 endfunc
    190 
    191 " Execute "lines" in a Vim9 script, translated as in
    192 " CheckLegacyAndVim9Success()
    193 func CheckSourceTransVim9Success(lines)
    194  return
    195 endfunc
    196 
    197 " Execute "lines" in a legacy function, :def function and Vim9 script.
    198 " Use 'VAR' for a declaration.
    199 " Use 'LET' for an assignment
    200 " Use ' #"' for a comment
    201 " Use LSTART arg LMIDDLE expr LEND for lambda
    202 " Use 'TRUE' for 1 in legacy, true in Vim9
    203 " Use 'FALSE' for 0 in legacy, false in Vim9
    204 func CheckSourceLegacyAndVim9Success(lines)
    205  call CheckSourceTransLegacySuccess(a:lines)
    206 endfunc
    207 
    208 " :source a list of "lines" and check whether it fails with "error"
    209 func CheckSourceScriptFailure(lines, error, lnum = -3)
    210  if get(a:lines, 0, '') ==# 'vim9script'
    211    return
    212  endif
    213  let cwd = getcwd()
    214  new
    215  call setline(1, a:lines)
    216  let bnr = bufnr()
    217  try
    218    call assert_fails('source', a:error, a:lines, a:lnum)
    219  finally
    220    call chdir(cwd)
    221    exe $':bw! {bnr}'
    222  endtry
    223 endfunc
    224 
    225 " :source a list of "lines" and check whether it fails with the list of
    226 " "errors"
    227 func CheckSourceScriptFailureList(lines, errors, lnum = -3)
    228  if get(a:lines, 0, '') ==# 'vim9script'
    229    return
    230  endif
    231  let cwd = getcwd()
    232  new
    233  let bnr = bufnr()
    234  call setline(1, a:lines)
    235  try
    236    call assert_fails('source', a:errors, a:lines, a:lnum)
    237  finally
    238    call chdir(cwd)
    239    exe $':bw! {bnr}'
    240  endtry
    241 endfunc
    242 
    243 " :source a list of "lines" and check whether it succeeds
    244 func CheckSourceScriptSuccess(lines)
    245  if get(a:lines, 0, '') ==# 'vim9script'
    246    return
    247  endif
    248  let cwd = getcwd()
    249  new
    250  let bnr = bufnr()
    251  call setline(1, a:lines)
    252  try
    253    :source
    254  finally
    255    call chdir(cwd)
    256    exe $':bw! {bnr}'
    257  endtry
    258 endfunc
    259 
    260 func CheckSourceDefSuccess(lines)
    261  return
    262 endfunc
    263 
    264 func CheckSourceDefCompileSuccess(lines)
    265  return
    266 endfunc
    267 
    268 func CheckSourceDefFailure(lines, error, lnum = -3)
    269  return
    270 endfunc
    271 
    272 func CheckSourceDefExecFailure(lines, error, lnum = -3)
    273  return
    274 endfunc
    275 
    276 func CheckSourceDefAndScriptFailure(lines, error, lnum = -3)
    277  return
    278 endfunc
    279 
    280 func CheckSourceDefExecAndScriptFailure(lines, error, lnum = -3)
    281  return
    282 endfunc
    283 
    284 func CheckSourceSuccess(lines)
    285  call CheckSourceScriptSuccess(a:lines)
    286 endfunc
    287 
    288 func CheckSourceFailure(lines, error, lnum = -3)
    289  call CheckSourceScriptFailure(a:lines, a:error, a:lnum)
    290 endfunc
    291 
    292 func CheckSourceFailureList(lines, errors, lnum = -3)
    293  call CheckSourceScriptFailureList(a:lines, a:errors, a:lnum)
    294 endfunc
    295 
    296 func CheckSourceDefAndScriptSuccess(lines)
    297  return
    298 endfunc
    299 
    300 " Execute "lines" in a legacy function, :def function and Vim9 script.
    301 " Use 'VAR' for a declaration.
    302 " Use 'LET' for an assignment
    303 " Use ' #"' for a comment
    304 func CheckSourceLegacyAndVim9Failure(lines, error)
    305  let legacyError = type(a:error) == type('string') ? a:error : a:error[0]
    306  call CheckSourceLegacyFailure(s:LegacyTrans(a:lines), legacyError)
    307 endfunc