docs: api, messages, lsp, trust

gen_vimdoc.lua: In prepare for the upcoming release, comment-out the
"Experimental" warning for prerelease features.
This commit is contained in:
Justin M. Keyes
2026-02-12 14:16:47 +01:00
parent 4aeeaa8027
commit b8a976afda
47 changed files with 614 additions and 492 deletions

View File

@@ -55,13 +55,26 @@ Developer guidelines
Pull requests (PRs)
---------------------
- Fork the repository first.
- To avoid duplicate work, create a draft pull request.
### Guidelines
- Don't ask to be assigned to an issue, just send a (reasonably complete) PR and
mark it as Draft until it is ready for review.
- Your PR must include [test coverage][run-tests].
- Avoid cosmetic changes to unrelated files in the same commit.
- Use a [feature branch][git-feature-branch] instead of the master branch.
- Use a _rebase workflow_ for all PRs.
- After addressing review comments, it's fine to force-push.
- Use a _rebase workflow_. After addressing review comments, it's fine to force-push.
### AI-assisted work
Using AI for contributions is acceptable, given the following:
- YOU review the output before sending a non-Draft PR. Do NOT request review
until YOU have checked the AI generated PR and verify the following:
- REMOVE verbosity and blathering from documentation, comments, PR description,
commit message, etc. All resources, including names, should be CONCISE and
CLEAR. They should contain USEFUL information and nothing more.
- REMOVE and DEDUPLICATE redundant code, tests, explanations, etc. Explicitness
and clarity are GOOD but verbosity, over-explanation, and redundancy is BAD.
### Merging to master
@@ -74,16 +87,22 @@ For maintainers: when a PR is ready to merge to master,
Pull requests have two stages: Draft and Ready for review.
1. [Create a Draft PR][pr-draft] while you are _not_ requesting feedback as
you are still working on the PR.
- You can skip this if your PR is ready for review.
2. [Change your PR to ready][pr-ready] when the PR is ready for review.
1. [Create a Draft PR][pr-draft] while you are _not_ requesting feedback and
still working on the PR.
2. [Change your PR to Ready][pr-ready] when the PR is ready for review.
- You can convert back to Draft at any time.
Do __not__ add labels like `[RFC]` or `[WIP]` in the title to indicate the
state of your PR: this just adds noise. Non-Draft PRs are assumed to be open
for comments; if you want feedback from specific people, `@`-mention them in
a comment.
state of your PR: this just adds noise.
### PR description
For bugfixes, your PR title should be essentially the same as (1) the
"Problem" statement and (2) the test-case name. For example [PR #38048](https://github.com/neovim/neovim/pull/38048):
- Title: `fix(lua): extra CR (\r) in nvim -l output`
- Problem: `nvim -l prints an extra \r to stdout: ...`
- Test name: `it('outputs the EOF as LF (not CRLF) #36853' ...`
### Commit messages
@@ -291,24 +310,6 @@ If you need to modify or debug the documentation flow, these are the main files:
Use [LuaLS] annotations in Lua docstrings to annotate parameter types, return
types, etc. See [:help dev-lua-doc][dev-lua-doc].
- The template for function documentation is:
```lua
--- {Brief}
---
--- {Long explanation}
---
--- @param arg1 type {description}
--- @param arg2 type {description}
--- ...
---
--- @return type {description}
```
- If possible, add type information (`table`, `string`, `number`, ...). Multiple valid types are separated by a bar (`string|table`). Indicate optional parameters via `type|nil`.
- If a function in your Lua module should _not_ be documented, add `@nodoc`.
- If the function is internal or otherwise non-public add `@private`.
- Private functions usually should be underscore-prefixed (named "_foo", not "foo"). Prefixing with an underscore implies `@nodoc`.
- Mark deprecated functions with `@deprecated`.
Third-party dependencies
------------------------
@@ -350,10 +351,8 @@ as context, use the `-W` argument as well.
[549]: https://github.com/neovim/neovim/issues/549
[1820]: https://github.com/neovim/neovim/pull/1820
[3174]: https://github.com/neovim/neovim/issues/3174
[ASan]: http://clang.llvm.org/docs/AddressSanitizer.html
[Cirrus CI]: https://cirrus-ci.com/github/neovim/neovim
[Clang report]: https://neovim.io/doc/reports/clang/
[GitHub Actions]: https://github.com/neovim/neovim/actions
[Vim]: https://github.com/vim/vim
[clangd]: https://clangd.llvm.org

View File

@@ -192,15 +192,20 @@ The externally maintained libraries used by Neovim are:
- Lua: MIT license
- LuaJIT: a Just-In-Time Compiler for Lua. Copyright Mike Pall. MIT license.
- Luv: Apache 2.0 license
- gettext
- libiconv
- libmpack: MIT license
- libtermkey: MIT license
- libuv. Copyright Joyent, Inc. and other Node contributors. Node.js license.
- libvterm: MIT license
- lua-bitop: MIT license
- lua-cjson: MIT license
- lua-compat: MIT license
- lua-inspect: MIT license
- lua-lpeg: MIT license
- tree-sitter: MIT license
- unibilium: LGPL v3
- xdiff: LGPL v2
- (Deprecated) unibilium: LGPL v3
====

View File

@@ -113,8 +113,13 @@ Exceptions to this policy may be made (for experimental subsystems or when
there is broad consensus among maintainers). The rationale for the exception
should be stated explicitly and publicly.
Third-party dependencies
------------------------
Dependencies
------------
### Third-party dependencies
(Note: keep this in sync with the "external" section of `LICENSE.txt`).
(TODO: declare deps in `sbom.json`, CycloneDX SBOM format).
"Bundled" dependencies can be updated by bumping their versions in `cmake.deps/deps.txt`.
Some can be auto-bumped by `scripts/bump_deps.lua`.
@@ -138,7 +143,8 @@ Some can be auto-bumped by `scripts/bump_deps.lua`.
### Vendored dependencies
These dependencies are "vendored" (inlined), we must update the sources manually:
"Vendored" (inlined) dependencies are part of the repo tree and we must update
the sources manually:
* `src/mpack/`: [libmpack](https://github.com/libmpack/libmpack)
* send improvements upstream!
@@ -162,7 +168,7 @@ These dependencies are "vendored" (inlined), we must update the sources manually
* `src/bit.c`: only for PUC lua: port of `require'bit'` from luajit https://bitop.luajit.org/
* `runtime/lua/coxpcall.lua`: coxpcall (only needed for PUC lua, builtin to luajit)
Other dependencies
Operational dependencies
--------------------------
* GitHub users:
@@ -178,7 +184,7 @@ Other dependencies
* neovim.io
* packspec.org
* pkgjson.org
* DNS for the above domains is managed in https://cloudflare.com (not the domain registrar)
* The above domains are registered and managed in https://cloudflare.com
Refactoring

View File

@@ -1694,8 +1694,6 @@ nvim__complete_set({index}, {opts}) *nvim__complete_set()*
• bufnr: (number) buffer id in floating window
nvim__exec_lua_fast({code}, {args}) *nvim__exec_lua_fast()*
WARNING: This feature is experimental/unstable.
EXPERIMENTAL: this API may change or be removed in the future.
Like |nvim_exec_lua()|, but can be called during |api-fast| contexts.
@@ -1709,6 +1707,7 @@ nvim__exec_lua_fast({code}, {args}) *nvim__exec_lua_fast()*
Attributes: ~
|api-fast|
|RPC| only
Since: 0.12.0
Parameters: ~
• {code} (`string`) Lua code to execute
@@ -3704,8 +3703,6 @@ nvim_ui_pum_set_height({height}) *nvim_ui_pum_set_height()*
• {height} (`integer`) Popupmenu height, must be greater than zero.
nvim_ui_send({content}) *nvim_ui_send()*
WARNING: This feature is experimental/unstable.
Sends arbitrary data to a UI. Use this instead of |nvim_chan_send()| or
`io.stdout:write()`, if you really want to write to the |TUI| host
terminal.
@@ -3714,6 +3711,9 @@ nvim_ui_send({content}) *nvim_ui_send()*
UIs are expected to write the received data to a connected TTY if one
exists.
Attributes: ~
Since: 0.12.0
Parameters: ~
• {content} (`string`) Content to write to the TTY
@@ -3768,28 +3768,23 @@ nvim_ui_try_resize_grid({grid}, {width}, {height})
Win_config Functions *api-win_config*
nvim_open_win({buffer}, {enter}, {config}) *nvim_open_win()*
Opens a new split window, or a floating window if `relative` is specified,
or an external window (managed by the UI) if `external` is specified.
Floats are windows that are drawn above the split layout, at some anchor
position in some other window. Floats can be drawn internally or by
external GUI with the |ui-multigrid| extension. External windows are only
supported with multigrid GUIs, and are displayed as separate top-level
windows.
For a general overview of floats, see |api-floatwin|.
The `width` and `height` of the new window must be specified when opening
a floating window, but are optional for normal windows.
If `relative` and `external` are omitted, a normal "split" window is
created. The `win` property determines which window will be split. If no
`win` is provided or `win == 0`, a window will be created adjacent to the
current window. If -1 is provided, a top-level split will be created.
`vertical` and `split` are only valid for normal windows, and are used to
control split direction. For `vertical`, the exact direction is determined
by 'splitright' and 'splitbelow'. Split windows cannot have `bufpos`,
`row`, `col`, `border`, `title`, `footer` properties.
Opens a new split window, floating window, or external window.
• Specify `relative` to create a floating window. Floats are drawn over
the split layout, relative to a position in some other window. See
|api-floatwin|.
• Floats must specify `width` and `height`.
• Specify `external` to create an external window. External windows are
displayed as separate top-level windows managed by the |ui-multigrid| UI
(not Nvim).
• If `relative` and `external` are omitted, a normal "split" window is
created.
• The `win` key decides which window to split. If nil or 0, the split
will be adjacent to the current window. If -1, a top-level split will
be created.
• Use `vertical` and `split` to control split direction. For `vertical`,
the exact direction is determined by 'splitright' and 'splitbelow'.
• Split windows cannot have `bufpos`, `row`, `col`, `border`, `title`,
`footer`.
With relative=editor (row=0,col=0) refers to the top-left corner of the
screen-grid and (row=Lines-1,col=Columns-1) refers to the bottom-right
@@ -3961,10 +3956,11 @@ nvim_win_get_config({window}) *nvim_win_get_config()*
see |nvim_open_win()|
nvim_win_set_config({window}, {config}) *nvim_win_set_config()*
Reconfigures the layout of a window.
Absent (`nil`) keys will not be changed.
• `row` / `col` / `relative` must be reconfigured together.
Cannot be used to move the last window in a tabpage to a different one.
Reconfigures the layout and properties of a window.
Updates only the given keys; unspecified (`nil`) keys will not be
changed.
Keys `row` / `col` / `relative` must be specified together.
• Cannot move the last window in a tabpage to a different one.
Example: to convert a floating window to a "normal" split window, specify
the `win` field: >lua

View File

@@ -247,7 +247,11 @@ Docstring format:
"stable". If `<api-level>` is greater than the current stable release (or
0), it is marked as "experimental".
- See scripts/util.lua for the mapping of api-level to Nvim version.
- Use `@deprecated` to mark deprecated functions.
- Use `@nodoc` to prevent documentation generation.
- Use `@private` if the function is internal or otherwise non-public.
- Naming a function with an underscore prefix ("_foo", not "foo") implies
`@nodoc` and `@private`.
- Use `@inlinedoc` to inline `@class` blocks into `@param` blocks.
E.g. >lua
--- Object with fields:
@@ -342,7 +346,7 @@ preference):
*dev-patterns*
Interface conventions ~
Where possible, these patterns apply to _both_ Lua and the API:
Where applicable, these patterns apply to _both_ Lua and the API:
- When accepting a buffer id, etc., 0 means "current buffer", nil means "all
buffers". Likewise for window id, tabpage id, etc.
@@ -379,6 +383,12 @@ Where possible, these patterns apply to _both_ Lua and the API:
appropriate): when the function returns a nil value it excludes (filters
out) its input, else the transformed value is used.
- Example: See the format() field of |vim.diagnostic.Opts.Float|.
- Do not add "foreach" functions (e.g. |LanguageTree:for_each_tree()|).
Instead return an |iterable|, which is more flexible and composable: >
vim.iter(parser.tree_iter()):each(function()
...
end)
<
API DESIGN GUIDELINES *dev-api*

View File

@@ -345,6 +345,10 @@ Writing tests *dev-write-test*
GUIDELINES
- CI runs tests in parallel via the `functionaltest-parallel` cmake target.
- The Nvim test instance CWD is isolated to per "test group" (see
`WORKING_DIRECTORY` in `cmake/RunTests.cmake`), so tests can write files to
CWD without interferring with other tests running in parallel.
- Luajit needs to know about type and constant declarations used in function
prototypes. The
[testutil.lua](https://github.com/neovim/neovim/blob/master/test/unit/testutil.lua)

View File

@@ -1715,17 +1715,22 @@ mark a file as trusted or untrusted using the |:trust| command or the
:trust [++deny] [++remove] [file]
Manage trusted files. Without ++ options, :trust marks
[file] (or current buffer if no [file]) as trusted,
keyed on a hash of its contents. The trust list is
stored on disk, Nvim will re-use it after restarting.
the current buffer (or [file], but see WARNING below)
as trusted, keyed on a hash of its contents. The trust
list is stored on disk, Nvim will re-use it after
restarting.
[++deny] marks [file] (or current buffer if no [file])
as untrusted: it will never be executed, 'exrc' will
WARNING: `:trust [file]` has a TOCTOU risk, so for
security you should view the file, inspect its
contents, and run `:trust` (without [file] arg).
[++deny] marks the current buffer or [file] as
untrusted: it will never be executed, 'exrc' will
ignore it.
[++remove] removes [file] (or current buffer if no
[file]) from the trust list. When the file is
discovered by 'exrc' or |vim.secure.read()|, the user
will be asked whether to trust or deny the file.
[++remove] removes the current buffer or [file] from
the trust list. When the file is discovered by 'exrc'
or |vim.secure.read()|, the user will be prompted to
trust or deny it.
vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -64,8 +64,6 @@ Stop or detach the current UI
the channel to be closed, it may be (incorrectly) reported as
an error.
Note: Not supported on Windows yet.
------------------------------------------------------------------------------
Restart Nvim
@@ -327,26 +325,26 @@ configure which ones appear with the 'guioptions' option.
The interface looks like this (with `:set guioptions=mlrb`):
>
+------------------------------+ `
| File Edit Help | <- Menu bar (m) `
+-+--------------------------+-+ `
|^| |^| `
|#| Text area. |#| `
| | | | `
|v|__________________________|v| `
Normal status line -> |-+ File.c 5,2 +-| `
between Vim windows |^|""""""""""""""""""""""""""|^| `
| | | | `
| | Another file buffer. | | `
| | | | `
|#| |#| `
Left scrollbar (l) -> |#| |#| <- Right `
|#| |#| scrollbar (r) `
| | | | `
|v| |v| `
+-+--------------------------+-+ `
| |< #### >| | <- Bottom `
+-+--------------------------+-+ scrollbar (b) `
+------------------------------+
| File Edit Help | <- Menu bar (m)
+-+--------------------------+-+
|^| |^|
|#| Text area. |#|
| | | |
|v|__________________________|v|
Normal status line -> |-+ File.c 5,2 +-|
between Vim windows |^|""""""""""""""""""""""""""|^|
| | | |
| | Another file buffer. | |
| | | |
|#| |#|
Left scrollbar (l) -> |#| |#| <- Right
|#| |#| scrollbar (r)
| | | |
|v| |v|
+-+--------------------------+-+
| |< #### >| | <- Bottom
+-+--------------------------+-+ scrollbar (b)
<
Any of the scrollbar or menu components may be turned off by not putting the
appropriate letter in the 'guioptions' string. The bottom scrollbar is

View File

@@ -56,10 +56,9 @@ Follow these steps to get LSP features:
a |lsp-root_markers| file so the workspace can be recognized.
5. Check that LSP is active ("attached") for the buffer: >vim
:checkhealth vim.lsp
6. Please note that certain LSP features are disabled by default,
you may choose to enable them manually. See:
6. Note: some LSP features are disabled by default, you can enable them
manually:
- |lsp-codelens|
- |lsp-document_color|
- |lsp-linked_editing_range|
- |lsp-inlay_hint|
- |lsp-inline_completion|
@@ -85,8 +84,15 @@ These GLOBAL keymaps are created unconditionally when Nvim starts:
- "grt" is mapped to |vim.lsp.buf.type_definition()|
- "gO" is mapped to |vim.lsp.buf.document_symbol()|
- CTRL-S (Insert mode) is mapped to |vim.lsp.buf.signature_help()|
- |v_an| and |v_in| fall back to |vim.lsp.buf.selection_range()| when
buffer has no treesitter parser
- |v_an| and |v_in| fall back to LSP |vim.lsp.buf.selection_range()| if
treesitter is not active.
- |gx| handles `textDocument/documentLink`. Example: with gopls, invoking gx
on "os" in this Go code will open documentation externally: >
package nvim
import (
"os"
)
<
BUFFER-LOCAL DEFAULTS
@@ -1575,12 +1581,8 @@ Lua module: vim.lsp.client *lsp-client*
|vim.lsp.ClientConfig|.
• {dynamic_capabilities} (`lsp.DynamicCapabilities`) Capabilities
provided at runtime (after startup).
• {exit_timeout} (`integer|boolean`, default: `false`)
Milliseconds to wait for server to exit
cleanly after sending the "shutdown" request
before sending kill -15. If set to false,
waits indefinitely. If set to true, nvim will
kill the server immediately.
• {exit_timeout} (`integer|boolean`, default: `false`) See
|vim.lsp.ClientConfig|.
• {flags} (`table`) Experimental client flags:
• {allow_incremental_sync}? (`boolean`,
default: `true`) Allow using incremental
@@ -1701,12 +1703,17 @@ Lua module: vim.lsp.client *lsp-client*
process on exit, but if Nvim fails to exit
cleanly this could leave behind orphaned server
processes.
• {exit_timeout}? (`integer|boolean`, default: `false`)
Milliseconds to wait for server to exit cleanly
after sending the "shutdown" request before
sending kill -15. If set to false, waits
indefinitely. If set to true, nvim will kill
the server immediately.
• {exit_timeout}? (`integer|boolean`, default: `false`) Decides
if/when to force-stop the server after sending
the "shutdown" request. See |Client:stop()|.
Note: when Nvim itself is exiting,
• `false`: Nvim will not force-stop LSP
server(s).
• `true`: Nvim will force-stop LSP server(s)
that did not comply with the "shutdown"
request.
• `number`: Nvim will wait up to `exit_timeout`
milliseconds before performing force-stop.
• {flags}? (`table`) Experimental client flags:
• {allow_incremental_sync}? (`boolean`,
default: `true`) Allow using incremental sync
@@ -1877,20 +1884,24 @@ Client:request_sync({method}, {params}, {timeout_ms}, {bufnr})
Client:stop({force}) *Client:stop()*
Stops a client, optionally with force after a timeout.
By default, it will request the server to shutdown, then force a shutdown
if the server has not exited after `self.exit_timeout` milliseconds. If
you request to stop a client which has previously been requested to
shutdown, it will automatically escalate and force shutdown immediately,
regardless of the value of `force` (or `self.exit_timeout` if `nil`).
By default this sends a "shutdown" request to the server, escalating to
force-stop if the server has not exited after `self.exit_timeout`
milliseconds (unless `exit_timeout=false`). Calling stop() on a client
that was previously requested to shutdown, will escalate to force-stop
immediately, regardless of `force` (or `self.exit_timeout` if
`force=nil`).
Note: Forcing shutdown while a server is busy writing out project or index
files can lead to file corruption.
Parameters: ~
• {force} (`integer|boolean?`, default: `self.exit_timeout`) Time in
milliseconds to wait before forcing a shutdown. If false,
only request the server to shutdown, but don't force it. If
true, force a shutdown immediately.
• {force} (`integer|boolean?`) (default: `self.exit_timeout`) Decides
whether to force-stop the server.
• `nil`: Defaults to `exit_timeout` from
|vim.lsp.ClientConfig|.
• `true`: Force-stop after "shutdown" request.
• `false`: Do not force-stop after "shutdown" request.
• number: Wait up to `force` milliseconds before force-stop.
Client:supports_method({method}, {bufnr}) *Client:supports_method()*
Checks if a client supports a given method. Always returns true for
@@ -1974,7 +1985,7 @@ activate "auto-completion" when you type any of the server-defined
|complete_CTRL-Y|
Example: activate LSP-driven auto-completion: >lua
-- Works best with completeopt=noselect.
-- Works best if 'completeopt' has "noselect".
-- Use CTRL-Y to select an item. |complete_CTRL-Y|
vim.cmd[[set completeopt+=menuone,noselect,popup]]
vim.lsp.start({
@@ -2007,13 +2018,15 @@ enable({enable}, {client_id}, {bufnr}, {opts})
Enables or disables completions from the given language client in the
given buffer. Effects of enabling completions are:
• Calling |vim.lsp.completion.get()| uses the enabled clients to retrieve
completion candidates
Accepting a completion candidate using `<c-y>` applies side effects like
completion candidates.
Selecting a completion item shows a preview popup
("completionItem/resolve") if 'completeopt' has "popup".
• Accepting a completion item using `<c-y>` applies side effects like
expanding snippets, text edits (e.g. insert import statements) and
executing associated commands. This works for completions triggered via
autotrigger, omnifunc or completion.get()
autotrigger, 'omnifunc' or |vim.lsp.completion.get()|.
Example: |lsp-attach| |lsp-completion|
Examples: |lsp-attach| |lsp-completion|
Note: the behavior of `autotrigger=true` is controlled by the LSP
`triggerCharacters` field. You can override it on LspAttach, see

View File

@@ -1767,8 +1767,8 @@ vim.islist({t}) *vim.islist()*
• |vim.isarray()|
vim.list.bisect({t}, {val}, {opts}) *vim.list.bisect()*
Search for a position in a sorted list {t} where {val} can be inserted
while keeping the list sorted.
Search for a position in a sorted |lua-list| {t} where {val} can be
inserted while keeping the list sorted.
Use {bound} to determine whether to return the first or the last position,
defaults to "lower", i.e., the first position.
@@ -1799,6 +1799,9 @@ vim.list.bisect({t}, {val}, {opts}) *vim.list.bisect()*
end
<
Attributes: ~
Since: 0.12.0
Parameters: ~
• {t} (`any[]`) A comparable list.
• {val} (`any`) The value to search.
@@ -1820,7 +1823,7 @@ vim.list.bisect({t}, {val}, {opts}) *vim.list.bisect()*
position.
vim.list.unique({t}, {key}) *vim.list.unique()*
Removes duplicate values from a list-like table in-place.
Removes duplicate values from a |lua-list| in-place.
Only the first occurrence of each value is kept. The operation is
performed in-place and the input table is modified.
@@ -1842,6 +1845,9 @@ vim.list.unique({t}, {key}) *vim.list.unique()*
-- t is now { {id=1}, {id=2} }
<
Attributes: ~
Since: 0.12.0
Parameters: ~
• {t} (`any[]`)
• {key} (`fun(x: T): any?`) Optional hash function to determine
@@ -2943,6 +2949,9 @@ Examples: >lua
Iter:all({pred}) *Iter:all()*
Returns true if all items in the iterator match the given predicate.
Attributes: ~
Since: 0.10.0
Parameters: ~
• {pred} (`fun(...):boolean`) Predicate function. Takes all values
returned from the previous stage in the pipeline as arguments
@@ -2952,6 +2961,9 @@ Iter:any({pred}) *Iter:any()*
Returns true if any of the items in the iterator match the given
predicate.
Attributes: ~
Since: 0.10.0
Parameters: ~
• {pred} (`fun(...):boolean`) Predicate function. Takes all values
returned from the previous stage in the pipeline as arguments
@@ -2964,6 +2976,9 @@ Iter:each({f}) *Iter:each()*
For functions with side effects. To modify the values in the iterator, use
|Iter:map()|.
Attributes: ~
Since: 0.10.0
Parameters: ~
• {f} (`fun(...)`) Function to execute for each item in the pipeline.
Takes all of the values returned by the previous stage in the
@@ -2992,6 +3007,9 @@ Iter:enumerate() *Iter:enumerate()*
-- 3 'c'
<
Attributes: ~
Since: 0.10.0
Return: ~
(`Iter`)
@@ -3031,6 +3049,9 @@ Iter:find({f}) *Iter:find()*
-- 12
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {f} (`any`)
@@ -3052,6 +3073,9 @@ Iter:flatten({depth}) *Iter:flatten()*
-- error: attempt to flatten a dict-like table
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {depth} (`number?`) Depth to which |list-iterator| should be
flattened (defaults to 1)
@@ -3079,6 +3103,9 @@ Iter:fold({init}, {f}) *Iter:fold()*
end) --> { max = 42 }
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {init} (`any`) Initial value of the accumulator.
• {f} (`fun(acc:A, ...):A`) Accumulation function.
@@ -3093,6 +3120,9 @@ Iter:join({delim}) *Iter:join()*
Consumes the iterator.
Attributes: ~
Since: 0.10.0
Parameters: ~
• {delim} (`string`) Delimiter
@@ -3113,6 +3143,9 @@ Iter:last() *Iter:last()*
-- 15
<
Attributes: ~
Since: 0.10.0
Return: ~
(`any`)
@@ -3134,6 +3167,9 @@ Iter:map({f}) *Iter:map()*
-- { 6, 12 }
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {f} (`fun(...):...:any`) Mapping function. Takes all values returned
from the previous stage in the pipeline as arguments and returns
@@ -3157,6 +3193,9 @@ Iter:next() *Iter:next()*
-- 3
<
Attributes: ~
Since: 0.10.0
Return: ~
(`any`)
@@ -3179,6 +3218,9 @@ Iter:nth({n}) *Iter:nth()*
-- 3
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {n} (`number`) Index of the value to return. May be negative if the
source is a |list-iterator|.
@@ -3203,6 +3245,9 @@ Iter:peek() *Iter:peek()*
-- 3
<
Attributes: ~
Since: 0.10.0
Return: ~
(`any`)
@@ -3218,6 +3263,9 @@ Iter:pop() *Iter:pop()*
-- 3
<
Attributes: ~
Since: 0.10.0
Return: ~
(`any`)
@@ -3231,6 +3279,9 @@ Iter:rev() *Iter:rev()*
-- { 12, 9, 6, 3 }
<
Attributes: ~
Since: 0.10.0
Return: ~
(`Iter`)
@@ -3250,6 +3301,9 @@ Iter:rfind({f}) *Iter:rfind()*
-- 1 1
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {f} (`any`)
@@ -3272,6 +3326,9 @@ Iter:rpeek() *Iter:rpeek()*
-- 4
<
Attributes: ~
Since: 0.10.0
Return: ~
(`any`)
@@ -3289,6 +3346,9 @@ Iter:rskip({n}) *Iter:rskip()*
-- 3
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {n} (`number`) Number of values to skip.
@@ -3315,6 +3375,9 @@ Iter:skip({n}) *Iter:skip()*
-- 12
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {n} (`integer|fun(...):boolean`) Number of values to skip or a
predicate.
@@ -3327,6 +3390,9 @@ Iter:slice({first}, {last}) *Iter:slice()*
Equivalent to `:skip(first - 1):rskip(len - last + 1)`.
Attributes: ~
Since: 0.10.0
Parameters: ~
• {first} (`number`)
• {last} (`number`)
@@ -3355,6 +3421,9 @@ Iter:take({n}) *Iter:take()*
-- nil
<
Attributes: ~
Since: 0.10.0
Parameters: ~
• {n} (`integer|fun(...):boolean`) Number of values to take or a
predicate.
@@ -3385,6 +3454,9 @@ Iter:totable() *Iter:totable()*
indices. To create a map-like table with arbitrary keys, use
|Iter:fold()|.
Attributes: ~
Since: 0.10.0
Return: ~
(`table`)
@@ -3415,6 +3487,9 @@ Iter:unique({key}) *Iter:unique()*
-- { {id=1}, {id=2} }
<
Attributes: ~
Since: 0.12.0
Parameters: ~
• {key} (`fun(...):any?`) Optional hash function to determine
uniqueness of values.
@@ -4476,10 +4551,11 @@ vim.secure.trust({opts}) *vim.secure.trust()*
Parameters: ~
• {opts} (`table`) A table with the following fields:
• {action} (`'allow'|'deny'|'remove'`) - `'allow'` to add a
file to the trust database and trust it,
• `'deny'` to add a file to the trust database and deny it,
• `'remove'` to remove file from the trust database
• {action} (`'allow'|'deny'|'remove'`) One of:
• `'allow'` to add a file to the trust database and trust
it,
• `'deny'` to add a file to the trust database and deny it,
• `'remove'` to remove file from the trust database
• {path}? (`string`) Path to a file to update. Mutually
exclusive with {bufnr}.
• {bufnr}? (`integer`) Buffer number to update. Mutually
@@ -5188,10 +5264,11 @@ vim.version.gt({v1}, {v2}) *vim.version.gt()*
(`boolean`)
vim.version.intersect({r1}, {r2}) *vim.version.intersect()*
WARNING: This feature is experimental/unstable.
Computes the common range shared by the given ranges.
Attributes: ~
Since: 0.12.0
Parameters: ~
• {r1} (`vim.VersionRange`) First range to intersect. See
|vim.VersionRange|.
@@ -5288,7 +5365,7 @@ To enable the experimental UI (default opts shown): >lua
---@type 'cmd'|'msg' Default message target, either in the
---cmdline or in a separate ephemeral message window.
---@type string|table<string, 'cmd'|'msg'|'pager'> Default message target
or table mapping |ui-messages| kinds and triggers to a target.
---or table mapping |ui-messages| kinds and triggers to a target.
targets = 'cmd',
timeout = 4000, -- Time a message is visible in the message window.
},
@@ -5310,6 +5387,8 @@ options for these windows and their respective buffers.
Rather than a |hit-enter-prompt|, messages shown in the cmdline area that do
not fit are appended with a `[+x]` "spill" indicator, where `x` indicates the
spilled lines. To see the full message, the |g<| command can be used.
spilled lines. To see the full message, use either:
• ENTER immediately after a message from interactive |:| cmdline.
• |g<| at any time.
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl:

View File

@@ -11,7 +11,7 @@ means. It is not complete though.
Type |gO| to see the table of contents.
==============================================================================
1. Old messages *:messages* *:mes* *message-history*
Messages history *:messages* *:mes* *message-history*
The ":messages" command can be used to view previously given messages. This
is especially useful when messages have been overwritten or truncated. This
@@ -57,7 +57,7 @@ If you are lazy, it also works without the shift key: >
:help e72
==============================================================================
2. Error messages *error-messages* *errors*
Error messages *error-messages* *errors*
When an error message is displayed, but it is removed before you could read
it, you can see it again with: >
@@ -767,78 +767,78 @@ startup.
This can only happen when changing the source code, after adding a command in
src/ex_cmds.lua. Update the lookup table by re-running the build.
*E970* >
*E970* >
Failed to initialize lua interpreter
Failed to initialize builtin lua modules
Nvim failed to initialize the Lua interpreter or its builtin modules during
startup. This is a fatal error that prevents Nvim from running.
*E5107* >
*E5107* >
Lua: {error}
Lua code compilation (loadbuffer) failed when executing |:lua| commands or
functions. {error} contains the Lua syntax or compilation error message.
*E5108* >
*E5108* >
Lua function: {error}
Lua: {error}
Lua code execution (pcall) failed. This can occur when executing |:lua|
commands, during Lua function completion, or in other Lua code execution
contexts. {error} contains the Lua runtime error message and traceback.
Lua code execution (pcall) failed, when executing Lua code or during Lua
function completion. {error} contains the Lua runtime error message and
traceback.
*E5109* >
*E5109* >
Lua: {error}
Lua code compilation (loadbuffer) failed when executing the |:luado| command.
{error} contains the Lua syntax or compilation error message.
Lua code compilation (loadbuffer) failed during |:luado|. {error} contains the
Lua syntax or compilation error message.
*E5110* >
*E5110* >
Lua: {error}
Lua code execution (pcall) failed during |:luado| command initialization.
{error} contains the Lua runtime error message and traceback.
*E5111* >
*E5111* >
Lua: {error}
Lua code execution failed in |:luado| callback or during Lua script loading.
{error} contains the Lua runtime error message and traceback.
*E5112* >
*E5112* >
Lua chunk: {error}
Lua chunk compilation failed. The loadstring() function returned an error
when trying to compile the Lua code. {error} contains the compilation error
message.
*E5113* >
*E5113* >
Lua chunk: {error}
Lua chunk execution failed after successful compilation. {error} contains the
Lua runtime error message and traceback.
*E5114* >
*E5114* >
Converting print argument #{i}: {error}
Failed to convert argument number {i} to a string in the Lua print()
function. {error} contains the conversion error details.
Lua `print()` failed to convert argument number {i} to a string. {error}
contains the conversion error details.
*E5115* >
*E5115* >
Loading Lua debug string: {error}
Failed to load (compile) a Lua debug command string. {error} contains the
compilation error message.
*E5116* >
*E5116* >
Calling Lua debug string: {error}
Failed to execute a Lua debug command string. {error} contains the runtime
error message and traceback.
==============================================================================
3. Messages *messages*
Messages *messages*
This is an (incomplete) overview of various messages that Vim gives:
@@ -935,7 +935,7 @@ This is especially useful if you accidentally typed <Space> at the hit-enter
prompt.
==============================================================================
4. PROGRESS MESSAGE *progress-message*
Progress messages *progress-message*
Plugins and core Nvim features can emit "progress" |ui-messages| to report the
state of long-running tasks.

View File

@@ -150,8 +150,8 @@ API
`max_height` is reached, and returns the `end_row` and `end_vcol` for which
`max_height` or the calculated height is reached.
• |vim.secure.read()| now returns `true` for trusted directories. Previously
it would return `nil`, which made it impossible to tell if the directory was
actually trusted.
it would return `nil`, thus impossible to tell if the directory was actually
trusted.
• Added |vim.lsp.is_enabled()| to check if a given LSP config has been enabled
by |vim.lsp.enable()|.
• |nvim_ui_send()| writes arbitrary data to a UI's stdout. Use this to write
@@ -187,13 +187,13 @@ DEFAULTS
• 'statusline' default is exposed as a statusline expression (previously it
was implemented as an internal C routine).
• 'statusline' includes |vim.diagnostic.status()|
• 'statusline' shows exit code of finished terminal buffers
• Project-local configuration ('exrc') is also loaded from parent directories.
Unset 'exrc' to stop further search.
• Mappings:
• |grt| in Normal mode maps to |vim.lsp.buf.type_definition()|
• 'shada' default now excludes "/tmp/" and "/private/" paths to reduce clutter in |:oldfiles|.
• Enabled treesitter highlighting for Markdown files
• 'statusline' shows exit code of finished terminal buffers
DIAGNOSTICS
@@ -220,8 +220,8 @@ EDITOR
commands.
• 'wildchar' now enables completion in search contexts using |/|, |?|, |:g|, |:v|
and |:vimgrep| commands.
• For security, 'exrc' no longer shows an "(a)llow" choice. Instead you must
"(v)iew" then run `:trust`.
• For security, 'exrc' no longer shows "(a)llow". Instead you must "(v)iew",
then run `:trust` (or `:trust [file]`, but that has a TOCTOU risk).
• |gx| in help buffers opens the online documentation for the tag under the
cursor.
• |:source| with a range in non-Lua files (e.g., vimdoc) now detects Lua
@@ -303,7 +303,10 @@ LSP
to a top-level field. Defaults to `false`.
• |Client:stop()| accepts `force` as an integer, which is treated as the time
to wait before before stop escalates to force-stop.
Add cmp field to opts of |vim.lsp.completion.enable()| for custom completion ordering.
|lsp-completion|:
• |vim.lsp.completion.enable()| gained a `cmp` option for custom ordering.
• Supports colored symbol preview for color items.
• Shows a preview ("completionItem/resolve") if 'completeopt' has "popup".
• Support for `workspace/diagnostic/refresh`:
https://microsoft.github.io/language-server-protocol/specification/#diagnostic_refresh
• Support for dynamic registration for `textDocument/diagnostic`
@@ -315,8 +318,7 @@ LSP
• Code lenses now display as virtual lines
• Support for `workspace/codeLens/refresh`:
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeLens_refresh
`gx` will use `textDocument/documentLink` if available.
• |vim.lsp.completion.enable()| adds colored symbol preview for color items.
|gx| opens `textDocument/documentLink` items found at cursor.
LUA
@@ -394,7 +396,7 @@ PLUGINS
STARTUP
todo
|v:argf| provides file arguments given at startup.
TERMINAL
@@ -403,6 +405,8 @@ TERMINAL
• CSI 3 J (the sequence to clear terminal scrollback) is now supported.
• A suspended PTY process is now indicated by "[Process suspended]" at the
bottom-left of the buffer and can be resumed by pressing a key.
• On terminal exit, "[Process exited]" is shown as virtual text (instead of
modifying buffer contents), and exit code is shown in statusline.
TREESITTER
@@ -473,8 +477,6 @@ These existing features changed their behavior.
for input and output. This matters mostly for Linux where some command lines
using "/dev/stdin" and similiar would break as these special files can be
reopened when backed by pipes but not when backed by socket pairs.
• On terminal exit, "[Process exited]" is not added to the buffer contents,
instead it is shown as virtual text and exit code is shown in statusline.
==============================================================================
REMOVED FEATURES *news-removed*

View File

@@ -3343,14 +3343,15 @@ A jump table for the options with a short description can be found at |Q_op|.
Examples of cursor highlighting: >vim
highlight Cursor gui=reverse guifg=NONE guibg=NONE
" Note: gui=reverse overrides colors.
highlight Cursor gui=NONE guifg=bg guibg=fg
<
*'guifont'* *'gfn'* *E235* *E596*
'guifont' 'gfn' string (default (MS-Windows) "Cascadia Code,Cascadia Mono,Consolas,Courier New,monospace"
(Mac) "SF Mono,Menlo,Monaco,Courier New,monospace"
(Linux) "Source Code Pro,DejaVu Sans Mono,Courier New,monospace"
(others) "DejaVu Sans Mono,Courier New,monospace")
'guifont' 'gfn' string (default "DejaVu Sans Mono,Courier New,monospace"
Mac: "SF Mono,Menlo,Monaco,Courier New,monospace"
Linux: "Source Code Pro,DejaVu Sans Mono,Courier New,monospace"
MS-Windows: "Cascadia Code,Cascadia Mono,Consolas,Courier New,monospace")
global
This is a list of fonts which will be used for the GUI version of Vim.
In its simplest form the value is just one font name. When

View File

@@ -528,10 +528,10 @@ update({names}, {opts}) *vim.pack.update()*
updates. Default: `false`.
• {target}? (`string`) How to compute a new plugin revision.
One of:
• "version" (default) - use latest revision matching
• "version" (default): use latest revision matching
`version` from plugin specification.
• "lockfile" - use revision from the lockfile. Useful for
reverting or performing controlled update.
• "lockfile": use revision from the lockfile. For reverting
or performing controlled update.
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl:

View File

@@ -548,7 +548,6 @@ When multiple captures set this metadata over a region, only the innermost
==============================================================================
TREESITTER LANGUAGE INJECTIONS *treesitter-language-injections*
<
Note the following information is adapted from:
https://tree-sitter.github.io/tree-sitter/3-syntax-highlighting.html#language-injection
@@ -1604,10 +1603,8 @@ edit({lang}) *vim.treesitter.query.edit()*
If you move the cursor to a capture name ("@foo"), text matching the
capture is highlighted with |hl-DiagnosticVirtualTextHint| in the source
buffer.
The query editor is a scratch buffer, use `:write` to save it. You can
find example queries at `$VIMRUNTIME/queries/`.
buffer. The query editor is a scratch buffer, use `:write` to save it. You
can find example queries at `$VIMRUNTIME/queries/`.
Parameters: ~
• {lang} (`string?`) language to open the query editor for. If omitted,

View File

@@ -101,9 +101,11 @@ g8 Print the hex values of the bytes used in the
command won't move the cursor.
*gx*
gx Opens the current filepath or URL (decided by
|<cfile>|, 'isfname') at cursor using the system
default handler. Mapped to |vim.ui.open()|.
gx Opens the current filepath, URL (decided by
|<cfile>|, 'isfname'), or |LSP| "documentLink" at
cursor using the system default handler.
Mapped to |vim.ui.open()|.
*v_gx*
{Visual}gx Opens the selected text using the system default

View File

@@ -13,24 +13,25 @@ be mentioned at the variable description below. The type cannot be changed.
*v:argf* *argf-variable*
v:argf
The list of file arguments passed on the command line at startup.
Each filename is expanded to an absolute path, so that v:argf
remains valid even if the current working directory changes later.
File arguments (expanded to absolute paths) given at startup.
Unlike |v:argv|, this does not include option arguments
such as `-u`, `--cmd`, or `+cmd`. Unlike |argv()|, it is not
affected by later |:args|, |:argadd|, or plugin modifications.
It also handles the `--` separator correctly, including only
files specified after it.
This is a read-only snapshot of the original startup file arguments.
Example: >
nvim file1.txt +ls -- file2.txt
:echo v:argf
" ['/path/to/cwd/file1.txt', '/path/to/cwd/file2.txt']
<
*v:argv* *argv-variable*
v:argv
The command line arguments Vim was invoked with. This is a
list of strings. The first item is the Vim command.
See |v:progpath| for the command with full path.
Command line arguments (`-u`, `--cmd`, `+cmd`, …) Nvim was
invoked with. The first item is the Nvim command.
See |v:progpath| to get the full path to Nvim.
See |v:argf| to get only file args, without other options.
*v:char* *char-variable*
v:char

View File

@@ -3,17 +3,18 @@
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
vim.g.mapleader = ' '
-- [[ Setting options ]] See `:h vim.o`
-- OPTIONS
--
-- See `:h vim.o`
-- NOTE: You can change these options as you wish!
-- For more options, you can see `:help option-list`
-- To see documentation for an option, you can use `:h 'optionname'`, for example `:h 'number'`
-- (Note the single quotes)
-- Print the line number in front of each line
vim.o.number = true
vim.o.number = true -- Show line numbers in a column.
-- Use relative line numbers, so that it is easier to jump with j, k. This will affect the 'number'
-- option above, see `:h number_relativenumber`
-- Show line numbers relative to where the cursor is.
-- Affects the 'number' option above, see `:h number_relativenumber`.
vim.o.relativenumber = true
-- Sync clipboard between OS and Neovim. Schedule the setting after `UIEnter` because it can
@@ -29,20 +30,17 @@ vim.api.nvim_create_autocmd('UIEnter', {
vim.o.ignorecase = true
vim.o.smartcase = true
-- Highlight the line where the cursor is on
vim.o.cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.o.scrolloff = 10
-- Show <tab> and trailing spaces
vim.o.list = true
vim.o.cursorline = true -- Highlight the line where the cursor is on.
vim.o.scrolloff = 10 -- Keep this many screen lines above/below the cursor.
vim.o.list = true -- Show <tab> and trailing spaces.
-- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`),
-- instead raise a dialog asking if you wish to save the current file(s) See `:help 'confirm'`
vim.o.confirm = true
-- [[ Set up keymaps ]] See `:h vim.keymap.set()`, `:h mapping`, `:h keycodes`
-- KEYMAPS
--
-- See `:h vim.keymap.set()`, `:h mapping`, `:h keycodes`
-- Use <Esc> to exit terminal mode
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>')
@@ -57,7 +55,8 @@ vim.keymap.set({ 'n' }, '<A-j>', '<C-w>j')
vim.keymap.set({ 'n' }, '<A-k>', '<C-w>k')
vim.keymap.set({ 'n' }, '<A-l>', '<C-w>l')
-- [[ Basic Autocommands ]].
-- AUTOCOMMANDS (EVENT HANDLERS)
--
-- See `:h lua-guide-autocommands`, `:h autocmd`, `:h nvim_create_autocmd()`
-- Highlight when yanking (copying) text.
@@ -69,7 +68,8 @@ vim.api.nvim_create_autocmd('TextYankPost', {
end,
})
-- [[ Create user commands ]]
-- USER COMMANDS: DEFINE CUSTOM COMMANDS
--
-- See `:h nvim_create_user_command()` and `:h user-commands`
-- Create a command `:GitBlameLine` that print the git blame for the current line
@@ -79,15 +79,24 @@ vim.api.nvim_create_user_command('GitBlameLine', function()
print(vim.system({ 'git', 'blame', '-L', line_number .. ',+1', filename }):wait().stdout)
end, { desc = 'Print the git blame for the current line' })
-- [[ Add optional packages ]]
-- Nvim comes bundled with a set of packages that are not enabled by
-- default. You can enable any of them by using the `:packadd` command.
-- PLUGINS
--
-- * Enable optional, builtin plugins via ":packadd".
-- * Install third-party plugins via "vim.pack".
-- For example, to add the "nohlsearch" package to automatically turn off search highlighting after
-- 'updatetime' and when going to insert mode
-- Example: add the "nohlsearch" package to automatically disable search highlighting after
-- 'updatetime' and when going to insert mode.
vim.cmd('packadd! nohlsearch')
-- [[ Install plugins ]]
-- Nvim functionality can be extended by installing external plugins.
-- One way to do it is with a built-in plugin manager. See `:h vim.pack`.
vim.pack.add({ 'https://github.com/neovim/nvim-lspconfig' })
-- Example: Install third-party plugins by calling "vim.pack.add{}".
vim.pack.add({
'https://github.com/neovim/nvim-lspconfig',
-- Fuzzy picker
'https://github.com/ibhagwan/fzf-lua',
-- Autocompletion
'https://github.com/echasnovski/mini.completion',
-- Enhanced quickfix/loclist
'https://github.com/stevearc/quicker.nvim',
-- Git integration
'https://github.com/lewis6991/gitsigns.nvim',
})

View File

@@ -221,12 +221,7 @@ local function get_path(name, sect)
sect = sect or ''
-- We can avoid relying on -S or -s here since they are very
-- inconsistently supported. Instead, call -w with a section and a name.
local cmd --- @type string[]
if sect == '' then
cmd = { 'man', '-w', name }
else
cmd = { 'man', '-w', sect, name }
end
local cmd = sect == '' and { 'man', '-w', name } or { 'man', '-w', sect, name }
local lines = system(cmd, true)
local results = vim.split(lines, '\n', { trimempty = true })

View File

@@ -445,15 +445,15 @@ do
end, { expr = true, desc = 'Add empty line below cursor' })
end
--- incremental treesitter selection mappings (+ lsp fallback)
--- "Incremental selection" mappings (treesitter + LSP fallback).
do
vim.keymap.set({ 'x' }, '[n', function()
require 'vim.treesitter._select'.select_prev(vim.v.count1)
end, { desc = 'Select previous treesitter node' })
end, { desc = 'Select previous node' })
vim.keymap.set({ 'x' }, ']n', function()
require 'vim.treesitter._select'.select_next(vim.v.count1)
end, { desc = 'Select next treesitter node' })
end, { desc = 'Select next node' })
vim.keymap.set({ 'x', 'o' }, 'an', function()
if vim.treesitter.get_parser(nil, nil, { error = false }) then
@@ -461,7 +461,7 @@ do
else
vim.lsp.buf.selection_range(vim.v.count1)
end
end, { desc = 'Select parent treesitter node or outer incremental lsp selections' })
end, { desc = 'Select parent (outer) node' })
vim.keymap.set({ 'x', 'o' }, 'in', function()
if vim.treesitter.get_parser(nil, nil, { error = false }) then
@@ -469,7 +469,7 @@ do
else
vim.lsp.buf.selection_range(-vim.v.count1)
end
end, { desc = 'Select child treesitter node or inner incremental lsp selections' })
end, { desc = 'Select child (inner) node' })
end
end

View File

@@ -360,7 +360,7 @@ local function key_fn(v, key)
return key and key(v) or v
end
--- Removes duplicate values from a list-like table in-place.
--- Removes duplicate values from a |lua-list| in-place.
---
--- Only the first occurrence of each value is kept.
--- The operation is performed in-place and the input table is modified.
@@ -383,6 +383,7 @@ end
--- -- t is now { {id=1}, {id=2} }
--- ```
---
--- @since 14
--- @generic T
--- @param t T[]
--- @param key? fun(x: T): any Optional hash function to determine uniqueness of values
@@ -482,8 +483,8 @@ local function upper_bound(t, val, lo, hi, key)
return lo
end
--- Search for a position in a sorted list {t}
--- where {val} can be inserted while keeping the list sorted.
--- Search for a position in a sorted |lua-list| {t} where {val} can be inserted while keeping the
--- list sorted.
---
--- Use {bound} to determine whether to return the first or the last position,
--- defaults to "lower", i.e., the first position.
@@ -514,6 +515,7 @@ end
--- print(t[i]) -- { 3, 3, 3 }
--- end
--- ```
---@since 14
---@generic T
---@param t T[] A comparable list.
---@param val T The value to search.

View File

@@ -11,7 +11,7 @@
--- ---@type 'cmd'|'msg' Default message target, either in the
--- ---cmdline or in a separate ephemeral message window.
--- ---@type string|table<string, 'cmd'|'msg'|'pager'> Default message target
--- or table mapping |ui-messages| kinds and triggers to a target.
--- ---or table mapping |ui-messages| kinds and triggers to a target.
--- targets = 'cmd',
--- timeout = 4000, -- Time a message is visible in the message window.
--- },
@@ -32,7 +32,9 @@
---
---Rather than a |hit-enter-prompt|, messages shown in the cmdline area that do
---not fit are appended with a `[+x]` "spill" indicator, where `x` indicates the
---spilled lines. To see the full message, the |g<| command can be used.
---spilled lines. To see the full message, use either:
--- - ENTER immediately after a message from interactive |:| cmdline.
--- - |g<| at any time.
local api = vim.api
local M = {

View File

@@ -1703,26 +1703,19 @@ function vim.api.nvim_notify(msg, log_level, opts) end
--- @return integer # Channel id, or 0 on error
function vim.api.nvim_open_term(buffer, opts) end
--- Opens a new split window, or a floating window if `relative` is specified,
--- or an external window (managed by the UI) if `external` is specified.
--- Opens a new split window, floating window, or external window.
---
--- Floats are windows that are drawn above the split layout, at some anchor
--- position in some other window. Floats can be drawn internally or by external
--- GUI with the `ui-multigrid` extension. External windows are only supported
--- with multigrid GUIs, and are displayed as separate top-level windows.
---
--- For a general overview of floats, see `api-floatwin`.
---
--- The `width` and `height` of the new window must be specified when opening
--- a floating window, but are optional for normal windows.
---
--- If `relative` and `external` are omitted, a normal "split" window is created.
--- The `win` property determines which window will be split. If no `win` is
--- provided or `win == 0`, a window will be created adjacent to the current window.
--- If -1 is provided, a top-level split will be created. `vertical` and `split` are
--- only valid for normal windows, and are used to control split direction. For `vertical`,
--- the exact direction is determined by 'splitright' and 'splitbelow'.
--- Split windows cannot have `bufpos`, `row`, `col`, `border`, `title`, `footer` properties.
--- - Specify `relative` to create a floating window. Floats are drawn over the split layout,
--- relative to a position in some other window. See `api-floatwin`.
--- - Floats must specify `width` and `height`.
--- - Specify `external` to create an external window. External windows are displayed as separate
--- top-level windows managed by the `ui-multigrid` UI (not Nvim).
--- - If `relative` and `external` are omitted, a normal "split" window is created.
--- - The `win` key decides which window to split. If nil or 0, the split will be adjacent to
--- the current window. If -1, a top-level split will be created.
--- - Use `vertical` and `split` to control split direction. For `vertical`, the exact direction
--- is determined by 'splitright' and 'splitbelow'.
--- - Split windows cannot have `bufpos`, `row`, `col`, `border`, `title`, `footer`.
---
--- With relative=editor (row=0,col=0) refers to the top-left corner of the
--- screen-grid and (row=Lines-1,col=Columns-1) refers to the bottom-right
@@ -2492,11 +2485,11 @@ function vim.api.nvim_win_is_valid(window) end
--- @param buffer integer Buffer id
function vim.api.nvim_win_set_buf(window, buffer) end
--- Reconfigures the layout of a window.
--- Reconfigures the layout and properties of a window.
---
--- - Absent (`nil`) keys will not be changed.
--- - `row` / `col` / `relative` must be reconfigured together.
--- - Cannot be used to move the last window in a tabpage to a different one.
--- - Updates only the given keys; unspecified (`nil`) keys will not be changed.
--- - Keys `row` / `col` / `relative` must be specified together.
--- - Cannot move the last window in a tabpage to a different one.
---
--- Example: to convert a floating window to a "normal" split window, specify the `win` field:
---

View File

@@ -3159,6 +3159,7 @@ vim.go.gp = vim.go.grepprg
---
--- ```vim
--- highlight Cursor gui=reverse guifg=NONE guibg=NONE
--- " Note: gui=reverse overrides colors.
--- highlight Cursor gui=NONE guifg=bg guibg=fg
--- ```
---
@@ -3240,7 +3241,7 @@ vim.go.gcr = vim.go.guicursor
---
---
--- @type string
vim.o.guifont = "Source Code Pro,DejaVu Sans Mono,Courier New,monospace"
vim.o.guifont = "DFLT_GFN"
vim.o.gfn = vim.o.guifont
vim.go.guifont = vim.o.guifont
vim.go.gfn = vim.go.guifont

View File

@@ -6,24 +6,26 @@ error('Cannot require a meta file')
--- @class vim.v
vim.v = ...
--- The list of file arguments passed on the command line at startup.
---
--- Each filename is expanded to an absolute path, so that v:argf
--- remains valid even if the current working directory changes later.
--- File arguments (expanded to absolute paths) given at startup.
---
--- Unlike `v:argv`, this does not include option arguments
--- such as `-u`, `--cmd`, or `+cmd`. Unlike `argv()`, it is not
--- affected by later `:args`, `:argadd`, or plugin modifications.
--- It also handles the `--` separator correctly, including only
--- files specified after it.
---
--- This is a read-only snapshot of the original startup file arguments.
--- Example:
--- ```
--- nvim file1.txt +ls -- file2.txt
--- :echo v:argf
--- " ['/path/to/cwd/file1.txt', '/path/to/cwd/file2.txt']
--- ```
--- @type string[]
vim.v.argf = ...
--- The command line arguments Vim was invoked with. This is a
--- list of strings. The first item is the Vim command.
--- See `v:progpath` for the command with full path.
--- Command line arguments (`-u`, `--cmd`, `+cmd`, …) Nvim was
--- invoked with. The first item is the Nvim command.
---
--- See `v:progpath` to get the full path to Nvim.
--- See `v:argf` to get only file args, without other options.
--- @type string[]
vim.v.argv = ...

View File

@@ -243,6 +243,7 @@ end
--- -- { {id=1}, {id=2} }
--- ```
---
---@since 14
---@param key? fun(...):any Optional hash function to determine uniqueness of values.
---@return Iter
---@see |vim.list.unique()|
@@ -282,6 +283,7 @@ end
--- -- error: attempt to flatten a dict-like table
--- ```
---
---@since 12
---@param depth? number Depth to which |list-iterator| should be flattened
--- (defaults to 1)
---@return Iter
@@ -331,6 +333,7 @@ end
--- -- { 6, 12 }
--- ```
---
---@since 12
---@param f fun(...):...:any Mapping function. Takes all values returned from
--- the previous stage in the pipeline as arguments
--- and returns one or more new values, which are used
@@ -399,6 +402,7 @@ end
---
--- For functions with side effects. To modify the values in the iterator, use |Iter:map()|.
---
---@since 12
---@param f fun(...) Function to execute for each item in the pipeline.
--- Takes all of the values returned by the previous stage
--- in the pipeline as arguments.
@@ -446,6 +450,7 @@ end
--- To create a map-like table with arbitrary keys, use |Iter:fold()|.
---
---
---@since 12
---@return table
function Iter:totable()
local t = {}
@@ -498,6 +503,7 @@ end
---
--- Consumes the iterator.
---
--- @since 12
--- @param delim string Delimiter
--- @return string
function Iter:join(delim)
@@ -527,6 +533,7 @@ end
---
---@generic A
---
---@since 12
---@param init A Initial value of the accumulator.
---@param f fun(acc:A, ...):A Accumulation function.
---@return A
@@ -572,6 +579,7 @@ end
---
--- ```
---
---@since 12
---@return any
function Iter:next()
if self._peeked then
@@ -606,6 +614,7 @@ end
---
--- ```
---
---@since 12
---@return Iter
function Iter:rev()
error('rev() requires an array-like table')
@@ -637,6 +646,7 @@ end
---
--- ```
---
---@since 12
---@return any
function Iter:peek()
if not self._peeked then
@@ -674,6 +684,7 @@ end
--- -- 12
---
--- ```
---@since 12
---@param f any
---@return any
function Iter:find(f)
@@ -720,6 +731,7 @@ end
---
---@see |Iter:find()|
---
---@since 12
---@param f any
---@return any
---@diagnostic disable-next-line: unused-local
@@ -769,6 +781,7 @@ end
--- -- nil
--- ```
---
---@since 12
---@param n integer|fun(...):boolean Number of values to take or a predicate.
---@return Iter
function Iter:take(n)
@@ -828,6 +841,7 @@ end
--- -- 3
--- ```
---
---@since 12
---@return any
function Iter:pop()
error('pop() requires an array-like table')
@@ -858,6 +872,7 @@ end
---
---@see |Iter:last()|
---
---@since 12
---@return any
function Iter:rpeek()
error('rpeek() requires an array-like table')
@@ -891,6 +906,7 @@ end
--- -- 12
--- ```
---
---@since 12
---@param n integer|fun(...):boolean Number of values to skip or a predicate.
---@return Iter
function Iter:skip(n)
@@ -956,6 +972,7 @@ end
--- -- 3
--- ```
---
---@since 12
---@param n number Number of values to skip.
---@return Iter
---@diagnostic disable-next-line: unused-local
@@ -993,6 +1010,7 @@ end
--- -- 3
--- ```
---
---@since 12
---@param n number Index of the value to return. May be negative if the source is a |list-iterator|.
---@return any
function Iter:nth(n)
@@ -1007,6 +1025,7 @@ end
---
--- Equivalent to `:skip(first - 1):rskip(len - last + 1)`.
---
---@since 12
---@param first number
---@param last number
---@return Iter
@@ -1022,6 +1041,7 @@ end
--- Returns true if any of the items in the iterator match the given predicate.
---
---@since 12
---@param pred fun(...):boolean Predicate function. Takes all values returned from the previous
--- stage in the pipeline as arguments and returns true if the
--- predicate matches.
@@ -1046,6 +1066,7 @@ end
--- Returns true if all items in the iterator match the given predicate.
---
---@since 12
---@param pred fun(...):boolean Predicate function. Takes all values returned from the previous
--- stage in the pipeline as arguments and returns true if the
--- predicate matches.
@@ -1083,6 +1104,7 @@ end
---
--- ```
---
---@since 12
---@see |Iter:rpeek()|
---
---@return any
@@ -1135,6 +1157,7 @@ end
---
--- ```
---
---@since 12
---@return Iter
function Iter:enumerate()
local i = 0

View File

@@ -1046,13 +1046,11 @@ end
--- ```
---
--- By default asks the server to shutdown, unless stop was requested already for this client (then
--- force-shutdown is attempted, unless `exit_timeout=false`).
--- force-stop is attempted, unless `exit_timeout=false`).
---
---@deprecated
---@param client_id integer|integer[]|vim.lsp.Client[] id, list of id's, or list of |vim.lsp.Client| objects
---@param force? boolean|integer Whether to shutdown forcefully.
--- If `force` is a number, it will be treated as the time in milliseconds to
--- wait before forcing the shutdown.
---@param force? boolean|integer See |Client:stop()|
function lsp.stop_client(client_id, force)
vim.deprecate('vim.lsp.stop_client()', 'vim.lsp.Client:stop()', '0.13')
--- @type integer[]|vim.lsp.Client[]

View File

@@ -68,9 +68,11 @@ local all_clients = {}
--- (default: `true`)
--- @field detached? boolean
---
--- Milliseconds to wait for server to exit cleanly after sending the "shutdown" request before
--- sending kill -15. If set to false, waits indefinitely. If set to true, nvim will kill the
--- server immediately.
--- Decides if/when to force-stop the server after sending the "shutdown" request. See |Client:stop()|.
--- Note: when Nvim itself is exiting,
--- - `false`: Nvim will not force-stop LSP server(s).
--- - `true`: Nvim will force-stop LSP server(s) that did not comply with the "shutdown" request.
--- - `number`: Nvim will wait up to `exit_timeout` milliseconds before performing force-stop.
--- (default: `false`)
--- @field exit_timeout? integer|boolean
---
@@ -156,9 +158,7 @@ local all_clients = {}
--- Capabilities provided at runtime (after startup).
--- @field dynamic_capabilities lsp.DynamicCapabilities
---
--- Milliseconds to wait for server to exit cleanly after sending the "shutdown" request before
--- sending kill -15. If set to false, waits indefinitely. If set to true, nvim will kill the
--- server immediately.
--- See [vim.lsp.ClientConfig].
--- (default: `false`)
--- @field exit_timeout integer|boolean
---
@@ -852,20 +852,19 @@ end
--- Stops a client, optionally with force after a timeout.
---
--- By default, it will request the server to shutdown, then force a shutdown
--- if the server has not exited after `self.exit_timeout` milliseconds. If
--- you request to stop a client which has previously been requested to
--- shutdown, it will automatically escalate and force shutdown immediately,
--- regardless of the value of `force` (or `self.exit_timeout` if `nil`).
--- By default this sends a "shutdown" request to the server, escalating to force-stop if the server
--- has not exited after `self.exit_timeout` milliseconds (unless `exit_timeout=false`).
--- Calling stop() on a client that was previously requested to shutdown, will escalate to
--- force-stop immediately, regardless of `force` (or `self.exit_timeout` if `force=nil`).
---
--- Note: Forcing shutdown while a server is busy writing out project or index
--- files can lead to file corruption.
--- Note: Forcing shutdown while a server is busy writing out project or index files can lead to
--- file corruption.
---
--- @param force? integer|boolean Time in milliseconds to wait before forcing
--- a shutdown. If false, only request the
--- server to shutdown, but don't force it. If
--- true, force a shutdown immediately.
--- (default: `self.exit_timeout`)
--- @param force? integer|boolean (default: `self.exit_timeout`) Decides whether to force-stop the server.
--- - `nil`: Defaults to `exit_timeout` from |vim.lsp.ClientConfig|.
--- - `true`: Force-stop after "shutdown" request.
--- - `false`: Do not force-stop after "shutdown" request.
--- - number: Wait up to `force` milliseconds before force-stop.
function Client:stop(force)
validate('force', force, { 'number', 'boolean' }, true)

View File

@@ -6,7 +6,7 @@
---
--- Example: activate LSP-driven auto-completion:
--- ```lua
--- -- Works best with completeopt=noselect.
--- -- Works best if 'completeopt' has "noselect".
--- -- Use CTRL-Y to select an item. |complete_CTRL-Y|
--- vim.cmd[[set completeopt+=menuone,noselect,popup]]
--- vim.lsp.start({
@@ -1159,15 +1159,14 @@ end
--- Enables or disables completions from the given language client in the given
--- buffer. Effects of enabling completions are:
---
--- - Calling |vim.lsp.completion.get()| uses the enabled clients to retrieve
--- completion candidates
--- - Calling |vim.lsp.completion.get()| uses the enabled clients to retrieve completion candidates.
--- - Selecting a completion item shows a preview popup ("completionItem/resolve") if 'completeopt'
--- has "popup".
--- - Accepting a completion item using `<c-y>` applies side effects like expanding snippets,
--- text edits (e.g. insert import statements) and executing associated commands. This works for
--- completions triggered via autotrigger, 'omnifunc' or [vim.lsp.completion.get()].
---
--- - Accepting a completion candidate using `<c-y>` applies side effects like
--- expanding snippets, text edits (e.g. insert import statements) and
--- executing associated commands. This works for completions triggered via
--- autotrigger, omnifunc or completion.get()
---
--- Example: |lsp-attach| |lsp-completion|
--- Examples: |lsp-attach| |lsp-completion|
---
--- Note: the behavior of `autotrigger=true` is controlled by the LSP `triggerCharacters` field. You
--- can override it on LspAttach, see |lsp-autocompletion|.

View File

@@ -1204,9 +1204,8 @@ end
--- @field offline? boolean Whether to skip downloading new updates. Default: `false`.
---
--- How to compute a new plugin revision. One of:
--- - "version" (default) - use latest revision matching `version` from plugin specification.
--- - "lockfile" - use revision from the lockfile. Useful for reverting or performing controlled
--- update.
--- - "version" (default): use latest revision matching `version` from plugin specification.
--- - "lockfile": use revision from the lockfile. For reverting or performing controlled update.
--- @field target? string
--- Update plugins

View File

@@ -162,9 +162,10 @@ end
--- @class vim.trust.opts
--- @inlinedoc
---
--- - `'allow'` to add a file to the trust database and trust it,
--- - `'deny'` to add a file to the trust database and deny it,
--- - `'remove'` to remove file from the trust database
--- One of:
--- - `'allow'` to add a file to the trust database and trust it,
--- - `'deny'` to add a file to the trust database and deny it,
--- - `'remove'` to remove file from the trust database
--- @field action 'allow'|'deny'|'remove'
---
--- Path to a file to update. Mutually exclusive with {bufnr}.

View File

@@ -1193,10 +1193,8 @@ end
--- parsers.
---
--- If you move the cursor to a capture name ("@foo"), text matching the capture is highlighted
--- with |hl-DiagnosticVirtualTextHint| in the source buffer.
---
--- The query editor is a scratch buffer, use `:write` to save it. You can find example queries
--- at `$VIMRUNTIME/queries/`.
--- with |hl-DiagnosticVirtualTextHint| in the source buffer. The query editor is a scratch buffer,
--- use `:write` to save it. You can find example queries at `$VIMRUNTIME/queries/`.
---
--- @param lang? string language to open the query editor for. If omitted, inferred from the current buffer's filetype.
function M.edit(lang)

View File

@@ -512,6 +512,9 @@ local function should_render_field_or_param(p)
and not vim.startswith(p.name, '_')
end
--- Gets a field's description and its "(default: …)" value, if any (see `lsp/client.lua` for
--- examples).
---
--- @param desc? string
--- @return string?, string?
local function get_default(desc)
@@ -801,13 +804,18 @@ local function render_fun(fun, classes, cfg)
if fun.since then
local since = assert(tonumber(fun.since), 'invalid @since on ' .. fun.name)
local info = nvim_api_info()
if since == 0 or (info.prerelease and since == info.level) then
local nvim_api = nvim_api_info()
_ = nvim_api -- Disable prerelease "WARNING" doc, in preparation for for upcoming release.
if
since == 0 --[[or (nvim_api.prerelease and since == nvim_api.level)]]
then
-- Experimental = (since==0 or current prerelease)
local s = 'WARNING: This feature is experimental/unstable.'
table.insert(ret, md_to_vimdoc(s, INDENTATION, INDENTATION, TEXT_WIDTH))
table.insert(ret, '\n')
else
end
if since > 0 then
local v = assert(util.version_level[since], 'invalid @since on ' .. fun.name)
fun.attrs = fun.attrs or {}
table.insert(fun.attrs, fmt('Since: %s', v))

View File

@@ -39,26 +39,19 @@
#include "api/win_config.c.generated.h"
/// Opens a new split window, or a floating window if `relative` is specified,
/// or an external window (managed by the UI) if `external` is specified.
/// Opens a new split window, floating window, or external window.
///
/// Floats are windows that are drawn above the split layout, at some anchor
/// position in some other window. Floats can be drawn internally or by external
/// GUI with the |ui-multigrid| extension. External windows are only supported
/// with multigrid GUIs, and are displayed as separate top-level windows.
///
/// For a general overview of floats, see |api-floatwin|.
///
/// The `width` and `height` of the new window must be specified when opening
/// a floating window, but are optional for normal windows.
///
/// If `relative` and `external` are omitted, a normal "split" window is created.
/// The `win` property determines which window will be split. If no `win` is
/// provided or `win == 0`, a window will be created adjacent to the current window.
/// If -1 is provided, a top-level split will be created. `vertical` and `split` are
/// only valid for normal windows, and are used to control split direction. For `vertical`,
/// the exact direction is determined by 'splitright' and 'splitbelow'.
/// Split windows cannot have `bufpos`, `row`, `col`, `border`, `title`, `footer` properties.
/// - Specify `relative` to create a floating window. Floats are drawn over the split layout,
/// relative to a position in some other window. See |api-floatwin|.
/// - Floats must specify `width` and `height`.
/// - Specify `external` to create an external window. External windows are displayed as separate
/// top-level windows managed by the |ui-multigrid| UI (not Nvim).
/// - If `relative` and `external` are omitted, a normal "split" window is created.
/// - The `win` key decides which window to split. If nil or 0, the split will be adjacent to
/// the current window. If -1, a top-level split will be created.
/// - Use `vertical` and `split` to control split direction. For `vertical`, the exact direction
/// is determined by 'splitright' and 'splitbelow'.
/// - Split windows cannot have `bufpos`, `row`, `col`, `border`, `title`, `footer`.
///
/// With relative=editor (row=0,col=0) refers to the top-left corner of the
/// screen-grid and (row=Lines-1,col=Columns-1) refers to the bottom-right
@@ -618,11 +611,11 @@ resize:
#undef HAS_KEY_X
}
/// Reconfigures the layout of a window.
/// Reconfigures the layout and properties of a window.
///
/// - Absent (`nil`) keys will not be changed.
/// - `row` / `col` / `relative` must be reconfigured together.
/// - Cannot be used to move the last window in a tabpage to a different one.
/// - Updates only the given keys; unspecified (`nil`) keys will not be changed.
/// - Keys `row` / `col` / `relative` must be specified together.
/// - Cannot move the last window in a tabpage to a different one.
///
/// Example: to convert a floating window to a "normal" split window, specify the `win` field:
///

View File

@@ -1668,6 +1668,7 @@ char *file_name_in_line(char *line, int col, int options, int count, char *rel_f
// Search forward for the last char of the file name.
// Also allow ":/" when ':' is not in 'isfname'.
// TODO(justinmk): Check for driveletter "x:/" at start, regardless of 'isfname'.
len = path_has_drive_letter(ptr, strlen(ptr)) ? 2 : 0;
while (vim_isfilec((uint8_t)ptr[len]) || (ptr[len] == '\\' && ptr[len + 1] == ' ')
|| ((options & FNAME_HYP) && path_is_url(ptr + len))

View File

@@ -17,7 +17,7 @@ enum {
enum {
FNAME_MESS = 1, ///< give error message
FNAME_EXP = 2, ///< expand to path
FNAME_HYP = 4, ///< check for hypertext link
FNAME_HYP = 4, ///< check for hyperlink url ("foo://")
FNAME_INCL = 8, ///< apply 'includeexpr'
FNAME_REL = 16, ///< ".." and "./" are relative to the (current)
///< file instead of the current directory

View File

@@ -887,12 +887,12 @@ void nlua_init(char **argv, int argc, int lua_arg0)
lua_State *lstate = luaL_newstate();
if (lstate == NULL) {
fprintf(stderr, _("E970: Failed to initialize lua interpreter\n"));
fprintf(stderr, _("E970: Failed to initialize Lua interpreter\n"));
os_exit(1);
}
luaL_openlibs(lstate);
if (!nlua_state_init(lstate)) {
fprintf(stderr, _("E970: Failed to initialize builtin lua modules\n"));
fprintf(stderr, _("E970: Failed to initialize builtin Lua modules\n"));
#ifdef EXITFREE
nlua_common_free_all_mem(lstate);
#endif

View File

@@ -3985,6 +3985,7 @@ local options = {
Examples of cursor highlighting: >vim
highlight Cursor gui=reverse guifg=NONE guibg=NONE
" Note: gui=reverse overrides colors.
highlight Cursor gui=NONE guifg=bg guibg=fg
<
]=],
@@ -4000,10 +4001,11 @@ local options = {
abbreviation = 'gfn',
defaults = {
if_true = macros('DFLT_GFN', 'string'),
doc = [[(MS-Windows) "Cascadia Code,Cascadia Mono,Consolas,Courier New,monospace"
(Mac) "SF Mono,Menlo,Monaco,Courier New,monospace"
(Linux) "Source Code Pro,DejaVu Sans Mono,Courier New,monospace"
(others) "DejaVu Sans Mono,Courier New,monospace"]],
doc = [["DejaVu Sans Mono,Courier New,monospace"
Mac: "SF Mono,Menlo,Monaco,Courier New,monospace"
Linux: "Source Code Pro,DejaVu Sans Mono,Courier New,monospace"
MS-Windows: "Cascadia Code,Cascadia Mono,Consolas,Courier New,monospace"]],
meta = 'DFLT_GFN',
},
desc = [=[
This is a list of fonts which will be used for the GUI version of Vim.

View File

@@ -1775,10 +1775,10 @@ int path_is_url(const char *p)
return 0;
}
/// Check if "fname" starts with "name://" or "name:\\".
/// Check if "fname" starts with "name:/" or "name:\".
///
/// @param fname is the filename to test
/// @return URL_SLASH for "name://", URL_BACKSLASH for "name:\\", zero otherwise.
/// @return URL_SLASH for "name:/", URL_BACKSLASH for "name:\", zero otherwise.
int path_with_url(const char *fname)
FUNC_ATTR_NONNULL_ALL
{

View File

@@ -4,26 +4,27 @@ M.vars = {
argf = {
type = 'string[]',
desc = [=[
The list of file arguments passed on the command line at startup.
Each filename is expanded to an absolute path, so that v:argf
remains valid even if the current working directory changes later.
File arguments (expanded to absolute paths) given at startup.
Unlike |v:argv|, this does not include option arguments
such as `-u`, `--cmd`, or `+cmd`. Unlike |argv()|, it is not
affected by later |:args|, |:argadd|, or plugin modifications.
It also handles the `--` separator correctly, including only
files specified after it.
This is a read-only snapshot of the original startup file arguments.
Example: >
nvim file1.txt +ls -- file2.txt
:echo v:argf
" ['/path/to/cwd/file1.txt', '/path/to/cwd/file2.txt']
<
]=],
},
argv = {
type = 'string[]',
desc = [=[
The command line arguments Vim was invoked with. This is a
list of strings. The first item is the Vim command.
See |v:progpath| for the command with full path.
Command line arguments (`-u`, `--cmd`, `+cmd`, …) Nvim was
invoked with. The first item is the Nvim command.
See |v:progpath| to get the full path to Nvim.
See |v:argf| to get only file args, without other options.
]=],
},
char = {

View File

@@ -115,6 +115,7 @@ describe('file search', function()
eq(expected, eval('expand("<cfile>")'))
end
-- test_cfile([[c:/d:/e:/foo/bar.txt]], 'c:/d:/e') -- TODO(justinmk): should return "d:/foo/bar.txt" ?
test_cfile([[c:/d:/foo/bar.txt]]) -- TODO(justinmk): should return "d:/foo/bar.txt" ?
test_cfile([[//share/c:/foo/bar/]])
test_cfile([[file://c:/foo/bar]])

View File

@@ -219,7 +219,7 @@ describe('server', function()
client:close()
end)
it('removes stale socket files automatically #26053', function()
it('removes stale socket files automatically #36581', function()
-- Windows named pipes are ephemeral kernel objects that are automatically
-- cleaned up when the process terminates. Unix domain sockets persist as
-- files on the filesystem and can become stale after crashes.
@@ -243,7 +243,7 @@ describe('server', function()
fn.serverstop(socket_path)
end)
it('does not remove live sockets #26053', function()
it('does not remove live sockets #36581', function()
t.skip(is_os('win'), 'N/A on Windows')
clear()

View File

@@ -4065,7 +4065,7 @@ describe('vim.diagnostic', function()
end)
end)
describe('toqflist() and fromqflist()', function()
describe('toqflist(), fromqflist()', function()
it('works', function()
local result = exec_lua(function()
vim.diagnostic.set(_G.diagnostic_ns, _G.diagnostic_bufnr, {
@@ -4091,95 +4091,71 @@ describe('vim.diagnostic', function()
end)
it('merge_lines=true merges continuation lines', function()
local result = exec_lua(function()
local qflist = {
{
bufnr = 1,
lnum = 10,
col = 5,
end_lnum = 10,
end_col = 10,
text = 'error: [GHC-83865]',
type = 'E',
nr = 0,
valid = 1,
},
{
bufnr = 1,
lnum = 0,
col = 0,
end_lnum = 0,
end_col = 0,
text = " Couldn't match expected type",
type = '',
nr = 0,
valid = 0,
},
{
bufnr = 1,
lnum = 0,
col = 0,
end_lnum = 0,
end_col = 0,
text = ' with actual type',
type = '',
nr = 0,
valid = 0,
},
{
bufnr = 1,
lnum = 20,
col = 1,
end_lnum = 20,
end_col = 5,
text = 'warning: unused',
type = 'W',
nr = 0,
valid = 1,
},
}
return vim.diagnostic.fromqflist(qflist, { merge_lines = true })
end)
local function get_fromqflist(merge_lines)
return exec_lua(function(merge_lines_)
local qflist = {
{
bufnr = 1,
lnum = 10,
col = 5,
end_lnum = 10,
end_col = 10,
text = 'error: [GHC-83865]',
type = 'E',
nr = 0,
valid = 1,
},
{
bufnr = 1,
lnum = 0,
col = 0,
end_lnum = 0,
end_col = 0,
text = " Couldn't match expected type",
type = '',
nr = 0,
valid = 0,
},
{
bufnr = 1,
lnum = 0,
col = 0,
end_lnum = 0,
end_col = 0,
text = ' with actual type',
type = '',
nr = 0,
valid = 0,
},
{
bufnr = 1,
lnum = 20,
col = 1,
end_lnum = 20,
end_col = 5,
text = 'warning: unused',
type = 'W',
nr = 0,
valid = 1,
},
}
return vim.diagnostic.fromqflist(qflist, { merge_lines = merge_lines_ })
end, merge_lines)
end
-- merge_lines=true
local result = get_fromqflist(true)
eq(2, #result)
eq(
"error: [GHC-83865]\n Couldn't match expected type\n with actual type",
result[1].message
)
eq('warning: unused', result[2].message)
end)
it('merge_lines=false ignores continuation lines', function()
local result = exec_lua(function()
local qflist = {
{
bufnr = 1,
lnum = 10,
col = 5,
end_lnum = 10,
end_col = 10,
text = 'error: main',
type = 'E',
nr = 0,
valid = 1,
},
{
bufnr = 1,
lnum = 0,
col = 0,
end_lnum = 0,
end_col = 0,
text = 'continuation',
type = '',
nr = 0,
valid = 0,
},
}
return vim.diagnostic.fromqflist(qflist)
end)
eq(1, #result)
eq('error: main', result[1].message)
-- merge_lines=false
result = get_fromqflist(false)
eq(2, #result)
eq('error: [GHC-83865]', result[1].message)
end)
end)

View File

@@ -145,12 +145,12 @@ describe('vim.ui', function()
if not is_os('bsd') then
local rv = exec_lua([[
local cmd, err = vim.ui.open('non-existent-file')
if err then return nil end
if err and err:find('no handler found') then
return -1
end
return cmd:wait(100).code
]])
if type(rv) == 'number' then
ok(rv ~= 0, 'nonzero exit code', rv)
end
ok(type(rv) == 'number' and rv ~= 0, 'nonzero exit code', rv)
end
exec_lua [[

View File

@@ -752,7 +752,7 @@ describe('vim.lsp.completion: item conversion', function()
eq('foobar', result.items[1].user_data.nvim.lsp.completion_item.textEdit.newText)
end)
it('shows snippet source in doc popup if completeopt include popup', function()
it('shows snippet source in doc popup if completeopt=popup', function()
exec_lua([[
vim.opt.completeopt:append('popup')
vim.bo.filetype = 'lua'
@@ -1362,7 +1362,7 @@ describe('vim.lsp.completion: integration', function()
eq('w-1/2', n.api.nvim_get_current_line())
end)
it('completionItem/resolve', function()
it('selecting an item triggers completionItem/resolve + preview', function()
local screen = Screen.new(50, 20)
screen:add_extra_attr_ids({
[100] = { background = Screen.colors.Plum1, foreground = Screen.colors.Blue },

View File

@@ -337,25 +337,25 @@ describe('treesitter parser API', function()
end)
local test_text = [[
void ui_refresh(void)
{
int width = INT_MAX, height = INT_MAX;
bool ext_widgets[kUIExtCount];
for (UIExtension i = 0; (int)i < kUIExtCount; i++) {
ext_widgets[i] = true;
}
void ui_refresh(void)
{
int width = INT_MAX, height = INT_MAX;
bool ext_widgets[kUIExtCount];
for (UIExtension i = 0; (int)i < kUIExtCount; i++) {
ext_widgets[i] = true;
}
bool inclusive = ui_override();
for (size_t i = 0; i < ui_count; i++) {
UI *ui = uis[i];
width = MIN(ui->width, width);
height = MIN(ui->height, height);
foo = BAR(ui->bazaar, bazaar);
for (UIExtension j = 0; (int)j < kUIExtCount; j++) {
ext_widgets[j] &= (ui->ui_ext[j] || inclusive);
}
}
}]]
bool inclusive = ui_override();
for (size_t i = 0; i < ui_count; i++) {
UI *ui = uis[i];
width = MIN(ui->width, width);
height = MIN(ui->height, height);
foo = BAR(ui->bazaar, bazaar);
for (UIExtension j = 0; (int)j < kUIExtCount; j++) {
ext_widgets[j] &= (ui->ui_ext[j] || inclusive);
}
}
}]]
it('can iterate over nodes children', function()
insert(test_text)
@@ -424,7 +424,7 @@ void ui_refresh(void)
local tree = parser:parse()[1]
return vim.treesitter.get_node_text(tree:root(), 0)
end)
eq(test_text, res)
eq(t.dedent(test_text), res)
local res2 = exec_lua(function()
local parser = vim.treesitter.get_parser(0, 'c')
@@ -436,9 +436,9 @@ void ui_refresh(void)
it('can get text where start of node is one past EOF', function()
local text = [[
def run
a = <<~E
end]]
def run
a = <<~E
end]]
insert(text)
eq(
'',
@@ -463,9 +463,10 @@ end]]
it('can get empty text if node range is zero-width', function()
local text = [[
```lua
{}
```]]
```lua
{}
```
]]
insert(text)
local result = exec_lua(function()
local fake_node = {}
@@ -602,12 +603,12 @@ end]]
before_each(function()
insert([[
int x = INT_MAX;
#define READ_STRING(x, y) (char *)read_string((x), (size_t)(y))
#define READ_STRING_OK(x, y) (char *)read_string((x), (size_t)(y))
#define VALUE 123
#define VALUE1 123
#define VALUE2 123
int x = INT_MAX;
#define READ_STRING(x, y) (char *)read_string((x), (size_t)(y))
#define READ_STRING_OK(x, y) (char *)read_string((x), (size_t)(y))
#define VALUE 123
#define VALUE1 123
#define VALUE2 123
]])
end)
@@ -989,8 +990,8 @@ int x = INT_MAX;
describe('when getting the language for a range', function()
before_each(function()
insert([[
int x = INT_MAX;
#define VALUE 123456789
int x = INT_MAX;
#define VALUE 123456789
]])
end)
@@ -1015,7 +1016,7 @@ int x = INT_MAX;
describe('when setting the node for an injection', function()
before_each(function()
insert([[
print()
print()
]])
end)

View File

@@ -33,7 +33,7 @@ local function treeselect(cmd_, ...)
end, cmd_, ...)
end
describe('incremental treesitter selection', function()
describe('treesitter incremental-selection', function()
before_each(function()
clear()
@@ -66,7 +66,7 @@ describe('incremental treesitter selection', function()
eq('foo(1)\nbar(2)\n', get_selected())
end)
it('repeate works', function()
it('repeat', function()
set_lines('foo(1,2,3,4)')
treeselect('select_node')
eq('foo', get_selected())
@@ -91,7 +91,7 @@ describe('incremental treesitter selection', function()
eq('2', get_selected())
end)
it('has history', function()
it('history', function()
treeselect('select_node')
treeselect('select_child')
treeselect('select_next')
@@ -111,7 +111,7 @@ describe('incremental treesitter selection', function()
eq('foo(1)', get_selected())
end)
it('correctly selects node as parent when node half selected', function()
it('selects node as parent when node half-selected', function()
feed('kkl', 'v', 'l')
eq('oo', get_selected())
@@ -119,7 +119,7 @@ describe('incremental treesitter selection', function()
eq('foo', get_selected())
end)
it('correctly selects node as child when node half selected', function()
it('selects node as child when node half-selected', function()
feed('kkl', 'v', 'l')
eq('oo', get_selected())
@@ -127,7 +127,7 @@ describe('incremental treesitter selection', function()
eq('foo', get_selected())
end)
it('correctly find child node when node half selected', function()
it('finds child node when node half-selected', function()
feed('kkl', 'v', 'j')
eq('oo(1)\nba', get_selected())
@@ -135,7 +135,7 @@ describe('incremental treesitter selection', function()
eq('(1)', get_selected())
end)
it('maintainse cursor selection-end-pos', function()
it('maintains cursor selection-end-pos', function()
feed('kk')
treeselect('select_node')
eq('foo', get_selected())
@@ -174,7 +174,7 @@ describe('incremental treesitter selection', function()
end)
end)
describe('incremental treesitter selection with injections', function()
describe('treesitter incremental-selection with injections', function()
before_each(function()
clear({ args_rm = { '--cmd' }, args = { '--clean', '--cmd', n.runtime_set } })
end)