aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
Commit message (Collapse)AuthorAge
...
* | fix(lsp): set 'winfixbuf' in open_floating_preview() window #39058Raizento2026-04-15
| | | | | | | | | | | | | | | | | | Problem: The window opened by `vim.lsp.util.open_floating_preview()` allows its buffer to be switched. Presumably that only happens by accident and is disorienting. Solution: Set 'winfixbuf' in the open_floating_preview() window.
* | refactor: update usages of deprecated "buffer" param #39089Justin M. Keyes2026-04-15
| |
* | refactor(api): rename "window" to "win" (positional parameters) #39083Justin M. Keyes2026-04-15
| | | | | | | | | | | | | | continues d0af4cd9094f. This commit renames positional parameters. This is only "cosmetic", but is intended to make it extra clear which name is preferred, since people often copy existing code despite the guidelines in `:help dev-naming`.
* | feat(lsp): highlight foldtext via treesitter #38789Yi Ming2026-04-15
| | | | | | | | | | | | | | | | | | | | Problem: To support `collapsedText`, which allows the LSP server to determine the content of the foldtext, we provided `vim.lsp.foldtext()`. However, such content does not have highlighting. Solution Treat the filetype of `collapsedText` as the filetype of the corresponding buffer and use tree-sitter to highlight it.
* | refactor(api): rename buffer to buf (positional parameters) #39013Justin M. Keyes2026-04-15
| | | | | | | | | | | | | | | | In 3a4a66017b74, 4d3a67cd6201, df8d98173cbc we renamed "buffer" to "buf" in dict parameters and return-values. This commit renames positional parameters. This is only "cosmetic", but is intended to make it extra clear which name is preferred, since people often copy existing code despite the guidelines in `:help dev-naming`.
* | refactor(diagnostic): split diagnostic moduleLewis Russell2026-04-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Extract the diagnostic implementation from runtime/lua/vim/diagnostic.lua into focused internal modules covering config, display, float rendering, jump/list helpers, namespace and storage management, severity/shared utilities, and statusline support. Move the builtin handlers into runtime/lua/vim/diagnostic/handlers/ and keep runtime/lua/vim/diagnostic.lua as the public facade that lazily dispatches to the split modules. This preserves the external vim.diagnostic API while making the implementation easier to navigate and reason about. AI-assisted: Codex
* | test: replace busted with local harnessLewis Russell2026-04-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace the busted-based Lua test runner with a repo-local harness. The new harness runs spec files directly under `nvim -ll`, ships its own reporter and lightweight `luassert` shim, and keeps the helper/preload flow used by the functional and unit test suites. Keep the file boundary model shallow and busted-like by restoring `_G`, `package.loaded`, `package.preload`, `arg`, and the process environment between files, without carrying extra reset APIs or custom assertion machinery. Update the build and test entrypoints to use the new runner, add black-box coverage for the harness itself, and drop the bundled busted/luacheck dependency path. AI-assisted: Codex
* | fix(lua): make vim.deep_equal cycle-safeLewis Russell2026-04-15
|/ | | | AI-assisted: Codex
* feat(api): use zindex to determine dimmed cursor shape #39054luukvbaal2026-04-14
| | | | | | | | | | | Problem: The cursor shape is changed to indicate when it is behind an unfocused floating window (since a2b92a5e). This behavior cannot be controlled by a floating window that doesn't want to dim the cursor. Solution: Assign a zindex-offset of 50 to the zindex of the current window. To not dim the cursor when creating a floating window on top of the current window one can assign the zindex accordingly.
* docs: lsp, options, api #38980Justin M. Keyes2026-04-14
| | | | | | | | | docs: lsp, options - revert bogus change to `_meta/builtin_types.lua` from 3a4a66017b74 Close #38991 Co-authored-by: David Mejorado <david.mejorado@gmail.com>
* fix(lua): not obvious which _meta/ files are generated #39035Justin M. Keyes2026-04-14
| | | | | | | | | | | | Problem: - Not obvious which _meta/ are generated and which should be edited manually. - The require guard (`error('Cannot require a meta file')`) is not consistently present in all meta files. Solution: - Update headers. - Add require() guard to all meta files. - Rename generated meta files with `.gen.lua`.
* refactor(options): generate "modeline disallowed" doc text #39019Justin M. Keyes2026-04-14
| | | | | | | | | | | Problem: - Lots of redundant text in options docs for "not allowed in a modeline", even though we already have a flag that indicates that. - `deny_in_modelines` is an old vestigial flag only used by 'encoding' (which never changes). Solution: - Generate docs based on the `secure` flag. - Remove the `deny_in_modelines` flag (`kOptFlagNoML`).
* feat(api): rename buffer to buf in retval #38900Justin M. Keyes2026-04-13
| | | | | | In 3a4a66017b74192caaf9af9af172bdc08e0c1608, 4d3a67cd620152d11ab9b5f5bdd973f84cc2d44b we renamed "buffer" to "buf" in dict parameters. This commit also renames such keys in dict return-values.
* feat(completion): completeopt=preselect, LSP CompletionItem.preselect #36613glepnir2026-04-13
| | | | | | | | | | Problem: LSP CompletionItem.preselect is not supported. https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionClientCapabilities Solution: - Add "preselect" field to complete-items and "preselect" flag to 'completeopt'. - Set preselectSupport=true in LSP client capabilities.
* feat(provider): support bun as node.js provider #38517Owen2026-04-12
| | | | | | | | | Problem: Neovim's Node.js provider does not support the Bun package manager. PR #26829 attempted to add this but used a hardcoded path and was abandoned. Solution: - Use `bun pm bin -g` to dynamically locate the global binary directory. - Update `health.lua` to recognize bun installations.
* revert: "fix(lsp): only resolve LSP configs once" #38990Justin M. Keyes2026-04-12
| | | revert eb90f5d9e3a6615870f9bf0b28e30f6e84ccd6f4
* fix(lsp): show_document can't position cursor past EOL in insert-mode #38566Lars Debor2026-04-12
| | | | | | | | Problem: vim.lsp.util.show_document insert mode is unable to set the cursor after the target character position if the target character is at end of line. Solution: Move cursor after the target character (in append position) in this case.
* feat(api): nvim_set_hl can set "font" #37668glepnir2026-04-12
| | | | | | Problem: Cannot set highlight group fonts via API, only via :highlight command. Solution: Add font parameter in nvim_set_hl().
* fix(lsp): send didOpen on save to all clients+groups #37454Emilv22026-04-12
| | | | | | | Problem: _get_and_set_name edits the name for the whole group, thus only one client per group gets the didOpen message. Solution: move the logic to _changetracking and loop over every client per group.
* Merge #38882 docsJustin M. Keyes2026-04-12
|\
| * docs: vim.posJustin M. Keyes2026-04-12
| |
| * docs: miscJustin M. Keyes2026-04-12
| | | | | | | | | | | | | | | | Close #38748 Close #38866 Co-authored-by: Mario Loriedo <mario.loriedo@gmail.com> Co-authored-by: Anakin Childerhose <anakin@childerhose.ca>
* | fix(normal): pass count to 'keywordprg' as arg1 #38965Barrett Ruth2026-04-12
| | | | | | | | | | | | | | | | | | Problem: If `'keywordprg'` begins with `:`, `3K` turns the count into an Ex range. Commands that don't support that then fail. Vim passes the count as the first arg (see #19436, vim/vim#10745). Solution: Pass `[count]` as the first arg for `'keywordprg'`.
* | fix(api): nvim_get_hl drops groups defined with link_global #38492glepnir2026-04-12
|/ | | | | | | | | Problem: hlgroup2dict passes &ns_id to ns_get_hl twice. The first call (link=true) sets *ns_hl = 0 when link_global is set, so the second call and the sg_cleared guard both see ns_id == 0 and bail out. The group is silently dropped from the result. Solution: use a temporary copy of ns_id for each ns_get_hl call so the original value is preserved.
* fix(pack): make 'stash' call compatible with older Git #38679skewb1k2026-04-11
| | | | | | | | Problem: On Git versions 2.13..2.26 there is a bug that prevents using `stash --message`. Solution: Use the full `stash push --message` form to avoid that bug.
* fix(lsp): check stale context in hover/signature callback #38724glepnir2026-04-11
| | | | | | | Problem: hover/signature callback lacked consistency checks, so slow LSP servers could open a float after the cursor had already moved away. Solution: guard the callback with buf validity, buf version, and cursor position checks before opening the float. Also fix table capacity calculation.
* fix(lsp): codelens text flickers #38782Jaehwang Jung2026-04-11
| | | | | | | | | | | | | | | | | Problem: When a new textDocument/codeLens response arrives with unresolved lenses, on_win clears the existing codelens row before codeLens/resolve completes. This causes the displayed codelens text to flicker while typing. Solution: Keep the current virtual lines if any of the refreshed lenses are still unresolved. Clear the old virtual lines only when the line no longer has lenses or all its lenses are resolved. A trade-off is that the user may temporarily see outdated codelenses. However, that's preferable to spamming updates on every refresh. AI-assisted: Codex
* vim-patch:9.2.0333: filetype: PklProject files are not recognized (#38949)zeertzjq2026-04-11
| | | | | | | | | | | | | | | | Problem: filetype: PklProject files are not recognized Solution: Detect PklProject files as pkl filetype (Nihaal Sangha). Reference: https://pkl-lang.org/ https://github.com/apple/pkl https://github.com/apple/pkl-pantry closes: vim/vim#19948 https://github.com/vim/vim/commit/871e6c6cf9835b1f266461f3eb6c7bf07e841779 Co-authored-by: Nihaal Sangha <nihaal.git@gmail.com>
* Merge #38501 :log, stdpath("state")/logsJustin M. Keyes2026-04-10
|\
| * feat(ex): add `:log` commandOlivia Kinnear2026-04-10
| |
* | fix(pack): more advice for out-of-sync lockfile #38931Evgeni Chasnovski2026-04-10
| | | | | | | | | | | | | | | | | | | | Problem: If the lockfile points to the revision that is not on disk, the `:checkhealth vim.pack` suggests to run `vim.pack.update()`. Although usually it should resolve the problem, it is not always the case: like if the state on disk is already the latest available. Solution: Add an extra suggestion with a more drastic measure by manually removing `rev` field from the lockfile for it to be repaired after the `:restart`.
* | feat(snippet): support multiple sessions #29340Maria Solano2026-04-10
| |
* | feat(vim.net): custom request() headers #38837Ellison2026-04-10
|/ | | | | | | Problem Cannot specify headers in vim.net.request() call. Solution Support opts.headers in vim.net.request opts.
* vim-patch:9.2.0327: filetype: uv scripts are not detected (#38920)zeertzjq2026-04-10
| | | | | | | | | | | | | | | Problem: filetype: uv scripts are not detected (Asger Hautop Drewsen) Solution: Detect uv scripts as python filetype if the shebang line contains "uv run" Reference: https://docs.astral.sh/uv/guides/scripts/#using-a-shebang-to-create-an-executable-file fixes: vim/vim#19941 https://github.com/vim/vim/commit/6c16ccaf6101a5a4fa28df9ca31e0bf871541aa4 Co-authored-by: Christian Brabandt <cb@256bit.org>
* refactor(lsp): share code by `get_locations` #38902Yi Ming2026-04-09
| | | | | | | | | | | Problem: `vim.lsp.buf.definition`/`vim.lsp.buf.declaration` use the same underlying code via `get_locations`, whereas `vim.lsp.buf.reference` does not. This is because `buf.reference` does not perform a jump when there is only one item. Solution: In #38510, I simplified the jump logic using `:cfirst`, so they can now share code more easily. Additionally, this PR enables `buf.definition` to display the corresponding qflist name.
* fix(vim.pos): Range:intersect() drops `buf` #38898Luis Calle2026-04-09
| | | new() only supports nargs=5 or nargs=2, but this was passing 4 args.
* fix(messages): truncate warning messages only in display (#38901)zeertzjq2026-04-09
| | | | For now, add a private "_truncate" flag to nvim_echo, using a truncation method similar to showmode().
* feat(api): rename buffer to buf #35330Jordan2026-04-08
| | | | | | | | | | | | Problem: `:help dev-name-common` states that "buf" should be used instead of "buffer" but there are cases where buffer is mentioned in the lua API. Solution: - Rename occurrences of "buffer" to "buf" for consistency with the documentation. - Support (but deprecate) "buffer" for backwards compatibility. Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* vim-patch:9.2.0323: filetype: buf.lock files are not recognized (#38897)zeertzjq2026-04-08
| | | | | | | | | | | | | | Problem: filetype: buf.lock files are not recognized Solution: Detect buf.lock files as yaml filetype (Stefan VanBuren) Reference: https://buf.build/docs/configuration/v2/buf-lock/ closes: vim/vim#19935 https://github.com/vim/vim/commit/c2734dc03cd9ee437d25a6940e8c37ac7873b01d Co-authored-by: Stefan VanBuren <svanburen@buf.build>
* fix(lsp): apply_text_edits causes unwanted BufDelete events #38778glepnir2026-04-08
| | | | | | | | | | | | | | Problem: Since 2f6d1d3c887a87d9402137425b418dd12a904aac, `apply_text_edits` unconditionally sets `buflisted=true`, causing spurious BufDelete events if plugins restore the original 'buflisted' state on unlisted buffers: https://github.com/neovim/neovim/blob/65ef6cec1cb766334c59d3255595dfe523b11020/src/nvim/option.c#L2159-L2169 Solution: - Don't set 'buflisted' in `apply_text_edits`. Set it more narrowly, in `apply_workspace_edit` where the semantics requires affected buffers to be visible to the user. - Also skip setting 'buflisted' if it would not be changed, to avoid redundant `OptionSet` events.
* docs(api): nvim_exec_autocmds() default "pattern"Sean Dewar2026-04-08
| | | | | | | Problem: nvim_exec_autocmds() documentation incorrectly describes the default for "pattern" as *, when it's actually the current file name (like :doautocmd). Solution: correct it. Add a test.
* fix(diagnostics)!: restore `is_pull` namespace argument #38698Maria Solano2026-04-08
| | | | | | | | | | | | | | | | Problem: The current LSP diagnostic implementation can't differ between a pull diagnostic with no identifier and a set of diagnostics provided via push diagnostics. "Anonymous pull providers" are expected by the protocol https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#diagnosticOptions , depending on how the capability was registered: - Dynamic registrations have an identifier. - Static registrations will not. Solution: Restore the `is_pull` argument removed in https://github.com/neovim/neovim/pull/37938, keeping the identifier of pull diagnostic collections.
* feat(vim.version): add __eq to vim.VersionRange #38881ngicks2026-04-08
| | | | | | | | Problem: vim.VersionRange had no __eq metamethod, so comparing 2 distinct but same value instances always returned false. In vim.pack.add this caused redundant lockfile rewrites, even when the resulting lockfile content was unchanged. Solution: Add __eq metamethod on vim.VersionRange
* refactor(filetype): move _get_known_filetypes, return a Set #38886Justin M. Keyes2026-04-08
| | | | | - `_get_known_filetypes` may be useful for other internal code, so move it to an internal function. - Use a set instead of a list, for performance.
* fix(health): misleading warnings re filetypes registered w/ ↵Barrett Ruth2026-04-08
| | | | | | | | | | | | | | | | | vim.filetype.add() #38867 Problem: `:checkhealth vim.lsp` validates configured filetypes against `getcompletion('', 'filetype')`. This only reflects runtime support files. This causes false warnings in `:checkhealth vim.lsp` for configured filetypes that are known to the Lua filetype registry, including values added with `vim.filetype.add()` and built-in registry-only filetypes. Solution: Build the healthcheck's known-filetype set from both `getcompletion('', 'filetype')` and `vim.filetype.inspect()`.
* docs: vim.range, vim.pos #38869Luis Calle2026-04-08
| | | | | | | Problem: `vim.Range` and `vim.Pos` have signature mismatches on the docs of some functions. Solution: Split the "module" functions from the "class" functions (just like it's done in other modules like `vim.version`) and regenerate the docs.
* fix(health): recognize Zig build optimization levels #38804Dan Drennan2026-04-08
| | | | | | | | | | | | Problem: When Neovim is built with Zig, `:checkhealth` falsely reports "Non-optimized debug build" for release builds. The extraction regex stops at the first space, and the validation regex only lists CMake build type names. Solution: Fix the extraction regex to capture the full build type string and add Zig optimization levels (ReleaseFast, ReleaseSafe, ReleaseSmall) to the validation regex. AI-assisted: Claude Code
* vim-patch:794c304: runtime(doc): clarify incsearch feature and typed chars ↵zeertzjq2026-04-07
| | | | | | | | | (#38830) fixes: vim/vim#19886 https://github.com/vim/vim/commit/794c3044794330d8d0eadf71635d3892c187794c Co-authored-by: Christian Brabandt <cb@256bit.org>
* fix(diagnostic): virtual_lines should anchor at end_lnum, not lnum #38701glepnir2026-04-06
| | | | | Problem: Multi-line diagnostics always render virtual lines below lnum. Solution: Use end_lnum when placing the virt_lines extmark.
* feat(filetype): `vim.filetype.inspect()` returns copy of registry #38831Christian Clason2026-04-06
| | | | | | | | Problem: No way of inspecting the (user-added) filetype detection rules. Solution: Add `vim.filetype.inspect()` returning copies of the internal `extension`, `filename`, `pattern` tables. Due to the dynamic nature of filetype detection, this will in general not allow getting the list of known filetypes, but at least one can see if a given extension is known.