mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00
Merge pull request #20063 from zeertzjq/vim-9.0.0360
vim-patch:8.2.1505,9.0.{0360,0362}
This commit is contained in:
@@ -642,7 +642,7 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
|
|||||||
|
|
||||||
// Check for the next breakpoint at or after the ":while"
|
// Check for the next breakpoint at or after the ":while"
|
||||||
// or ":for".
|
// or ":for".
|
||||||
if (breakpoint != NULL) {
|
if (breakpoint != NULL && lines_ga.ga_len > current_line) {
|
||||||
*breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline), fname,
|
*breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline), fname,
|
||||||
((wcmd_T *)lines_ga.ga_data)[current_line].lnum - 1);
|
((wcmd_T *)lines_ga.ga_data)[current_line].lnum - 1);
|
||||||
*dbg_tick = debug_tick;
|
*dbg_tick = debug_tick;
|
||||||
|
@@ -2106,13 +2106,16 @@ int expand_wildcards_eval(char_u **pat, int *num_file, char ***file, int flags)
|
|||||||
char *exp_pat = (char *)(*pat);
|
char *exp_pat = (char *)(*pat);
|
||||||
char *ignored_msg;
|
char *ignored_msg;
|
||||||
size_t usedlen;
|
size_t usedlen;
|
||||||
|
const bool is_cur_alt_file = *exp_pat == '%' || *exp_pat == '#';
|
||||||
|
bool star_follows = false;
|
||||||
|
|
||||||
if (*exp_pat == '%' || *exp_pat == '#' || *exp_pat == '<') {
|
if (is_cur_alt_file || *exp_pat == '<') {
|
||||||
emsg_off++;
|
emsg_off++;
|
||||||
eval_pat = eval_vars((char_u *)exp_pat, (char_u *)exp_pat, &usedlen, NULL, &ignored_msg, NULL,
|
eval_pat = eval_vars((char_u *)exp_pat, (char_u *)exp_pat, &usedlen, NULL, &ignored_msg, NULL,
|
||||||
true);
|
true);
|
||||||
emsg_off--;
|
emsg_off--;
|
||||||
if (eval_pat != NULL) {
|
if (eval_pat != NULL) {
|
||||||
|
star_follows = strcmp(exp_pat + usedlen, "*") == 0;
|
||||||
exp_pat = concat_str((char *)eval_pat, exp_pat + usedlen);
|
exp_pat = concat_str((char *)eval_pat, exp_pat + usedlen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2122,6 +2125,16 @@ int expand_wildcards_eval(char_u **pat, int *num_file, char ***file, int flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (eval_pat != NULL) {
|
if (eval_pat != NULL) {
|
||||||
|
if (*num_file == 0 && is_cur_alt_file && star_follows) {
|
||||||
|
// Expanding "%" or "#" and the file does not exist: Add the
|
||||||
|
// pattern anyway (without the star) so that this works for remote
|
||||||
|
// files and non-file buffer names.
|
||||||
|
*file = xmalloc(sizeof(char *));
|
||||||
|
**file = (char *)eval_pat;
|
||||||
|
eval_pat = NULL;
|
||||||
|
*num_file = 1;
|
||||||
|
ret = OK;
|
||||||
|
}
|
||||||
xfree(exp_pat);
|
xfree(exp_pat);
|
||||||
xfree(eval_pat);
|
xfree(eval_pat);
|
||||||
}
|
}
|
||||||
|
@@ -1055,6 +1055,18 @@ func Test_cmdline_write_alternatefile()
|
|||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_cmdline_expand_cur_alt_file()
|
||||||
|
enew
|
||||||
|
file http://some.com/file.txt
|
||||||
|
call feedkeys(":e %\<Tab>\<C-B>\"\<CR>", 'xt')
|
||||||
|
call assert_equal('"e http://some.com/file.txt', @:)
|
||||||
|
edit another
|
||||||
|
call feedkeys(":e #\<Tab>\<C-B>\"\<CR>", 'xt')
|
||||||
|
call assert_equal('"e http://some.com/file.txt', @:)
|
||||||
|
bwipe
|
||||||
|
bwipe http://some.com/file.txt
|
||||||
|
endfunc
|
||||||
|
|
||||||
" using a leading backslash here
|
" using a leading backslash here
|
||||||
set cpo+=C
|
set cpo+=C
|
||||||
|
|
||||||
|
@@ -1,5 +1,8 @@
|
|||||||
" Tests for various eval things.
|
" Tests for various eval things.
|
||||||
|
|
||||||
|
source view_util.vim
|
||||||
|
source shared.vim
|
||||||
|
|
||||||
function s:foo() abort
|
function s:foo() abort
|
||||||
try
|
try
|
||||||
return [] == 0
|
return [] == 0
|
||||||
@@ -87,22 +90,47 @@ func Test_for_over_null_string()
|
|||||||
let &enc = save_enc
|
let &enc = save_enc
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_for_invalid_line_count()
|
||||||
|
let lines =<< trim END
|
||||||
|
111111111111111111111111 for line in ['one']
|
||||||
|
endfor
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XinvalidFor')
|
||||||
|
" only test that this doesn't crash
|
||||||
|
call RunVim([], [], '-u NONE -e -s -S XinvalidFor -c qa')
|
||||||
|
|
||||||
|
call delete('XinvalidFor')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_readfile_binary()
|
func Test_readfile_binary()
|
||||||
new
|
new
|
||||||
call setline(1, ['one', 'two', 'three'])
|
call setline(1, ['one', 'two', 'three'])
|
||||||
setlocal ff=dos
|
setlocal ff=dos
|
||||||
silent write XReadfile
|
silent write XReadfile_bin
|
||||||
let lines = readfile('XReadfile')
|
let lines = 'XReadfile_bin'->readfile()
|
||||||
call assert_equal(['one', 'two', 'three'], lines)
|
call assert_equal(['one', 'two', 'three'], lines)
|
||||||
let lines = readfile('XReadfile', '', 2)
|
let lines = readfile('XReadfile_bin', '', 2)
|
||||||
call assert_equal(['one', 'two'], lines)
|
call assert_equal(['one', 'two'], lines)
|
||||||
let lines = readfile('XReadfile', 'b')
|
let lines = readfile('XReadfile_bin', 'b')
|
||||||
call assert_equal(["one\r", "two\r", "three\r", ""], lines)
|
call assert_equal(["one\r", "two\r", "three\r", ""], lines)
|
||||||
let lines = readfile('XReadfile', 'b', 2)
|
let lines = readfile('XReadfile_bin', 'b', 2)
|
||||||
call assert_equal(["one\r", "two\r"], lines)
|
call assert_equal(["one\r", "two\r"], lines)
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
call delete('XReadfile')
|
call delete('XReadfile_bin')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_readfile_bom()
|
||||||
|
call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
|
||||||
|
call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
|
||||||
|
call delete('XReadfile_bom')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_readfile_max()
|
||||||
|
call writefile(range(1, 4), 'XReadfile_max')
|
||||||
|
call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
|
||||||
|
call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
|
||||||
|
call delete('XReadfile_max')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_let_errmsg()
|
func Test_let_errmsg()
|
||||||
|
@@ -11,6 +11,7 @@ func Test_fnamemodify()
|
|||||||
call assert_equal('/', fnamemodify('.', ':p')[-1:])
|
call assert_equal('/', fnamemodify('.', ':p')[-1:])
|
||||||
call assert_equal('r', fnamemodify('.', ':p:h')[-1:])
|
call assert_equal('r', fnamemodify('.', ':p:h')[-1:])
|
||||||
call assert_equal('t', fnamemodify('test.out', ':p')[-1:])
|
call assert_equal('t', fnamemodify('test.out', ':p')[-1:])
|
||||||
|
call assert_equal($HOME .. "/foo" , fnamemodify('~/foo', ':p'))
|
||||||
call assert_equal('test.out', fnamemodify('test.out', ':.'))
|
call assert_equal('test.out', fnamemodify('test.out', ':.'))
|
||||||
call assert_equal('a', fnamemodify('../testdir/a', ':.'))
|
call assert_equal('a', fnamemodify('../testdir/a', ':.'))
|
||||||
call assert_equal('~/testdir/test.out', fnamemodify('test.out', ':~'))
|
call assert_equal('~/testdir/test.out', fnamemodify('test.out', ':~'))
|
||||||
@@ -95,4 +96,9 @@ func Test_fnamemodify_er()
|
|||||||
call assert_equal('', fnamemodify(v:_null_string, v:_null_string))
|
call assert_equal('', fnamemodify(v:_null_string, v:_null_string))
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_fnamemodify_fail()
|
||||||
|
call assert_fails('call fnamemodify({}, ":p")', 'E731:')
|
||||||
|
call assert_fails('call fnamemodify("x", {})', 'E731:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -2015,6 +2015,25 @@ func Test_getmousepos()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for glob()
|
||||||
|
func Test_glob()
|
||||||
|
call assert_equal('', glob(v:_null_string))
|
||||||
|
call assert_equal('', globpath(v:_null_string, v:_null_string))
|
||||||
|
|
||||||
|
call writefile([], 'Xglob1')
|
||||||
|
call writefile([], 'XGLOB2')
|
||||||
|
set wildignorecase
|
||||||
|
" Sort output of glob() otherwise we end up with different
|
||||||
|
" ordering depending on whether file system is case-sensitive.
|
||||||
|
call assert_equal(['XGLOB2', 'Xglob1'], sort(glob('Xglob[12]', 0, 1)))
|
||||||
|
set wildignorecase&
|
||||||
|
|
||||||
|
call delete('Xglob1')
|
||||||
|
call delete('XGLOB2')
|
||||||
|
|
||||||
|
call assert_fails("call glob('*', 0, {})", 'E728:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func HasDefault(msg = 'msg')
|
func HasDefault(msg = 'msg')
|
||||||
return a:msg
|
return a:msg
|
||||||
endfunc
|
endfunc
|
||||||
|
Reference in New Issue
Block a user