Commit Graph

35862 Commits

Author SHA1 Message Date
glepnir
f2d0b06ecb fix(lsp): completion word includes leading space from label #38435
Problem: clangd prepends a space/bullet indicator to label. With
labelDetailsSupport enabled, the signature moves to labelDetails,
making label shorter. This flips the length comparison in
get_completion_word, causing it to use item.label directly and
insert the indicator into the buffer.

Solution: only prefer filterText over label when label starts with non-keyword
character in get_completion_word fallback branch.
2026-03-23 11:02:30 -04:00
dependabot[bot]
e2afa762c8 ci: bump actions/create-github-app-token #38436
Bumps the github-actions group with 1 update in the / directory: [actions/create-github-app-token](https://github.com/actions/create-github-app-token).


Updates `actions/create-github-app-token` from 2 to 3
- [Release notes](https://github.com/actions/create-github-app-token/releases)
- [Commits](https://github.com/actions/create-github-app-token/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/create-github-app-token
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-23 10:33:27 -04:00
Justin M. Keyes
3a3c6f0907 refactor: rename termcap.lua -> tty.lua #38437
Problem:
The `termcap.lua` module is too narrowly named. We may need a place for
tty-related functionality in the future.
https://github.com/neovim/neovim/pull/31399#discussion_r1882598297

Solution:
This isn't a public/documented interface, so just rename it.
2026-03-23 10:14:48 -04:00
Yochem van Rosmalen
710ec1280a test: ignore kuwasha.net url #38438
Problem:
Flagged by `make lintdocurls` on GitHub actions. Doesn't reproduce
locally, so probably blocks the action runner.

Solution:
Ignore it.
2026-03-23 09:19:35 -04:00
Justin M. Keyes
fc21433167 fix(session): spacebar heater not warm enough #38434
Problem:
vim-obsession depends on the exact string "let SessionLoad = 1" being
present in session files. ed9dfc7c2c/plugin/obsession.vim (L36-L41)

Solution:
Revert cosmetic change from e12a9e7c4e.
2026-03-23 08:09:33 -04:00
skewb1k
9a5641b4b5 fix(lua): drop support for boolean buf in vim.keymap #38432
Problem:
`vim.keymap.*.Opts.buf` allows `boolean` aliases for more widely
used `integer?` values, `true` -> `0` and `false` -> `nil`. This
conversion is unnecessary and can be handled at call sites.

Solution:
As a follow-up to deprecating the `buffer` option, drop support for
boolean values for the new `buf` option. The deprecated `buffer`
continues to support booleans for backward compatibility.
2026-03-23 08:00:53 -04:00
glepnir
4ed597389c fix(lsp): snippet preview blocked completionItem/resolve request #38428
Problem: Generating snippet preview in get_doc() populated the
documentation field before resolve, so the resolve request was
never sent.

Solution: Move snippet preview logic into on_completechanged and
the resolve callback so it no longer blocks the resolve request.
2026-03-23 07:57:36 -04:00
Barrett Ruth
d6a6eed4f3 feat(lsp): attach to buftype=help buffers #38412
Problem: `vim.lsp.enable()` skips all buffers with non-empty `buftype`,
including `help` buffers. LSPs targeting `filetype='help'` never
auto-attach despite help buffers being real files.

Solution: Expand the `buftype` guard in `lsp_enable_callback` to allow
`help` alongside `""`.
2026-03-23 07:30:35 -04:00
github-actions[bot]
d7e534d6b3 docs: update version.c #38304
vim-patch:9.2.0166: Coverity warning for potential NULL dereference
vim-patch:9.2.0170: channel: some issues in ch_listen()
vim-patch:9.2.0173: tests: Test_balloon_eval_term_visual is flaky
vim-patch:9.2.0177: Vim9: Can set environment variables in restricted mode
vim-patch:9.2.0183: channel: using deprecated networking APIs
vim-patch:9.2.0187: MS-Windows: rendering artifacts with DirectX renderer
vim-patch:2b70de167 CI: bump actions/upload-artifact to v7
vim-patch:a907a7f73 runtime(doc): disable color codes when generating ascii man pages in Makefile
vim-patch:c9e5aeff3 runtime(doc): Update Italian xxd manpage
vim-patch:9.2.0210: tests: Test_xxd tests are failing
vim-patch:9774651ec runtime(manpager): Strip OSC 8 hyperlink sequences in manpager plugin
vim-patch:9.2.0220: MS-Windows: some defined cannot be set on Cygwin/Mingw
vim-patch:9.2.0224: channel: 2 issues with out/err callbacks
vim-patch:243dcd1bc translation(it): Update Italian xxd man page
vim-patch:9.2.0230: popup: opacity not working accross vert splits
vim-patch:9.2.0231: Amiga: Link error for missing HAVE_LOCALE_H

vim-patch:9.2.0176: external diff is allowed in restricted mode
vim-patch:9.2.0188: Can set environment variables in restricted mode
vim-patch:9.2.0191: feat(has): add support for 'android' and 'termux' feature flags
2026-03-23 07:28:15 -04:00
Justin M. Keyes
59eadebe33 fix(runtime)!: move "tohtml" to pack/dist/opt/ #34557
Problem:
The "tohtml" plugin is loaded by default.

Solution:
- Move it to `pack/dist/opt/nvim.tohtml/`, it is an "opt-in" plugin now.
- Document guidelines.
- Also revert the `plugin/` locations of `spellfile.lua` and `net.lua`.
  That idea was not worth the trouble, it will be too much re-education
  for too little gain.
2026-03-23 06:41:00 -04:00
zeertzjq
0a60f32af3 refactor(move.c): fix coverity warning (#38427)
*** CID 645128:         Integer handling issues  (INTEGER_OVERFLOW)
/src/nvim/move.c: 2071             in scroll_cursor_bot()
2065           used += boff.height;
2066           if (used > wp->w_view_height) {
2067             break;
2068           }
2069           if (extra < (mouse_dragging > 0 ? mouse_dragging - 1 : so)
2070               || scrolled < min_scroll) {
>>>     CID 645128:         Integer handling issues  (INTEGER_OVERFLOW)
>>>     Expression "extra", where "boff.height" is known to be equal to 2147483647, overflows the type of "extra", which is type "int".
2071             extra += boff.height;
2072             if (boff.lnum >= wp->w_botline
2073                 || (boff.lnum + 1 == wp->w_botline
2074                     && boff.fill > wp->w_filler_rows)) {
2075               // Count screen lines that are below the window.
2076               scrolled += boff.height;
2026-03-23 03:30:17 +00:00
zeertzjq
e51f217be7 vim-patch:9.2.0223: Option handling for key:value suboptions is limited (#38426)
Problem:  Option handling for key:value suboptions is limited
Solution: Improve :set+=, :set-= and :set^= for options that use
          "key:value" pairs (Hirohito Higashi)

For comma-separated options with P_COLON (e.g., diffopt, listchars,
fillchars), :set += -= ^= now processes each comma-separated item
individually instead of treating the whole value as a single string.

For :set += and :set ^=:
- A "key:value" item where the key already exists with a different value:
  the old item is replaced.
- An exact duplicate item is left unchanged.
- A new item is appended (+=) or prepended (^=).

For :set -=:
- A "key:value" or "key:" item removes by key match regardless of value.
- A non-colon item removes by exact match.

This also handles multiple non-colon items (e.g., :set
diffopt-=filler,internal) by processing each item individually, making
the behavior order-independent.

Previously, :set += simply appended the value, causing duplicate keys to
accumulate.

fixes:  vim/vim#18495
closes: vim/vim#19783

e2f4e18437

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 10:13:48 +08:00
zeertzjq
fae782557c vim-patch:9.2.0226: No 'incsearch' highlighting support for :uniq (#38425)
Problem:  No 'incsearch' highlighting support for :uniq
Solution: Add :uniq support (Hirohito Higashi)

closes: vim/vim#19780

48137e4e48

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
2026-03-23 09:38:48 +08:00
zeertzjq
6cd1fe9a66 vim-patch:9.2.0225: runtime(compiler): No compiler plugin for just (#38424)
Problem:  runtime(compiler): No compiler plugin for just
Solution: Add a compiler plugin for the just command runner, add a test
          (Aditya Malik)

Sets makeprg and a custom errorformat to parse just's multi-line
error output into quickfix entries with file, line, column, and
message. Includes a test.

Reference:
- https://github.com/casey/just

closes: vim/vim#19773

e147b635fc

Co-authored-by: Aditya Malik <adityamalik2833@gmail.com>
2026-03-22 23:14:49 +00:00
zeertzjq
11b9ec38d2 vim-patch:9.2.0222: "zb" scrolls incorrectly with cursor on fold (#38423)
Problem:  "zb" scrolls incorrectly with cursor on fold.
Solution: Set w_botline to the line below the fold (zeertzjq).

related: neovim/neovim#38413
closes:  vim/vim#19785

5a3b75d67b
2026-03-23 07:12:08 +08:00
Maria Solano
471213ee61 revert: "feat(lsp): add buftypes field to vim.lsp.Config" #38421
revert: "feat(lsp): add `buftypes` field to `vim.lsp.Config` (#38380)"

This reverts commit cfcdbcf638.
2026-03-22 13:33:11 -04:00
Eisuke Kawashima
51aa64488d fix(provider): support python3.14 #38419
Co-authored-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
2026-03-22 09:20:04 -04:00
Justin M. Keyes
256811a617 Merge #38410 from justinmk/fix-numbered-list-html 2026-03-21 21:13:26 -04:00
Justin M. Keyes
e12a9e7c4e docs: starting.txt new layout 2026-03-22 01:57:28 +01:00
Justin M. Keyes
4397c4b117 fix(docs): improve adjacent list items
Problem:
List items separated by blank lines are wrapped in "blocks", then the
html generator does not treat them as contiguous list-items, and the
browser shows the list as "1. 1. 1." instead of "1. 2. 3.".

Solution:
- When generating a list-item, check if the last child of the previous
  block was a list-item, and merge them together.
- Massage the help source.

fix #37220
2026-03-22 01:57:28 +01:00
Barrett Ruth
cfcdbcf638 feat(lsp): add buftypes field to vim.lsp.Config (#38380)
Problem: `vim.lsp.enable()` skips buffers with `buftype` set, even when
`filetype` matches.

Solution: Add `buftypes` field to `vim.lsp.Config`.
2026-03-21 17:09:01 -07:00
KrrishJain
0db8efcbe4 fix(lsp): restore virtual document color visibility (#38407)
Problem: Default swatch unicode character got lost.

Solution: Put it back where it belongs.

---------

Co-authored-by: vnadgaonkar-spec <vnadgaonkar@gmail.com>
Co-authored-by: Christian Clason <ch.clason+github@icloud.com>
2026-03-22 00:34:44 +01:00
glepnir
cc518cf9ba feat(lsp): support CompletionItem.labelDetails #38403
Problem: CompletionItem.labelDetails is ignored, losing
function signatures and module info in the completion menu.

Solution: Append labelDetails.detail to abbr and use
labelDetails.description for menu with fallback to item.detail.

https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemLabelDetails
2026-03-21 19:07:26 -04:00
benarcher2691
2069be281c fix(mpack): boundary values for negative integer encoding #37255
Problem:
libmpack encodes boundary values -129 and -32769 with wrong integer
sizes:
- -129 as int8 instead of int16
- -32769 as int16 instead of int32
because the boundary checks compare against the wrong values (e.g., lo
< 0xffffff7f instead of lo < 0xffffff80). This caused data corruption:
-129 would decode as 127.

Solution:
Fix off-by-one errors in the two's complement boundary constants:
0xffffff80 (-128, min int8) and 0xffff8000 (-32768, min int16).

Fixes #37202

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-21 17:07:33 -04:00
skewb1k
4d3a67cd62 feat(lua): replace buffer with buf in vim.keymap.set/del #38360
The `buffer` option remains functional but is now undocumented.
Providing both will raise an error. Since providing `buf` was disallowed
before, there is no code that will break due to using `buffer` alongside
`buf`.
2026-03-21 12:00:06 -04:00
zeertzjq
a969e92249 vim-patch:9.2.0219: call stack can be corrupted (#38406)
Problem:  call stack can be corrupted, because calculated remaining
          capacity for call stack string can underflow (after v9.1.1983)
Solution: Calculate capacity against maximum capacity
          (Sergey Vlasov).

closes: vim/vim#19759

8e0483c2f4

Co-authored-by: Sergey Vlasov <sergey@vlasov.me>
2026-03-21 22:51:09 +08:00
luukvbaal
fbac2e5edc feat(ui2): configure maximum window heights #38392
Problem:
- Window height is set dynamically to match the text height,
  making it difficult for the user to use a different height.
- Cmdwin is closed to enter the pager but still taken into
  account for the pager position, and not restored when
  the pager is closed.
- Dialog pager handler may unnecessarily consume <Esc>.

Solution:
- Add maximum height config fields for each of the UI2 windows,
  where a number smaller than one is a fraction of 'lines',
  absolute height otherwise (i.e. `cfg.msg.pager.height = 0.5`).
- If the cmdwin will be closed to enter the pager, don't try
  to position the pager above it. Re-enter the cmdwin when the
  pager is closed.
- Only add vim.on_key() handler for the dialog paging is actually
  possible.
2026-03-21 10:20:06 -04:00
Sergei Slipchenko
7a5e9ef0aa fix(lsp/diagnostic): use diagnostic provider identifier for code actions #38401
Problem:
f9b2189b28 started using namespaces
for pull diagnostics that look like this `<id>:<identifier>`.
`vim.lsp.buf.codeaction` passes `true` instead of an identifier
to `vim.lsp.diagnostic.get_namespace`, resulting in a namespace that
looks like `<id>:nil`. The end result is that none of the diagnostics are
passed to `textDocument/codeAction` request. Because of that server
might not send any code actions back. For example, eslint lsp responds
with an empty list of actions if it receives no diagnostics.

Solution:
use `_provider_foreach` to collect diagnostics from all `identifiers`
and use that identifier to get a namespace instead of `true`.
2026-03-21 09:38:11 -04:00
Mark Landis
3dbba90ba7 build: update-alternatives during deb install #37980
Problem:
nvim is not added to the system alternatives index when installed via
the .deb package, requiring users to explicitly invoke nvim rather than
use 'vi' or 'vim' alternatives.

Solution:
Invoke update-alternatives in CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
steps.

Co-authored-by: Mark Landis <anonymouspage@limsei.com>
2026-03-21 04:50:47 -04:00
zeertzjq
0655a359ae vim-patch:9.2.0217: filetype: cto files are not recognized (#38400)
Problem:  filetype: cto files are not recognized
Solution: Detect *.cto as concerto filetype (Jamie Shorten)

Add filetype detection for the Concerto Modelling Language. Concerto
is a schema language by the Accord Project for defining data models
used in smart legal contracts and business networks.

Reference:
Language spec: https://concerto.accordproject.org
Tree-sitter grammar: https://github.com/accordproject/concerto-tree-sitter

closes: vim/vim#19760

68f9dedba4

Co-authored-by: Jamie Shorten <jamie@jamieshorten.com>
2026-03-21 08:50:15 +08:00
zeertzjq
6d84209eae vim-patch:ce4fbda: runtime(fish): Add matchit support to filetype plugin (#38399)
closes: vim/vim#19701

ce4fbda992

Co-authored-by: Phạm Bình An <phambinhanctb2004@gmail.com>
Co-authored-by: Doug Kearns <dougkearns@gmail.com>
2026-03-21 08:49:41 +08:00
zeertzjq
3c90cc1234 test(terminal/buffer_spec): increase timeout waiting for REP (#38398)
On Windows, 10000 milliseconds is sometimes not enough for 20000 lines
to be printed. Add 1 millisecond timeout for each printed line.
2026-03-21 07:42:27 +08:00
Justin M. Keyes
c257d8abed Merge #38370 from justinmk/doc2 2026-03-20 18:51:36 -04:00
tao
7be4e4dd65 fix(pty): prevent orphan conhost.exe on Windows 10 #38244
Problem:
On Windows 10, the ConPTY closing order is strict. Calling
ClosePseudoConsole after closing the output stream can easily
lead to accidental deadlocks, leaving orphan conhost.exe processes.
See https://learn.microsoft.com/en-us/windows/console/closepseudoconsole#remarks
and https://learn.microsoft.com/en-us/windows/console/creating-a-pseudoconsole-session#ending-the-pseudoconsole-session

Solution:
Based on the warning in the docs above, we need to call ClosePseudoConsole
on a separate thread first so that the output pipe can fully drain on
the main thread. Also, `wait_eof_timer` is outdated, so I removed it
to avoid extra cleanup logic around it (it was introduced in the
early winpty days).

Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
2026-03-20 18:42:41 -04:00
Justin M. Keyes
30f120ebc1 build(clangd): docstrings are Doxygen
Problem:
clangd treats our docstrings as Plaintext.

Solution:
Update `.clangd`.
2026-03-20 23:30:09 +01:00
Justin M. Keyes
2ce6d1b118 refactor(build): Makefile readability 2026-03-20 23:30:09 +01:00
Justin M. Keyes
e3a1e47bb2 docs: misc 2026-03-20 23:30:09 +01:00
Justin M. Keyes
cd71221250 fix(intro): crash on small screen #38397 2026-03-20 22:23:39 +00:00
altermo
bc00aec21c test(treesitter): skip unreliable select test #38391
The test sometimes(around 1/30) fails on PUC-lua.
2026-03-20 17:42:27 -04:00
Evgeni Chasnovski
3d37aa3116 fix(pack): account for Git's "insteadOf" in :checkhealth #38393
Problem: It is possible (and documented in `:h vim.pack`) that plugin's
  `src` uses "insteadOf" Git config. In that case comparing it directly
  to repo's `origin` will error.

Solution: Add extra check that lockfile's `src` is not equal to repo's
  `origin` when taking Git's "insteadOf" into account.

  However, still report the original lockfile's `src` in the
  `:checkhealth` output, as it seems to be a clearer indication of what
  actually is wrong.
2026-03-20 17:40:45 -04:00
Evgeni Chasnovski
9595f07425 feat(ux): sexy intro #38378
Problem: Intro is not sexy.

Solution: Make it sexy.

Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
2026-03-20 16:56:00 -04:00
Maria Solano
9986360065 docs: add comment on how [...]() behaves (#38389)
docs: add comment on how `[]()` behaves
2026-03-20 09:55:47 -07:00
Mathias Fussenegger
507cd63418 fix(lsp): handle completion/resolve response arriving after on_insert_leave
If a user accepts completion and immediately exits insert mode, it
could happen that `Context.cursor` was nil by the time the
`completion/resolve` response arrives, leading to an error.
2026-03-20 17:20:08 +01:00
Shadman
24684f90ea feat(progress): status api, 'statusline' integration #35428
Problem:
Default statusline doesn't show progress status.

Solution:
- Provide `vim.ui.progress_status()`.
- Include it in the default 'statusline'.

How it works:
Status text summarizes "running" progress messages.
 - If none: returns empty string
 - If one running item: "title:  percent%"
 - If multiple running items: "Progress: N items avg-percent%"
2026-03-20 07:18:20 -04:00
Justin M. Keyes
f9b2189b28 Merge #38047 _provider_foreach 2026-03-20 05:11:27 -04:00
Yochem van Rosmalen
72a63346d8 feat(stdlib): vim.fs.ext() returns file extension #36997
Problem:
Checking the extension of a file is done often, e.g. in Nvim's codebase
for differentiating Lua and Vimscript files in the runtime. The current
way to do this in Lua is (1) a Lua pattern match, which has pitfalls
such as not considering filenames starting with a dot, or (2)
fnamemodify() which is both hard to discover and hard to use / read if
not very familiar with the possible modifiers.

vim.fs.ext() returns the file extension including the leading dot of
the extension. Similar to the "file extension" implementation of many
other stdlibs (including fnamemodify(file, ":e")), a leading dot
doesn't indicate the start of the extension. E.g.: the .git folder in a
repository doesn't have the extension .git, but it simply has no
extension, similar to a folder named git or any other filename without
dot(s).
2026-03-20 05:08:00 -04:00
zeertzjq
1244fe157f vim-patch:ecf90b9: CI: make dependabot monitor .github/actions directory (#38383)
and also set `cooldown`, `groups`

related: vim/vim#19747
closes:  vim/vim#19756

ecf90b92f1

Co-authored-by: ichizok <gclient.gaap@gmail.com>
2026-03-20 17:02:21 +08:00
Yi Ming
29c6176f08 fix(lsp): unify LSP error logging prefixes #38354
Problem
The format of LSP log messages is inconsistent; some include underscores, while others are not logged at all.

Solution
Standardize log recording and unify the log message prefixes with the module names.
2026-03-20 04:51:36 -04:00
Tristan Knight
a8ffa6e323 fix(lsp): guard dynamic capability attachment #38382
Problem:
The capability attach path for client/registerCapability can initialize a capability even when the capability was only registered in specific buffers

Solution:
Check supports_method() before attaching capabilities from the dynamic registration handler so unsupported registrations are ignored.

AI-assisted: OpenCode
2026-03-20 04:48:19 -04:00
glepnir
24714c0d43 refactor(test): clean up pumborder round test cases #38368
Problem: pumborder round tests contained redundant.

Solution: Remove unnecessary test code.
2026-03-20 04:46:57 -04:00