vim-patch:9.1.0831: 'findexpr' can't be used as lambad or Funcref (#31058)

Problem:  'findexpr' can't be used for lambads
          (Justin Keyes)
Solution: Replace the findexpr option with the findfunc option
          (Yegappan Lakshmanan)

related: vim/vim#15905
closes: vim/vim#15976

a13f3a4f5d

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
zeertzjq
2024-11-03 10:06:41 +08:00
committed by GitHub
parent ed3fb1bb9a
commit 3075c69ff0
25 changed files with 604 additions and 292 deletions

View File

@@ -2294,31 +2294,31 @@ vim.wo.fcs = vim.wo.fillchars
vim.go.fillchars = vim.o.fillchars
vim.go.fcs = vim.go.fillchars
--- Expression that is evaluated to obtain the filename(s) for the `:find`
--- Function that is called to obtain the filename(s) for the `:find`
--- command. When this option is empty, the internal `file-searching`
--- mechanism is used.
---
--- While evaluating the expression, the `v:fname` variable is set to the
--- argument of the `:find` command.
--- The value can be the name of a function, a `lambda` or a `Funcref`.
--- See `option-value-function` for more information.
---
--- The expression is evaluated only once per `:find` command invocation.
--- The expression can process all the directories specified in 'path'.
--- The function is called with two arguments. The first argument is a
--- `String` and is the `:find` command argument. The second argument is
--- a `Boolean` and is set to `v:true` when the function is called to get
--- a List of command-line completion matches for the `:find` command.
--- The function should return a List of strings.
---
--- The expression may be evaluated for command-line completion as well,
--- in which case the `v:cmdcomplete` variable will be set to `v:true`,
--- otherwise it will be set to `v:false`.
--- The function is called only once per `:find` command invocation.
--- The function can process all the directories specified in 'path'.
---
--- If a match is found, the expression should return a `List` containing
--- one or more file names. If a match is not found, the expression
--- If a match is found, the function should return a `List` containing
--- one or more file names. If a match is not found, the function
--- should return an empty List.
---
--- If any errors are encountered during the expression evaluation, an
--- If any errors are encountered during the function invocation, an
--- empty List is used as the return value.
---
--- Using a function call without arguments is faster `expr-option-function`
---
--- It is not allowed to change text or jump to another window while
--- evaluating 'findexpr' `textlock`.
--- executing the 'findfunc' `textlock`.
---
--- This option cannot be set from a `modeline` or in the `sandbox`, for
--- security reasons.
@@ -2327,28 +2327,28 @@ vim.go.fcs = vim.go.fillchars
---
--- ```vim
--- " Use glob()
--- func FindExprGlob()
--- let pat = v:cmdcomplete ? $'{v:fname}*' : v:fname
--- func FindFuncGlob(cmdarg, cmdcomplete)
--- let pat = a:cmdcomplete ? $'{a:cmdarg}*' : a:cmdarg
--- return glob(pat, v:false, v:true)
--- endfunc
--- set findexpr=FindExprGlob()
--- set findfunc=FindFuncGlob
---
--- " Use the 'git ls-files' output
--- func FindGitFiles()
--- func FindGitFiles(cmdarg, cmdcomplete)
--- let fnames = systemlist('git ls-files')
--- return fnames->filter('v:val =~? v:fname')
--- return fnames->filter('v:val =~? a:cmdarg')
--- endfunc
--- set findexpr=FindGitFiles()
--- set findfunc=FindGitFiles
--- ```
---
---
--- @type string
vim.o.findexpr = ""
vim.o.fexpr = vim.o.findexpr
vim.bo.findexpr = vim.o.findexpr
vim.bo.fexpr = vim.bo.findexpr
vim.go.findexpr = vim.o.findexpr
vim.go.fexpr = vim.go.findexpr
vim.o.findfunc = ""
vim.o.ffu = vim.o.findfunc
vim.bo.findfunc = vim.o.findfunc
vim.bo.ffu = vim.bo.findfunc
vim.go.findfunc = vim.o.findfunc
vim.go.ffu = vim.go.findfunc
--- When writing a file and this option is on, <EOL> at the end of file
--- will be restored if missing. Turn this option off if you want to

View File

@@ -44,11 +44,6 @@ vim.v.cmdarg = ...
--- @type integer
vim.v.cmdbang = ...
--- When evaluating 'findexpr': if 'findexpr' is used for cmdline
--- completion the value is `v:true`, otherwise it is `v:false`.
--- @type boolean
vim.v.cmdcomplete = ...
--- The current locale setting for collation order of the runtime
--- environment. This allows Vim scripts to be aware of the
--- current locale encoding. Technical: it's the value of
@@ -272,8 +267,7 @@ vim.v.fcs_choice = ...
vim.v.fcs_reason = ...
--- When evaluating 'includeexpr': the file name that was
--- detected. When evaluating 'findexpr': the argument passed to
--- the `:find` command. Empty otherwise.
--- detected. Empty otherwise.
--- @type string
vim.v.fname = ...