mirror of
https://github.com/neovim/neovim.git
synced 2025-10-06 18:06:30 +00:00
Merge PR #11291 from shanesmith/vim-8.1.1256-take2
This commit is contained in:
@@ -322,6 +322,12 @@ return {
|
||||
addr_type=ADDR_LINES,
|
||||
func='ex_abclear',
|
||||
},
|
||||
{
|
||||
command='cabove',
|
||||
flags=bit.bor(RANGE, TRLBAR),
|
||||
addr_type=ADDR_OTHER ,
|
||||
func='ex_cbelow',
|
||||
},
|
||||
{
|
||||
command='caddbuffer',
|
||||
flags=bit.bor(RANGE, NOTADR, WORD1, TRLBAR),
|
||||
@@ -358,6 +364,12 @@ return {
|
||||
addr_type=ADDR_LINES,
|
||||
func='ex_cbuffer',
|
||||
},
|
||||
{
|
||||
command='cbelow',
|
||||
flags=bit.bor(RANGE, TRLBAR),
|
||||
addr_type=ADDR_OTHER ,
|
||||
func='ex_cbelow',
|
||||
},
|
||||
{
|
||||
command='cbottom',
|
||||
flags=bit.bor(TRLBAR),
|
||||
@@ -1272,6 +1284,12 @@ return {
|
||||
addr_type=ADDR_LINES,
|
||||
func='ex_last',
|
||||
},
|
||||
{
|
||||
command='labove',
|
||||
flags=bit.bor(RANGE, TRLBAR),
|
||||
addr_type=ADDR_OTHER ,
|
||||
func='ex_cbelow',
|
||||
},
|
||||
{
|
||||
command='language',
|
||||
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
|
||||
@@ -1308,6 +1326,12 @@ return {
|
||||
addr_type=ADDR_LINES,
|
||||
func='ex_cbuffer',
|
||||
},
|
||||
{
|
||||
command='lbelow',
|
||||
flags=bit.bor(RANGE, TRLBAR),
|
||||
addr_type=ADDR_OTHER ,
|
||||
func='ex_cbelow',
|
||||
},
|
||||
{
|
||||
command='lbottom',
|
||||
flags=bit.bor(TRLBAR),
|
||||
|
@@ -693,6 +693,8 @@ void free_all_mem(void)
|
||||
|
||||
clear_hl_tables(false);
|
||||
list_free_log();
|
||||
|
||||
check_quickfix_busy();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
2459
src/nvim/quickfix.c
2459
src/nvim/quickfix.c
File diff suppressed because it is too large
Load Diff
@@ -37,6 +37,8 @@ func s:setup_commands(cchar)
|
||||
command! -nargs=* Xgrepadd <mods> grepadd <args>
|
||||
command! -nargs=* Xhelpgrep helpgrep <args>
|
||||
command! -nargs=0 -count Xcc <count>cc
|
||||
command! -count=1 -nargs=0 Xbelow <mods><count>cbelow
|
||||
command! -count=1 -nargs=0 Xabove <mods><count>cabove
|
||||
let g:Xgetlist = function('getqflist')
|
||||
let g:Xsetlist = function('setqflist')
|
||||
call setqflist([], 'f')
|
||||
@@ -70,6 +72,8 @@ func s:setup_commands(cchar)
|
||||
command! -nargs=* Xgrepadd <mods> lgrepadd <args>
|
||||
command! -nargs=* Xhelpgrep lhelpgrep <args>
|
||||
command! -nargs=0 -count Xcc <count>ll
|
||||
command! -count=1 -nargs=0 Xbelow <mods><count>lbelow
|
||||
command! -count=1 -nargs=0 Xabove <mods><count>labove
|
||||
let g:Xgetlist = function('getloclist', [0])
|
||||
let g:Xsetlist = function('setloclist', [0])
|
||||
call setloclist(0, [], 'f')
|
||||
@@ -163,6 +167,12 @@ endfunc
|
||||
func XageTests(cchar)
|
||||
call s:setup_commands(a:cchar)
|
||||
|
||||
if a:cchar == 'l'
|
||||
" No location list for the current window
|
||||
call assert_fails('lolder', 'E776:')
|
||||
call assert_fails('lnewer', 'E776:')
|
||||
endif
|
||||
|
||||
let list = [{'bufnr': bufnr('%'), 'lnum': 1}]
|
||||
call g:Xsetlist(list)
|
||||
|
||||
@@ -561,6 +571,8 @@ func s:test_xhelpgrep(cchar)
|
||||
|
||||
" Search for non existing help string
|
||||
call assert_fails('Xhelpgrep a1b2c3', 'E480:')
|
||||
" Invalid regular expression
|
||||
call assert_fails('Xhelpgrep \@<!', 'E480:')
|
||||
endfunc
|
||||
|
||||
func Test_helpgrep()
|
||||
@@ -1066,8 +1078,8 @@ func Test_efm2()
|
||||
set efm=%f:%s
|
||||
cexpr 'Xtestfile:Line search text'
|
||||
let l = getqflist()
|
||||
call assert_equal(l[0].pattern, '^\VLine search text\$')
|
||||
call assert_equal(l[0].lnum, 0)
|
||||
call assert_equal('^\VLine search text\$', l[0].pattern)
|
||||
call assert_equal(0, l[0].lnum)
|
||||
|
||||
let l = split(execute('clist', ''), "\n")
|
||||
call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l)
|
||||
@@ -3358,7 +3370,28 @@ func Test_lexpr_crash()
|
||||
augroup QF_Test
|
||||
au!
|
||||
augroup END
|
||||
|
||||
enew | only
|
||||
augroup QF_Test
|
||||
au!
|
||||
au BufNew * call setloclist(0, [], 'f')
|
||||
augroup END
|
||||
lexpr 'x:1:x'
|
||||
augroup QF_Test
|
||||
au!
|
||||
augroup END
|
||||
|
||||
enew | only
|
||||
lexpr ''
|
||||
lopen
|
||||
augroup QF_Test
|
||||
au!
|
||||
au FileType * call setloclist(0, [], 'f')
|
||||
augroup END
|
||||
lexpr ''
|
||||
augroup QF_Test
|
||||
au!
|
||||
augroup END
|
||||
endfunc
|
||||
|
||||
" The following test used to crash Vim
|
||||
@@ -3809,4 +3842,110 @@ func Test_viscol()
|
||||
call delete('Xfile1')
|
||||
endfunc
|
||||
|
||||
" Test for the :cbelow, :cabove, :lbelow and :labove commands.
|
||||
func Xtest_below(cchar)
|
||||
call s:setup_commands(a:cchar)
|
||||
|
||||
" No quickfix/location list
|
||||
call assert_fails('Xbelow', 'E42:')
|
||||
call assert_fails('Xabove', 'E42:')
|
||||
|
||||
" Empty quickfix/location list
|
||||
call g:Xsetlist([])
|
||||
call assert_fails('Xbelow', 'E42:')
|
||||
call assert_fails('Xabove', 'E42:')
|
||||
|
||||
call s:create_test_file('X1')
|
||||
call s:create_test_file('X2')
|
||||
call s:create_test_file('X3')
|
||||
call s:create_test_file('X4')
|
||||
|
||||
" Invalid entries
|
||||
edit X1
|
||||
call g:Xsetlist(["E1", "E2"])
|
||||
call assert_fails('Xbelow', 'E42:')
|
||||
call assert_fails('Xabove', 'E42:')
|
||||
call assert_fails('3Xbelow', 'E42:')
|
||||
call assert_fails('4Xabove', 'E42:')
|
||||
|
||||
" Test the commands with various arguments
|
||||
Xexpr ["X1:5:L5", "X2:5:L5", "X2:10:L10", "X2:15:L15", "X3:3:L3"]
|
||||
edit +7 X2
|
||||
Xabove
|
||||
call assert_equal(['X2', 5], [bufname(''), line('.')])
|
||||
call assert_fails('Xabove', 'E553:')
|
||||
normal 2j
|
||||
Xbelow
|
||||
call assert_equal(['X2', 10], [bufname(''), line('.')])
|
||||
" Last error in this file
|
||||
Xbelow 99
|
||||
call assert_equal(['X2', 15], [bufname(''), line('.')])
|
||||
call assert_fails('Xbelow', 'E553:')
|
||||
" First error in this file
|
||||
Xabove 99
|
||||
call assert_equal(['X2', 5], [bufname(''), line('.')])
|
||||
call assert_fails('Xabove', 'E553:')
|
||||
normal gg
|
||||
Xbelow 2
|
||||
call assert_equal(['X2', 10], [bufname(''), line('.')])
|
||||
normal G
|
||||
Xabove 2
|
||||
call assert_equal(['X2', 10], [bufname(''), line('.')])
|
||||
edit X4
|
||||
call assert_fails('Xabove', 'E42:')
|
||||
call assert_fails('Xbelow', 'E42:')
|
||||
if a:cchar == 'l'
|
||||
" If a buffer has location list entries from some other window but not
|
||||
" from the current window, then the commands should fail.
|
||||
edit X1 | split | call setloclist(0, [], 'f')
|
||||
call assert_fails('Xabove', 'E776:')
|
||||
call assert_fails('Xbelow', 'E776:')
|
||||
close
|
||||
endif
|
||||
|
||||
" Test for lines with multiple quickfix entries
|
||||
Xexpr ["X1:5:L5", "X2:5:1:L5_1", "X2:5:2:L5_2", "X2:5:3:L5_3",
|
||||
\ "X2:10:1:L10_1", "X2:10:2:L10_2", "X2:10:3:L10_3",
|
||||
\ "X2:15:1:L15_1", "X2:15:2:L15_2", "X2:15:3:L15_3", "X3:3:L3"]
|
||||
edit +1 X2
|
||||
Xbelow 2
|
||||
call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')])
|
||||
normal gg
|
||||
Xbelow 99
|
||||
call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')])
|
||||
normal G
|
||||
Xabove 2
|
||||
call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')])
|
||||
normal G
|
||||
Xabove 99
|
||||
call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')])
|
||||
normal 10G
|
||||
Xabove
|
||||
call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')])
|
||||
normal 10G
|
||||
Xbelow
|
||||
call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')])
|
||||
|
||||
" Invalid range
|
||||
if a:cchar == 'c'
|
||||
call assert_fails('-2cbelow', 'E553:')
|
||||
" TODO: should go to first error in the current line?
|
||||
0cabove
|
||||
else
|
||||
call assert_fails('-2lbelow', 'E553:')
|
||||
" TODO: should go to first error in the current line?
|
||||
0labove
|
||||
endif
|
||||
|
||||
call delete('X1')
|
||||
call delete('X2')
|
||||
call delete('X3')
|
||||
call delete('X4')
|
||||
endfunc
|
||||
|
||||
func Test_cbelow()
|
||||
call Xtest_below('c')
|
||||
call Xtest_below('l')
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
Reference in New Issue
Block a user