vim-patch:9.1.0835: :setglobal doesn't work properly for 'ffu' and 'tsrfu'

Problem:  :setglobal doesn't work properly for 'ffu' and 'tsrfu' when
          the local value is set (after v9.1.0831)
Solution: Check os_flags instead of buffer option variable (zeertzjq).

closes: vim/vim#15980

6eda269600
This commit is contained in:
zeertzjq
2024-11-03 16:54:25 +08:00
parent 981fa11c91
commit fe565ca382
4 changed files with 94 additions and 9 deletions

View File

@@ -364,7 +364,7 @@ func Test_findfunc()
" Error cases
" Function that doesn't any argument
" Function that doesn't take any arguments
func FindFuncNoArg()
endfunc
set findfunc=FindFuncNoArg
@@ -484,6 +484,41 @@ func Test_findfunc_scriptlocal_func()
call assert_equal('abc', g:FindFuncArg)
bw!
new | only
set findfunc=
setlocal findfunc=NoSuchFunc
setglobal findfunc=s:FindFuncScript
call assert_equal('NoSuchFunc', &findfunc)
call assert_equal('NoSuchFunc', &l:findfunc)
call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
new | only
call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
call assert_equal('', &l:findfunc)
let g:FindFuncArg = ''
find abc
call assert_equal('abc', g:FindFuncArg)
bw!
new | only
set findfunc=
setlocal findfunc=NoSuchFunc
set findfunc=s:FindFuncScript
call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
call assert_equal('', &l:findfunc)
let g:FindFuncArg = ''
find abc
call assert_equal('abc', g:FindFuncArg)
new | only
call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
call assert_equal('', &l:findfunc)
let g:FindFuncArg = ''
find abc
call assert_equal('abc', g:FindFuncArg)
bw!
set findfunc=
delfunc s:FindFuncScript
endfunc

View File

@@ -2268,6 +2268,7 @@ func Test_thesaurusfunc_callback()
call add(g:TsrFunc3Args, [a:findstart, a:base])
return a:findstart ? 0 : []
endfunc
set tsrfu=s:TsrFunc3
new
call setline(1, 'script1')
@@ -2283,6 +2284,46 @@ func Test_thesaurusfunc_callback()
call feedkeys("A\<C-X>\<C-T>\<Esc>", 'x')
call assert_equal([[1, ''], [0, 'script2']], g:TsrFunc3Args)
bw!
new | only
set thesaurusfunc=
setlocal thesaurusfunc=NoSuchFunc
setglobal thesaurusfunc=s:TsrFunc3
call assert_equal('NoSuchFunc', &thesaurusfunc)
call assert_equal('NoSuchFunc', &l:thesaurusfunc)
call assert_equal('s:TsrFunc3', &g:thesaurusfunc)
new | only
call assert_equal('s:TsrFunc3', &thesaurusfunc)
call assert_equal('s:TsrFunc3', &g:thesaurusfunc)
call assert_equal('', &l:thesaurusfunc)
call setline(1, 'script1')
let g:TsrFunc3Args = []
call feedkeys("A\<C-X>\<C-T>\<Esc>", 'x')
call assert_equal([[1, ''], [0, 'script1']], g:TsrFunc3Args)
bw!
new | only
set thesaurusfunc=
setlocal thesaurusfunc=NoSuchFunc
set thesaurusfunc=s:TsrFunc3
call assert_equal('s:TsrFunc3', &thesaurusfunc)
call assert_equal('s:TsrFunc3', &g:thesaurusfunc)
call assert_equal('', &l:thesaurusfunc)
call setline(1, 'script1')
let g:TsrFunc3Args = []
call feedkeys("A\<C-X>\<C-T>\<Esc>", 'x')
call assert_equal([[1, ''], [0, 'script1']], g:TsrFunc3Args)
setlocal bufhidden=wipe
new | only!
call assert_equal('s:TsrFunc3', &thesaurusfunc)
call assert_equal('s:TsrFunc3', &g:thesaurusfunc)
call assert_equal('', &l:thesaurusfunc)
call setline(1, 'script1')
let g:TsrFunc3Args = []
call feedkeys("A\<C-X>\<C-T>\<Esc>", 'x')
call assert_equal([[1, ''], [0, 'script1']], g:TsrFunc3Args)
bw!
delfunc s:TsrFunc3
" invalid return value