aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
Commit message (Collapse)AuthorAge
...
* docs: api, lsp, messages, intro #38327Justin M. Keyes2026-03-17
|
* fix(lsp): respect documentation markup kind in completion preview #38338glepnir2026-03-17
| | | | | | | Problem: Completion preview always assumes plain text, ignoring LSP documentation "kind". Solution: Pass markup kind from completion item to info window, or fallback to PlainText.
* feat(diff): merge adjacent blocks using inline:word (#37085)Harsh Kapse2026-03-17
| | | | | | | | | | | | | | | | | | | | | vim-patch:9.2.0174: diff: inline word-diffs can be fragmented Problem: When using 'diffopt=inline:word', lines were excessively fragmented with punctuation creating separate highlight blocks, making it harder to read the diffs. Solution: Added 'diff_refine_inline_word_highlight()' to merge adjacent diff blocks that are separated by small gaps of non-word characters (up to 5 bytes by default) (HarshK97). When using inline:word diff mode, adjacent changed words separated by punctuation or whitespace are now merged into a single highlight block if the gap between them contains fewer than 5 non-word characters. This creates more readable diffs and closely matches GitHub's own diff display. closes: vim/vim#19098 https://github.com/vim/vim/commit/42c6686c78d39843f71dba989a8ea59bc6975132
* feat(vimscript): scripts can detect 'android', 'termux' #38218TomIO2026-03-16
| | | | | | | | | | | | | | | | Problem: The 'android' and 'termux' feature flags have been shipped in the downstream neovim/neovim-nightly package for 5+ years but were never properly documented in the downstream patch. Solution: Upstream the 'android' and 'termux' feature flags into Neovim as decoupled feature flags, this enables the 'android' feature in particular to be available independently of the 'termux' feature for builds of Neovim against the Android NDK, but not including the Termux NDK patchset. Co-authored-by: Lethal Lisa <43791059+lethal-lisa@users.noreply.github.com> Co-authored-by: shadmansaleh <13149513+shadmansaleh@users.noreply.github.com>
* feat(progress): disable cmdline progress msg via messagesopt' #36730Shadman2026-03-16
| | | | | | | | | Problem: No way to disable progress messages in cmdline message area. If a third-party plugin handles Progress events + messages, the user may not want the "redundant" progress displayed in the cmdline message area. Solution: Support "progress:c" entry in 'messageopts' option.
* fix(api): use standard error messagesJustin M. Keyes2026-03-16
|
* docs: miscJustin M. Keyes2026-03-16
|
* Merge #27223 nvim_open_tabpageJustin M. Keyes2026-03-16
|\
| * fix(api): nvim_open_tabpage positional "enter"Sean Dewar2026-03-16
| | | | | | | | | | | | | | | | | | Problem: nvim_open_tabpage's "enter" argument is optional, which is inconsistent with nvim_open_win. Solution: make it a (non-optional) positional argument, like nvim_open_win. Also change "enter"'s description to be more like nvim_open_win's doc.
| * fix(api): nvim_open_tabpage "after" like :[count]tabSean Dewar2026-03-16
| | | | | | | | | | | | | | | | | | | | | | Problem: "after" in nvim_open_tabpage is inconsistent with how a count works with :tab, :tabnew, etc. Plus, the name "after" implies it's inserted after that number. Solution: internally offset by 1. Allow negative numbers to mean after current. Hmm, should we even reserve sentinels for after current? Callers can probably just use nil...
| * fix: nvim_open_tabpage cleanup, fixes, more testsSean Dewar2026-03-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Cleanup, remove redundant comments, add more tests. - Enhance win_new_tabpage rather than create a new function for !enter, and use a different approach that minimizes side-effects. Return the tabpage_T * and first win_T * it allocated. - Disallow during textlock, like other APIs that open windows. - Remove existing win_alloc_firstwin error handling from win_new_tabpage; it's not needed, and looks incorrect. (enter_tabpage is called for curtab, which is not the old tabpage! Plus newtp is not freed) - Fix checks after creating the tabpage: - Don't fail if buf wasn't set successfully; the tab page may still be valid regardless. Set buffer like nvim_open_win, possibly blocking Enter/Leave events. (except BufWinEnter) - tp_curwin may not be the initial window opened by win_new_tabpage. Use the win_T * it returns instead, which is the real first window it allocated, regardless of autocmd shenanigans. - Properly check whether tab page was freed; it may have also been freed before win_set_buf. Plus, it may not be safe to read its handle!
| * feat(api): add nvim_open_tabpageWill Hopkins2026-03-16
| | | | | | | | | | | | | | Problem: no API function for opening a new tab page and returning its handle, or to open without entering. Solution: add nvim_open_tabpage.
* | fix(diagnostic): open_float() handles config.float function #31577glepnir2026-03-16
|/ | | | | | | | Problem: The `float` field of vim.diagnostic.config can be a function, but diagnostic.open_float() does not handle it correctly. Solution: Add handling for it in open_float().
* feat(help): super K (":help!") guesses tag at cursor #36205Justin M. Keyes2026-03-15
| | | | | | | | | | | | | Problem: `K` in help files may fail in some noisy text. Example: (`fun(config: vim.lsp.ClientConfig): boolean`) ^cursor Solution: - `:help!` (bang, no args) activates DWIM behavior: tries `<cWORD>`, then trims punctuation until a valid tag is found. - Set `keywordprg=:help!` by default. - Does not affect `CTRL-]`, that is still fully "tags" based.
* fix(statusline): missing info/hint diagnostics #38307phanium2026-03-15
| | | | | Problem: default stl treat vim.diagnostics.count() return as array Solution: next() tell if a dict is empty
* fix(api): relax config validation for "win"Sean Dewar2026-03-14
| | | | | | | | | | | | | | | | Problem: only possible to move floats between tabpages if relative=win, which has the restrictive effect of also anchoring it to the target window. Solution: allow "win" without "relative" or "split"/"vertical". Only assume missing "win" is 0 if relative=win is given to maintain that behaviour. (or when configuring a new window) Also add an error when attempting to change a split into a float that's in another tabpage, as this isn't actually supported yet. (until the next commit) Maybe this could do with some bikeshedding. Unclear if "win" should require "relative" to be given, like with "row"/"col"; this can be annoying though as specifying "relative" requires other fields to be given too.
* refactor(treesitter): move range related functionsaltermo2026-03-14
|
* fix(lsp): handle non-string documentation in completion items #38291glepnir2026-03-14
| | | | | | | Problem: `get_doc` throws error with "attempt to get length of a userdata value" when `item.documentation` is truthy but not a string (e.g. vim.NIL from a JSON null). Solution: Check `type(item.documentation)` before taking its length.
* vim-patch:9.2.0155: filetype: ObjectScript are not recognized (#38288)zeertzjq2026-03-14
| | | | | | | | | | | | | | Problem: filetype: ObjectScript are not recognized Solution: Add ObjectScript filetype detection for *.cls files (Hannah Kimura)). Reference: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCOS_intro closes: vim/vim#19668 https://github.com/vim/vim/commit/b11c8efbe6981076194e00323737780330cfd0a1 Co-authored-by: Hannah <hannah.kimura@intersystems.com>
* refactor(treesitter)!: get_parser return nil on error #37276nikolightsaber2026-03-13
|
* refactor: rename _ensure_integer => _assert_integerJustin M. Keyes2026-03-13
|
* docs: miscJustin M. Keyes2026-03-13
|
* feat(diagnostic): custom status format function #36696Oleh Volynets2026-03-13
| | | | | | | Problem: Statusline component of diagnostics allows only the default format "sign:count". Solution: Extend vim.diagnostic.Opts.Status to allow a custom signs or formatting function that provides the status presentation.
* fix(ui2): use pager to list consecutively typed commands #38272luukvbaal2026-03-12
| | | | | | | | | | | | | | | | | Problem: Mimicked block mode for cmdline entered while expanded does not work intuitively for repeated commands yielding messages exceeding the screen height. The expanded cmdline resizes and scrolls to bottom/top when appending a message and entering the cmdline. Also includes the entered command, as opposed to the UI1 behavior. Crash when scrolling to bottom of pager due to recursive uv_run after shell message callback executes `nvim_command()` with 'showcmd'. Solution: Still mimic block mode when entering the expanded cmdline, but when the entered command emits a message open the pager with the current message content in the expanded cmdline. Always route typed commands to the pager when it is open. Use `nvim_buf_set_cursor()` instead of `nvim_command()`.
* refactor: integer functions, optimize asserts #34112Lewis Russell2026-03-12
| | | | | | | | | | | | refactor(lua): add integer coercion helpers Add vim._tointeger() and vim._ensure_integer(), including optional base support, and switch integer-only tonumber()/assert call sites in the Lua runtime to use them. This also cleans up related integer parsing in LSP, health, loader, URI, tohtml, and Treesitter code. supported by AI
* docs: use "ev" convention in event-handlersJustin M. Keyes2026-03-12
| | | | | | | | | Problem: In autocmd examples, using "args" as the event-object name is vague and may be confused with a user-command. Solution: Use "ev" as the conventional event-object name.
* docs: vimfn descriptionsJustin M. Keyes2026-03-12
|
* feat(startup): warn if NVIM_LOG_FILE is inaccessible #38070anondeveg2026-03-12
| | | | | | | | | | | | | | | | | Problem: If NVIM_LOG_FILE, or the default fallback, is inaccessible (e.g. directory is owned by root), users get confused. Solution: Show a warning when $NVIM_LOG_FILE or $XDG_STATE_HOME are inaccessible. Also fix a latent memory leak: `os_mkdir_recurse` returns a uv error code (int), but it was stored as `bool`, causing `os_strerror` to receive an invalid error code and leak memory. See: https://docs.libuv.org/en/v1.x/errors.html#c.uv_strerror Co-authored-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* fix(prompt): don't implicitly set 'modified' #38118Willaaaaaaa2026-03-11
| | | | | | | | | | | | | Problem: In aec3d7915c55fc0b7dc73f6186cf0ae45d416d33 Vim changed prompt-buffers to respect 'modified' so the termdebug plugin can "control closing the window". But for most use-cases (REPL, shell, AI "chat", …), prompt-buffers are in practice always "modified", and no way to "save" them, so *implicitly* setting 'modified' is noisy and annoying. Solution: Don't implicitly set 'modified' when a prompt-buffer is updated. Plugins/users can still explicitly set 'modified', which will then trigger the "E37: No write since last change" warning.
* fix(lsp): ensure augroup before querying autocmds #38254glepnir2026-03-11
|
* docs: miscJustin M. Keyes2026-03-11
| | | | | | | | | | | | | | | | | | | | | | | | | Close #37458 Close #37838 Close #37840 Close #37872 Close #37890 Close #38016 Close #38051 Close #38189 Close #38225 Close #38243 Close #38250 Co-authored-by: Colin Kennedy <colinvfx@gmail.com> Co-authored-by: "Mike J. McGuirk" <mike.j.mcguirk@gmail.com> Co-authored-by: Austin Rambo <ramboaustin13@gmail.com> Co-authored-by: Jonathan Birk <1965620+cafce25@users.noreply.github.com> Co-authored-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> Co-authored-by: Mike Smith <10135646+mikesmithgh@users.noreply.github.com> Co-authored-by: Saad Nadeem <saadndm.sn@gmail.com> Co-authored-by: brianhuster <phambinhanctb2004@gmail.com> Co-authored-by: zeertzjq <zeertzjq@outlook.com> Co-authored-by: Yi Ming <ofseed@foxmail.com>
* docs: deprecate hit-enterJustin M. Keyes2026-03-11
|
* docs: api, messages, lsp, trustJustin M. Keyes2026-03-11
| | | | | gen_vimdoc.lua: In prepare for the upcoming release, comment-out the "Experimental" warning for prerelease features.
* feat(lsp): do completionItem/resolve if completeopt=popup #32820glepnir2026-03-11
| | | | | | | | | Problem: No completionItem/resolve handler. Solution: If completeopt=popup is set, invoke completionItem/resolve when a completion item is selected. Show resolved documentation in popup next to the completion menu.
* Merge #37926 msg_show UI event indicates user-interactiveJustin M. Keyes2026-03-10
|\
| * feat(ui2): support routing "typed_cmd" trigger to targetLuuk van Baal2026-03-04
| | | | | | | | | | | | Problem: Unable to immediately open a typed command in the pager. Solution: Support mapping msg_show "typed_cmd" trigger in cfg.msg.targets (e.g. `targets = { typed_cmd = 'pager' }`).
* | feat(lsp): show snippet preview if completeopt=popup #32553glepnir2026-03-10
| | | | | | | | | | | | | | Problem: LSP completion does not show snippet preview. Solution: Show snippet preview if 'completeopt' includes popup.
* | feat(terminal): surface exit code via virttext + nvim_get_chan_info #37987Ayaan2026-03-10
| | | | | | | | | | | | | | | | | | | | Problem: When a terminal process exits, "[Process Exited]" text is added to the buffer contents. Solution: - Return `exitcode` field from `nvim_get_chan_info`. - Show it in the default 'statusline'. - Show exitcode as virtual text in the terminal buffer.
* | fix(lsp): do not clear the codelens on the last line #38226Yi Ming2026-03-10
| | | | | | | | | | | | | | Problem The logic that clears codelenses beyond the buffer also removes the codelenses on the last line. Solution Do not clear the codelens on the last line.
* | feat(extmark): support end_col=-1 if strict=false #28169Stefan Novaković2026-03-09
| | | | | | | | | | | | | | | | | | | | Problem: There is an inconsistency between extmarks/highlights regarding the `end_col` param. Solution: Allow end_col=-1 to mean "end of line" (if strict=false). Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* | Merge #38117 from noib3/fix-lua-lints-in-srcJustin M. Keyes2026-03-09
|\ \
| * | fix: define `vim.mpack`Riccardo Mazzarini2026-03-09
| | | | | | | | | | | | | | | We define vim.mpack so that LuaLS doesn't emit undefined-field warnings when using it, annotated with @nodoc to skip doc generation.
* | | Merge #37985 fix(lsp): adjust codelens position by range, ensure first-line ↵Justin M. Keyes2026-03-09
|\ \ \ | | | | | | | | | | | | visibility
| * | | fix(lsp): ensure the codelens on the first line is visibleYi Ming2026-03-08
| | | |
| * | | fix(lsp): adjust codelens position based on the server-provided rangeYi Ming2026-03-08
| | | |
* | | | docs(pack): simpify `update()` docs, fix directory path #38194Evgeni Chasnovski2026-03-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Documentation of `vim.pack.update()` contains a lot of text inside nested list. This might be a bit confusing to parse for humans and definitely confusing to parse for neovim.io. The description of `vim.pack` directory is not correct for Windows. Solution: Move description of confirmation buffer in a separate "subsection". Use '"data" standard path' instead of '$XDG_DATA_HOME/nvim' when documenting directory. Also use `|standard-path|` tag to link to standard path section instead of `|stdpath()|`.
* | | | fix(lsp): stop and close timer when `Capability` is destroyedYi Ming2026-03-09
| | | |
* | | | feat(treesitter): incremental selectionaltermo2026-03-08
|/ / / | | | | | | | | | Co-authored-by: György Andorka <gyorgy.andorka@protonmail.com>
* | | refactor(lua): adapt to Stylua 2.4.0Christian Clason2026-03-07
| | |
* | | fix(treesitter): escape hyphen in lua patternStefan VanBuren2026-03-07
| | | | | | | | | | | | Ref: https://github.com/neovim/neovim/pull/38140#discussion_r2897235978