Commit Graph

36772 Commits

Author SHA1 Message Date
Yi Ming
fecc151d03 fix(lsp): always respond to requests, even on handler error #40076
Problem:
We perform validations after the request handler is called.
When these validations fail, `error()` and `assert()` will prevent the
subsequent code from running, meaning the server will never receive a response.

Solution:
Always respond to requests.
2026-06-04 07:02:19 -04:00
bfredl
45d7201b83 Merge pull request #40048 from bfredl/noinstall
fix(build.zig): fixes and improvements
2026-06-04 12:36:37 +02:00
bfredl
d8e9593024 feat(build.zig): easier cross-complilation
invocation of cross-compilation changed, see news.txt blurb
2026-06-04 11:33:35 +02:00
bfredl
2a78df3a5a refactor(build.zig): no need to pass around b.graph.io next to b 2026-06-04 11:33:35 +02:00
bfredl
b9913e78cc build(ci): check zig fmt 2026-06-04 11:33:35 +02:00
bfredl
3f67dabcc7 fix(test): check for SIGINT between tests
when running `zig build functionaltest`, it might
take a while until the test harness nvim instance checks
for interrupts, which causes a lot of tests to keep running after
CTRL+C. Check after each test instead
2026-06-04 11:33:35 +02:00
bfredl
aceb0627c8 fix(build.zig): do not depend on b.install_path on configure time
This is in preparation of zig 0.17 where b.install_path is no
longer known inside `pub fn build()`.

Builds which should hardcode a runtime path into the binary has to specify it.
We could use a nlua0 helper to encode the install path at build time but
I think this is cleaner anyway. (like currently the appimage still
encodes a temporary build path which is nonsensical, it is better to
just include none)

Similarily b.args will not be available anymore (there will just
be an opaque pass-through)
2026-06-04 11:33:35 +02:00
dependabot[bot]
03f746e913 ci: bump the github-actions group across 1 directory with 2 updates
Bumps the github-actions group with 2 updates in the / directory: [actions/checkout](https://github.com/actions/checkout) and [github/codeql-action](https://github.com/github/codeql-action).


Updates `actions/checkout` from 6 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](https://github.com/actions/checkout/compare/v6...v6.0.2)

Updates `github/codeql-action` from 4.35.5 to 4.36.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.35.5...v4.36.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-04 10:28:00 +02:00
yilisharcs
10d0931d44 refactor(quickfix): remove duplicate unset of qf_ptr and qf_start (#40109)
Problem: in 'qf_free_items', 'qf_ptr' and 'qf_start' are set to NULL
         twice. this looks like a leftover from a previous refactor.

Solution: remove the first instance of both duplicates.
2026-06-04 05:51:22 +00:00
glepnir
5e3b655ad4 vim-patch:9.2.0591: 'scrolljump' ignored when scrolling up (#40106)
Problem:  srolljump=-100 only scrolls half a page going up, but works
          fine going down. update_topline() always falls back to
          scroll_cursor_halfway() when the cursor is far above topline.
Solution: Only center when sj is smaller than half the window. Otherwise
          call scroll_cursor_top like the downward path does (glepnir).

fixes:  vim/vim#1527
closes: vim/vim#20366

a4a60c0fdb
2026-06-04 06:21:59 +02:00
Justin M. Keyes
85b607d797 Merge #40088 from justinmk/doc2
docs: misc, lsp
2026-06-03 16:57:13 -04:00
zeertzjq
b6511b717a vim-patch:dec5b3a: runtime(doc): Update mapping descriptions (#40104)
closes: vim/vim#20411

dec5b3a72a

Co-authored-by: nyngwang <nyngwang@gmail.com>
2026-06-03 20:28:41 +00:00
zeertzjq
845616ee93 vim-patch:8eceeba: runtime(kitty): Fix regex for kittyMapSeq region (#40103)
closes: vim/vim#20422

8eceebae71

Co-authored-by: bbnolauv <86621528+bbnolauv@users.noreply.github.com>
2026-06-03 22:12:22 +02:00
zeertzjq
fa5ed94852 vim-patch:9.2.0589: filetype: xinitrc files are not recognized (#40102)
Problem:  filetype: xinitrc files are not recognized
Solution: Detect xinitrc and xserverrc files as sh filetype
          (Enrico Maria De Angelis)

Reference:
https://wiki.archlinux.org/title/Xinit#Configuration

closes: vim/vim#20419

5b76ddcc52

Co-authored-by: Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com>
2026-06-03 22:12:11 +02:00
Tomasz N
2f577f7c5c fix(messages): no prompt/newlines for ext_messages filter command #39786)
Problem:  Redundant newlines and "Press any key" prompt with ext_messages
          for Visual filter command.

Solution: Remove newlines and prompt with ext_messages.
2026-06-03 10:20:28 -04:00
Justin M. Keyes
cbadc4f164 docs: misc, lsp
Problem:
This doc on `vim.lsp.completion.get()`:

    --- Used by the default LSP |omnicompletion| provider |vim.lsp.omnifunc()|, thus |i_CTRL-X_CTRL-O|
    --- invokes this in LSP-enabled buffers. Use CTRL-Y to select an item from the completion menu.
    --- |complete_CTRL-Y|

...makes two wrong claims:

1. "Used by the default LSP omnicompletion provider vim.lsp.omnifunc()"
    - `_omnifunc` does not call `M.get()`, it calls the internal `trigger()` directly.
2. "thus |i_CTRL-X_CTRL-O| invokes this in LSP-enabled buffers"
    - The two paths use different client sets:
        - `M.get()` reads `buf_handles[bufnr].clients` (clients
          explicitly registered via `vim.lsp.completion.enable(true, ...)`).
        - `_omnifunc` reads `lsp.get_clients({method='textDocument/completion'})` (every
          completion client, regardless of `enable()`).

Solution:
Update docs.

Co-authored-by: Koichi Shiraishi <zchee.io@gmail.com>
Co-authored-by: y9san9 / Alex Sokol <y9san9@gmail.com>
Co-authored-by: adv0r <>
2026-06-03 12:27:30 +02:00
Justin M. Keyes
5cff3c0b97 refactor: drop os_fileid_equal_fileinfo 2026-06-03 12:26:31 +02:00
github-actions[bot]
1c0ffbcc9f docs: update version.c #40055
vim-patch:9.0.0887: cannot easily try out what codes various keys produce
vim-patch:9.0.0889: keycode check script has a few flaws
vim-patch:9.0.0955: libvterm does not support the XTQMODKEYS request
vim-patch:9.2.0556: GTK4: scrollbars not shown and do not respond to clicks
vim-patch:9.2.0563: GTK3/Wayland: crash with right mouse-button in tabline
vim-patch:9.2.0564: GTK4: tabline does not respond to mouse clicks
vim-patch:0e8cf80ca CI: Bump github/codeql-action
vim-patch:9.2.0569: out-of-bounds access in libvterm CSI 8 t resize
vim-patch:9.2.0570: GTK4: mouse wheel scrolling does not work correctly
vim-patch:9.2.0571: Vim9: memory leak in compile_nested_function() on failure
vim-patch:905312e0e NSIS: Fix 32-bit context menu
vim-patch:9.2.0574: tests: missing test for v9.2.0572
vim-patch:9.2.0577: GTK4: window resizing issues
vim-patch:9.2.0578: GTK4: :unmenu does not remove entries from the menubar
vim-patch:9.2.0580: xxd: binary output is not colored with -R
vim-patch:b7d07d3e8 translation(it): Update Italian xxd man page
vim-patch:9.2.0584: GTK4: missing UI features
vim-patch:9.2.0587: GTK4: left scrollbar overlaps drawarea
vim-patch:9.2.0588: GTK4: drawing area loses focus after closing a menubar popover
2026-06-03 05:45:43 -04:00
tao
13b2b14275 fix(path): prevent infinite loop when re-editing file without drive-letter
Problem:
Edit a file with a drive-letter path, then re-edit it without the drive letter
and colon. This cause `path_fnamencmp` to loop infinitely as `len` never
reaches 0, while `c1` and `c2` are already NUL.

Commit e18a578 accidentally used || before `(p_fic`, commit 4bcee96 fixed that,
but also moved the NUL check into a grouped condition. The bug remained hidden
because there weren't any cases where strings had different lengths and c1 and
c2 could both reach NUL. `c:/foo` vs `/foo` happens to be such a case, which is
why the infinite loop finally showed up.

Solution:
Break the loop when either `c1` or `c2` is NUL.
2026-06-02 18:59:13 -04:00
Artem Krinitsyn
738cd366f9 fix(diagnostic): stack _tags hl-groups in a single extmark #38654
Problem:
Diagnostic highlight groups were applied by iterating and calling
`vim.hl.range` for each group individually. That resulted in multiple
extmarks with the same priority being created separately, which does not
allow `DiagnosticUnnecessary` and `DiagnosticDeprecated` with matching
options override `Diagnostic*` styling.

Solution:
Pass the list of hl-groups to `vim.hl.range` so they are applied
together in the correct order.
2026-06-02 18:36:03 -04:00
Yi Ming
cf9ad39267 fix(lsp): handle requests with null id #40073
Problem:
PR #38340 prevented messages we receive with id:null from being
incorrectly classified as notifications, but caused us to ignore all
messages with id:null, including requests.

Solution:
Handle requests with id:null. When we receive a request, we only need to
respond based on the `method` and `param`.

(The original so-called `notification_received` in the test was actually
semantically `request_or_notification_received`.)
2026-06-02 17:39:56 -04:00
zeertzjq
31a8bf1a63 vim-patch:de18ef6: runtime(doc): Tweak documentation style (#40093)
closes: vim/vim#20412

de18ef6284

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
2026-06-02 18:55:44 +00:00
zeertzjq
5a8e4cc5fa vim-patch:9.2.0581: After maximizing and deleting the quickfix buffer, window height is wrong (#40092)
Problem:  After maximizing and deleting the quickfix buffer, window
          height is wrong (tertium)
Solution: Reset the winfixheight option when a quickfix buffer is
          deleted from a window (Yegappan Lakshmanan)

fixes:  vim/vim#3378
closes: vim/vim#20403

07f055f579

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2026-06-02 18:30:20 +00:00
zeertzjq
75ee4272a6 vim-patch:7895c9e: runtime(vim): Update ftplugin, add heredocs to b:match_words (#40091)
This depends on chrisbra/matchit#61 for full support of non-alphnum
heredoc markers.

closes: vim/vim#20399

7895c9e6b8

Co-authored-by: Doug Kearns <dougkearns@gmail.com>
2026-06-02 16:55:20 +00:00
Kevin
d0c7f870c2 refactor(docs): extract HTML-specific bits from gen_help_html #39946
Problem:
We'd like to export a PDF version of the user manual
(https://github.com/neovim/neovim.github.io/issues/477), but
`gen_help_html.lua` assumes an HTML output in several places.

Solution:
- Make gen() take an output param
- Rename gen_one() -> gen_one_html()
- Rename visit_node() -> ts_node_to_html()
- Add a mapping to gen() that calls the correct gen_one*() function.

This prepares the addition of new methods for Typst output.
2026-06-02 10:28:01 -04:00
Justin M. Keyes
7f233449f1 Merge #40083 from ofseed/pos-get-lines-improve
fix(pos): various improvements on `pos._util.get_lines()`
2026-06-02 09:56:49 -04:00
Justin M. Keyes
70f8c7bbf3 Merge #40057 from luukvbaal/hidenodraw
perf(redraw): don't redraw hidden windows
2026-06-02 08:51:08 -04:00
Yi Ming
a7408beae3 refactor(net): parameterize transport logging #40022 2026-06-02 08:41:36 -04:00
zeertzjq
dcf36e613b vim-patch:e9f8e0f: runtime(matchit): Update matchit plugin (#40085)
e9f8e0fcbe

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-02 12:17:33 +00:00
bfredl
772cfcf267 Merge pull request #39074 from bfredl/retromania
build(zig): run oldtests in zig builds (RETROMANIA HYPERDRIVE)
2026-06-02 12:34:40 +02:00
Yi Ming
241a725e17 fix(pos): get_lines() return empty table when file opening fails
Problem:
`get_lines()` may returns empty table when file opening fails,
so every existing caller use `get_line() or ''` to avoid nil result.

This also does not match the annotated return type of `get_line()`,
which is `string` instead of `string?`.

Solution:
Make `get_line()` return empty string when file opening fails.
2026-06-02 18:17:03 +08:00
Yi Ming
5beb751ef5 fix(pos): get_lines() never correctly fallbacks to empty string
Problem:
`nvim_buf_get_lines` will always returns a table,
so the `or` operator will never be used, letting `lines[row]` may be `nil`

Solution:
Fix it.
2026-06-02 18:15:48 +08:00
Yi Ming
d369979328 refactor(pos): remove unnecessary code of get_lines(), tidy up
Problem:
`get_lines()` actually supports passing a `integer` instead of `integer[]`,
but it is never used in this way, we use `get_line()` instead.

Solution:
Fix it. Also rename some variables to align with our current naming convention
and use `vim.fn.readblob()` instead  of a bunch of `uv` calls.
2026-06-02 18:15:44 +08:00
bfredl
49dc3d9424 build(zig): run oldtests in zig builds with new lua runner
The new lua based runner replaces Makefile, runnvim.sh and runnvim.vim

As it happens, we run a `--headless` nvim inside a `:terminal` layer,
this is pointless.
Also there is still a lot remnants for oldesttests, but we don't
have any except for test1.in which just checks the environment
for following, nonexistant oldesttests. so just skip that.

For now, the actual vimscript code which runs in vim-under-test is
completely unchanged.

On macos, luajit is finally working with the latest ziglua master.
Also fix some minor bugs regarding locales, such as incorrect
HAVE_WORKING_LIBINTL checks
2026-06-02 11:12:11 +02:00
zeertzjq
c18373d9b8 Merge pull request #40082 from zeertzjq/vim-bcb8dac
vim-patch: syntax file updates
2026-06-02 16:45:57 +08:00
zeertzjq
c1253d6f95 vim-patch:fd30a73: runtime(cpp): recognize C++23 stdfloat types
Add float16_t, float32_t, float64_t, float128_t and bfloat16_t from
<stdfloat> as cppType under a new cpp_no_cpp23 guard.

fixes:  vim/vim#16498
closes: vim/vim#20367

fd30a736cc

Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
2026-06-02 07:39:05 +02:00
zeertzjq
6ca94cb8fb vim-patch:77b2376: runtime(c): classify type qualifiers, function specifiers and C23 attributes
Move const, volatile, restrict and _Atomic to a new cTypeQualifier group
and inline and _Noreturn to cFunctionSpec. Add the C23 standard attributes
deprecated, fallthrough, maybe_unused, nodiscard, unsequenced and
reproducible as cStandardAttribute, and reclassify the existing noreturn
into the same group.

The new groups link to cStorageClass, so the default highlighting and any
existing cStorageClass override are unchanged, while allowing finer-grained
customization.

fixes:  vim/vim#19574
closes: vim/vim#20368

77b2376769

Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
2026-06-02 07:38:07 +02:00
zeertzjq
1547089390 vim-patch:bcb8dac: runtime(sgf): Include sgf syntax script
closes: vim/vim#20380

bcb8dacb6d

Co-authored-by: Borys Lykah <lykahb@fastmail.com>
2026-06-02 07:37:42 +02:00
glepnir
a5d4b4e0fc vim-patch:9.2.0585: line number wrong after undoing a deletion in quickfix buffer (#40081)
Problem:  Deleting a quickfix line and undoing it leaves the entry
          pointing one line below where it should.
Solution: Don't shift already cleared entries in qf_mark_adjust.

closes: vim/vim#20379

64982d6010
2026-06-02 07:30:12 +02:00
glepnir
6b6efb37eb vim-patch:9.2.0583: completion: indent not ignored for fuzzy line completion (#40080)
Problem:  Indent is not stripped in whole-line completion (CTRL-X
          CTRL-L).
Solution: Skip the matched line's indent for whole-line matches in
          search_for_fuzzy_match (glepnir).

closes: vim/vim#20405

9fa5f64135
2026-06-02 07:28:23 +02:00
bfredl
fb5aad1d07 Merge pull request #40008 from Rawan10101/feat/wasm-emscripten-zig016
build: add wasm/emscripten build support
2026-06-01 20:36:58 +02:00
Rawan10101
674f3ab4d6 build: add wasm/emscripten build support
- Add is_wasm detection for wasm32-emscripten target
- Add -Demscripten-sysroot option and libc path setup
- Default cross_compiling=true for wasm
- Use lua5.1 instead of luajit for wasm (luajit unsupported)
- Add emscripten include paths to all dependencies
- Build nvim as static library for wasm target
- Add emcc link step with Asyncify and SUPPORT_LONGJMP
- Filter wasm_stubs.c from non-wasm builds

Known limitation: setjmp/longjmp not yet fully functional
due to Zig compiling dependencies outside emcc pipeline.

build: fix wasm emscripten output path tracking
2026-06-01 16:10:27 +03:00
zeertzjq
edcaf1887a vim-patch:partial:9.2.0573: Vim9: missing EX_WHOLE on some block keywords (#40071)
Problem:  Several Vim9 keywords lack EX_WHOLE and can be shortened in
          Vim9 script, inconsistent with endif/enddef/endfor/endwhile/
          endtry which already have it.  The error from :endd in a
          nested function also hardcodes "enddef" instead of reporting
          what the user typed.  fullcommand("ho") returns "horizontal"
          even though :ho is below the documented 3-char minimum.
Solution: Add EX_WHOLE to :class, :def, :endclass, :endinterface,
          :endenum, :public and :static.  In get_function_body() pass
          the user-typed command to the error message.  Force :ho to
          CMD_SIZE in find_ex_command() so fullcommand() reflects the
          modifier minimum.  Extend tests and documentation accordingly
          (Peter Kenny).

fixes:  vim/vim#20032
closes: vim/vim#20191

38d9a16eba

Co-authored-by: Peter Kenny <github.com@k1w1.cyou>
2026-06-01 01:04:30 +00:00
zeertzjq
71a02e261d vim-patch:9.2.0575: tests: filetype test for v9.2.0557 can be improved (#40070)
Problem:  tests: filetype test for v9.2.0557 can be improved
Solution: Use a correct Kawasaki robot AS test file
          (Patrick Meiser-Knosowski)

related: vim/vim#20370
closes:  vim/vim#20387

0878792046

Co-authored-by: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de>
2026-06-01 08:46:34 +08:00
Luuk van Baal
9cf684ed7d fix(float): validate conflicts for nvim_win_set_config()
Problem:  nvim_win_set_config() does not error on flags not allowed for
          non-floating windows.
          `hide` should not be allowed for non-floating windows.
Solution: Check that a window is a split when reconfiguring.
          Error when trying to hide a split window.
2026-06-01 01:02:01 +02:00
Luuk van Baal
1ca65faca6 test(screen_basic_spec): use default highlight attrs 2026-05-31 23:18:53 +02:00
Luuk van Baal
253378f86a perf(redraw): don't redraw hidden windows
Problem:  Hidden windows are redrawn unnecessarily.
Solution: If a window is hidden, don't bother drawing it.
2026-05-31 23:15:39 +02:00
zeertzjq
3f4a108cf4 vim-patch:9.2.0568: pythoncomplete: g:pythoncomplete_allow_import had no effect (#40067)
Problem:  The security patch 9.2.0561 added a vim.eval() call inside
          Completer.evalsource() to honor g:pythoncomplete_allow_import.
          But the 'vim' module is only imported inside the outer
          vimcomplete() / vimpy3complete() function, not at the script's
          top level, so referring to it from a Completer method raises
          NameError.  The surrounding bare 'except' silently swallows
          the error and leaves allow_imports at 0, meaning the opt-in
          never takes effect -- 'import os' (and any other
          buffer-level import) is always skipped, no candidates are
          produced for 'os.<...>' and
          Test_popup_and_preview_autocommand() fails on the Windows
          CI matrix (Linux skips the test because Python 2 is absent).
Solution: Re-import 'vim' at the top of evalsource() in both
          pythoncomplete.vim and python3complete.vim so the eval reads
          the global, and set g:pythoncomplete_allow_import = 1 in the
          test (it is the opt-in intended for callers that trust the
          buffer contents) (thinca).

closes: vim/vim#20386

868ad62cb8

Co-authored-by: thinca <thinca@gmail.com>
2026-05-31 13:00:32 +00:00
zeertzjq
f8a56a8439 vim-patch:6de842c: runtime(autoload): consistently align with TABs in README.txt
closes: vim/vim#20378

6de842c273
2026-05-31 09:36:07 +08:00
zeertzjq
b6a018e54f vim-patch:3b0a32d: runtime(pilrc): fix typo country names in pilrcCountry syntax list
Corrected "Indian" to "India" for accurate naming.

closes: vim/vim#20369

3b0a32d7d8

Co-authored-by: Shuo Wang <wangshuo@kylinos.cn>
2026-05-31 09:36:07 +08:00