mirror of
https://github.com/vim/vim.git
synced 2025-09-30 04:44:14 -04:00
patch 9.1.1135: 'suffixesadd' doesn't work with multiple items
Problem: 'suffixesadd' doesn't work with multiple items (after 9.1.1122). Solution: Don't concat multiple suffixes together. (zeertzjq) fixes: #16694 closes: #16699 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
51eefba1d6
commit
bf595ae4ac
@@ -1082,6 +1082,7 @@ vim_findfile(void *search_ctx_arg)
|
|||||||
* Try without extra suffix and then with suffixes
|
* Try without extra suffix and then with suffixes
|
||||||
* from 'suffixesadd'.
|
* from 'suffixesadd'.
|
||||||
*/
|
*/
|
||||||
|
len = file_path.length;
|
||||||
if (search_ctx->ffsc_tagfile)
|
if (search_ctx->ffsc_tagfile)
|
||||||
suf = (char_u *)"";
|
suf = (char_u *)"";
|
||||||
else
|
else
|
||||||
@@ -1164,8 +1165,8 @@ vim_findfile(void *search_ctx_arg)
|
|||||||
// Not found or found already, try next suffix.
|
// Not found or found already, try next suffix.
|
||||||
if (*suf == NUL)
|
if (*suf == NUL)
|
||||||
break;
|
break;
|
||||||
file_path.length += copy_option_part(&suf, file_path.string + file_path.length,
|
file_path.length = len + copy_option_part(&suf,
|
||||||
MAXPATHL - file_path.length, ",");
|
file_path.string + len, MAXPATHL - len, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1872,6 +1873,7 @@ find_file_in_path_option(
|
|||||||
if (first == TRUE)
|
if (first == TRUE)
|
||||||
{
|
{
|
||||||
int l;
|
int l;
|
||||||
|
int NameBufflen;
|
||||||
int run;
|
int run;
|
||||||
size_t rel_fnamelen = 0;
|
size_t rel_fnamelen = 0;
|
||||||
char_u *suffix;
|
char_u *suffix;
|
||||||
@@ -1912,6 +1914,7 @@ find_file_in_path_option(
|
|||||||
|
|
||||||
// When the file doesn't exist, try adding parts of
|
// When the file doesn't exist, try adding parts of
|
||||||
// 'suffixesadd'.
|
// 'suffixesadd'.
|
||||||
|
NameBufflen = l;
|
||||||
suffix = suffixes;
|
suffix = suffixes;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@@ -1920,12 +1923,13 @@ find_file_in_path_option(
|
|||||||
|| ((find_what == FINDFILE_DIR)
|
|| ((find_what == FINDFILE_DIR)
|
||||||
== mch_isdir(NameBuff))))
|
== mch_isdir(NameBuff))))
|
||||||
{
|
{
|
||||||
file_name = vim_strnsave(NameBuff, l);
|
file_name = vim_strnsave(NameBuff, NameBufflen);
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
if (*suffix == NUL)
|
if (*suffix == NUL)
|
||||||
break;
|
break;
|
||||||
l += copy_option_part(&suffix, NameBuff + l, MAXPATHL - l, ",");
|
NameBufflen = l + copy_option_part(&suffix, NameBuff + l,
|
||||||
|
MAXPATHL - l, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -222,6 +222,36 @@ func Test_finddir_error()
|
|||||||
call assert_fails('call finddir("x", repeat("x", 5000))', 'E854:')
|
call assert_fails('call finddir("x", repeat("x", 5000))', 'E854:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_findfile_with_suffixesadd()
|
||||||
|
let save_path = &path
|
||||||
|
let save_dir = getcwd()
|
||||||
|
set path=,,
|
||||||
|
call mkdir('Xfinddir1', 'pR')
|
||||||
|
cd Xfinddir1
|
||||||
|
|
||||||
|
call writefile([], 'foo.c', 'D')
|
||||||
|
call writefile([], 'bar.cpp', 'D')
|
||||||
|
call writefile([], 'baz.cc', 'D')
|
||||||
|
call writefile([], 'foo.o', 'D')
|
||||||
|
call writefile([], 'bar.o', 'D')
|
||||||
|
call writefile([], 'baz.o', 'D')
|
||||||
|
|
||||||
|
set suffixesadd=.c,.cpp
|
||||||
|
call assert_equal('foo.c', findfile('foo'))
|
||||||
|
call assert_equal('./foo.c', findfile('./foo'))
|
||||||
|
call assert_equal('bar.cpp', findfile('bar'))
|
||||||
|
call assert_equal('./bar.cpp', findfile('./bar'))
|
||||||
|
call assert_equal('', findfile('baz'))
|
||||||
|
call assert_equal('', findfile('./baz'))
|
||||||
|
set suffixesadd+=.cc
|
||||||
|
call assert_equal('baz.cc', findfile('baz'))
|
||||||
|
call assert_equal('./baz.cc', findfile('./baz'))
|
||||||
|
|
||||||
|
set suffixesadd&
|
||||||
|
call chdir(save_dir)
|
||||||
|
let &path = save_path
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for the :find, :sfind and :tabfind commands
|
" Test for the :find, :sfind and :tabfind commands
|
||||||
func Test_find_cmd()
|
func Test_find_cmd()
|
||||||
new
|
new
|
||||||
|
@@ -353,4 +353,36 @@ func Test_gf_switchbuf()
|
|||||||
%bw!
|
%bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_gf_with_suffixesadd()
|
||||||
|
let cwd = getcwd()
|
||||||
|
let dir = 'Xtestgf_sua_dir'
|
||||||
|
call mkdir(dir, 'R')
|
||||||
|
call chdir(dir)
|
||||||
|
|
||||||
|
call writefile([], 'foo.c', 'D')
|
||||||
|
call writefile([], 'bar.cpp', 'D')
|
||||||
|
call writefile([], 'baz.cc', 'D')
|
||||||
|
call writefile([], 'foo.o', 'D')
|
||||||
|
call writefile([], 'bar.o', 'D')
|
||||||
|
call writefile([], 'baz.o', 'D')
|
||||||
|
|
||||||
|
new
|
||||||
|
setlocal path=,, suffixesadd=.c,.cpp
|
||||||
|
call setline(1, ['./foo', './bar', './baz'])
|
||||||
|
exe "normal! gg\<C-W>f"
|
||||||
|
call assert_equal('foo.c', expand('%:t'))
|
||||||
|
close
|
||||||
|
exe "normal! 2gg\<C-W>f"
|
||||||
|
call assert_equal('bar.cpp', expand('%:t'))
|
||||||
|
close
|
||||||
|
call assert_fails('exe "normal! 3gg\<C-W>f"', 'E447:')
|
||||||
|
setlocal suffixesadd+=.cc
|
||||||
|
exe "normal! 3gg\<C-W>f"
|
||||||
|
call assert_equal('baz.cc', expand('%:t'))
|
||||||
|
close
|
||||||
|
|
||||||
|
%bwipe!
|
||||||
|
call chdir(cwd)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1135,
|
||||||
/**/
|
/**/
|
||||||
1134,
|
1134,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user