0
0
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:
zeertzjq
2025-02-22 09:13:17 +01:00
committed by Christian Brabandt
parent 51eefba1d6
commit bf595ae4ac
4 changed files with 72 additions and 4 deletions

View File

@@ -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, ",");
} }
} }
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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,
/**/ /**/