Commit Graph

34856 Commits

Author SHA1 Message Date
altermo
170992c8d2 test(tohtml): test syntax, not just treesitter #37181 2025-12-31 18:00:05 -05:00
Christian Clason
f3ee2440c7 build(deps): bump tree-sitter-lua to v0.4.1 2025-12-31 16:49:24 +01:00
zeertzjq
bd10f781b8 vim-patch:9.1.2035: filetype: filetype: Fennel fnlm files are not recognized (#37178)
Problem:  filetype: Fennel fnlm files are not recognized
          (Alexei Mozaidze, after v9.1.2034)
Solution: Detect *.fnlm files as fennel filetype, revert detecting
          *.fnml files

related: vim/vim#19047

ea189a6f4d

Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-12-31 20:25:19 +08:00
zeertzjq
dddb125b0b vim-patch:5c2b594: runtime(rust): Update indentation after nested array literal (#37177)
fixes:  vim/vim#18974
closes: vim/vim#19042

5c2b594d0e

Co-authored-by: Brian Carbone <brian@briancarbone.com>
2025-12-31 10:53:06 +00:00
zeertzjq
8e80e54478 vim-patch:9.1.2034: filetype: Fennel fnml files are not recognized (#37176)
Problem:  filetype: Fennel fnml files are not recognized
          (Alexei Mozaidze)
Solution: Detect *.fnml files as fennel filetype

Reference:
- https://fennel-lang.org/changelog#160--2025-10-13

fixes: vim/vim#19047

9c87af5c3c

Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-12-31 10:39:50 +00:00
Christian Clason
f4f60f6a19 build(deps): bump utf8proc to v2.11.3 2025-12-30 18:28:31 +01:00
Peter Cardenas
f8ac713448 fix(treesitter): use metadata in :EditQuery captures #37116
Problem:
When the `#offset!` directive is used with `:EditQuery`, the query does not take the offset into consideration when creating the extmark to preview the capture.

Solution:
Use the capture metadata to modify the node range before creating the extmark.
2025-12-30 10:44:18 -05:00
Justin M. Keyes
b24522e77b Merge #37113 from echasnovski/pack-better-revert 2025-12-30 10:40:19 -05:00
glepnir
9833f0da5f fix(diagnostic): unstable sorting by severity #37154
Problem: random order for same-severity diagnostics, severity_sort reversed.

Solution: add stable comparison with _extmark_id tiebreaker.
2025-12-30 04:28:32 -05:00
Justin M. Keyes
ea3562d739 Merge #37142 from echasnovski/pack-safer-del 2025-12-30 04:20:33 -05:00
Phạm Bình An
f8d0190491 docs(prompt): Lua example, adjust for multiline input #37121 2025-12-30 03:57:35 -05:00
Justin M. Keyes
10b610bbd9 Merge #36870 from justinmk/luacore 2025-12-30 02:11:00 -05:00
github-actions[bot]
b97db3f8b7 docs: update version.c #37105
vim-patch:9.1.2018: proto: ops.pro outdated
vim-patch:08aaa7ae1 runtime(doc): remove some fixed items from todo.txt
vim-patch:ea2b98b9e runtime(indent-tests): Include a simple Rust indent test
vim-patch:9.1.2031: Makefile: cannot run make installinks twice

vim-patch:8.2.0827: Vim9: crash in :defcompile
vim-patch:8.2.1643: Vim9: :defcompile compiles dead functions
vim-patch:8.2.1750: popup_setoptions() setting firstline fails if cursorline set
vim-patch:8.2.4947: text properties not adjusted when accepting spell suggestion
vim-patch:8.2.4989: cannot specify a function name for :defcompile
vim-patch:8.2.4990: memory leak when :defcompile fails

vim-patch:9.0.0147: cursor positioned wrong after two "below" text properties
vim-patch:9.0.0168: cursor positioned wrong with two virtual text properties
vim-patch:9.0.0233: removing multiple text properties takes many calls
vim-patch:9.0.0243: text properties "below" sort differently on MS-Windows
vim-patch:9.0.0464: with virtual text "above" indenting doesn't work well
vim-patch:9.0.0466: virtual text wrong after adding line break after line

vim-patch:9.1.0020: Vim9: cannot compile all methods in a class
vim-patch:9.1.0189: Memory leak with "above" virttext and 'relativenumber'
vim-patch:9.1.1654: build failure when FEAT_DIFF is not defined
vim-patch:9.1.1925: make depend does not include osdef.h
2025-12-30 02:07:11 -05:00
Jason Shipman
825e182139 fix(vim.fs): avoid fn.fnamemodify in fs.root #37162
Problem: vim.fs.root uses vim.fn.fnamemodify. vim.fn table isn't
available from nvim -ll or thread contexts.

Solution: Swap out vim.fn.fnamemodify for vim.fs.abspath.

This is a temporary workaround and may be reverted since the
long-term plan is to use more fast=true "fn" functions from vim.fs
where possible.
2025-12-30 01:57:06 -05:00
Justin M. Keyes
1d70c96e5b build: move shared.lua to _core/ 2025-12-30 01:44:52 -05:00
Justin M. Keyes
20e77c5d88 build: ship "_core/*" as bytecode (built-into Nvim binary)
Problem:
We want to encourage implementing core features in Lua instead of C, but
it's clumsy because:
- Core Lua code (built into `nvim` so it is available even if VIMRUNTIME
  is missing/invalid) requires manually updating CMakeLists.txt, or
  stuffing it into `_editor.lua`.
- Core Lua modules are not organized similar to C modules, `_editor.lua`
  is getting too big.

Solution:
- Introduce `_core/` where core Lua code can live. All Lua modules added
  there will automatically be included as bytecode in the `nvim` binary.
- Move these core modules into `_core/*`:
  ```
  _defaults.lua
  _editor.lua
  _options.lua
  _system.lua
  shared.lua
  ```

TODO:
- Move `_extui/ => _core/ui2/`
2025-12-30 01:44:24 -05:00
Kyle
03377b9552 feat(terminal): include sequence terminator in TermRequest event (#37152)
Problem:
Terminals should respond with the terminator (either BEL or ST) used in
the query so that clients can reliably parse the responses. The
`TermRequest` autocmd used to handle background color requests in the
terminal does not have access to the original sequence terminator, so it
always uses BEL. #37018

Solution:
Update vterm parsing to include the terminator type, then forward this
data into the emitted `TermRequest` events for OSC/DCS/APC sequences.
Update the foreground/background `TermRequest` callback to use the same
terminator as the original request.

Details:
I didn't add the terminator to the `TermResponse` event. However, I
assume the `TermResponse` event doesn't care about the terminator
because the sequence is already parsed. I also didn't update any of the
functions in `src/nvim/vterm/state.c` that write out responses. It
looked like those all pretty much used ST, and it would be a much larger
set of changes. In that same file, there's also logic for 8 bit ST
sequences, but from what I can tell, 8 bit doesn't really work (see `:h
xterm-8bit`), so I didn't use the 8 bit ST at all.
2025-12-29 16:30:23 -06:00
zeertzjq
ddd6ac5083 vim-patch:1bc3610: runtime(rust): partly revert e426245b, it causes more issues than it solves (#37156)
related: vim/vim#18974

1bc3610b0a

Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-12-29 17:07:26 +08:00
zeertzjq
e916f03277 vim-patch:9.1.2030: inefficient use of ga_concat() (#37151)
Problem:  inefficient use of ga_concat()
Solution: Use ga_concat_len() when length is known.
          (John Marriott)

closes: vim/vim#19027

32b801abc3

Co-authored-by: John Marriott <basilisk@internode.on.net>
2025-12-29 07:56:45 +08:00
Evgeni Chasnovski
28ba99e026 feat(pack)!: suggest "delete" code action only for not active plugins
Problem: Deleting active plugins can lead to a situation when it is
  reinstalled after restart.

Solution: Suggest "delete" code action only for not active plugins.
  Whether a plugin is not active is visible by a hint in its header.
2025-12-28 18:39:26 +02:00
Evgeni Chasnovski
c339b83a4a feat(pack): hint in confirmation buffer that plugin is not active
Problem: After `vim.pack.update()` it is not clear if plugin is active
  or not. This can be useful to detect cases when plugin was removed
  from 'init.lua' but there was no `vim.pack.del()`.

Solution: Add ` (not active)` suffix with distinctive highlighting to
  header of plugins that are not active.
  It will also be shown in in-process LSP document symbols to have quick
  reference about which plugins are not active.
2025-12-28 18:39:26 +02:00
Evgeni Chasnovski
f5707a9c42 feat(pack)!: make del() only remove non-active plugins by default
Problem: Using `vim.pack.del()` to delete active plugin can lead to
  a situation when this plugin is reinstalled after restart. Removing
  plugin from 'init.lua' is documented, but can be missed.

Solution: Make `del()` only remove non-active plugins by default and
  throw an informative error if there is an active plugin.

  Add a way to force delete any plugin by adding `opts.force`. This also
  makes `del()` signature be the same as other functions, which is nice.
2025-12-28 18:39:26 +02:00
zeertzjq
c53fb58c15 vim-patch:e426245: runtime(rust): clean-up indent script, handle opening empty line correctly (#37139)
fixes: vim/vim#18974

e426245bb3

Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-12-28 22:39:44 +08:00
Jan Edmund Lazo
c81f7aeee2 vim-patch:8.2.0098: exe stack length can be wrong without being detected (#37136)
Problem:    Exe stack length can be wrong without being detected.
Solution:   Add a check when ABORT_ON_INTERNAL_ERROR is defined.

e31ee86859

vim-patch:8.2.3262: build failure when ABORT_ON_INTERNAL_ERROR is defined

Port patch 9.0.1454 for "make formatc".

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-12-28 14:26:29 +08:00
zeertzjq
444e1ffe3e vim-patch:9.1.2028: [security]: Buffer-overflow with incomplete multi-byte chars (#37133)
Problem:  Buffer overflow in buf_write() when converting incomplete
          multi-byte characters (Kevin Goodsell)
Solution: Make the buffer slightly larger

closes: vim/vim#19007

f99de42a9f

Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-12-28 00:37:55 +00:00
zeertzjq
80a8c3d23b vim-patch:ee3f10a: runtime(bpftrace): add indention plugin (#37132)
Problem:  No indention support when editing bpftrace files.
Solution: Add indention settings based on cindent with custom options.

closes: vim/vim#19030

ee3f10af87

Co-authored-by: Stanislaw Gruszka <stf_xl@wp.pl>
2025-12-28 00:20:42 +00:00
zeertzjq
5670dde1af vim-patch:a7f703c: runtime(doc): improve :catch documentation (#37131)
related: vim/vim#18984
closes:  vim/vim#19029

a7f703c215

Co-authored-by: Mao-Yining <101858210+mao-yining@users.noreply.github.com>
2025-12-28 08:18:48 +08:00
zeertzjq
7f1d7271d5 vim-patch:9.1.2027: filetype: bicep filetype used for 2 bicep file types (#37130)
Problem:  filetype: bicep filetype used for 2 bicep file types
Solution: Detect *.bicepparam files as bicep-param filetype, include
          new bicep-params and bicep filetype plugin
          (Scott McKendry)

The bicep language server handles parameter files differently than
regular bicep files. Treating them the same at the editor level leads to
false positive diagnostics in the editor.

References:

Bicep Language Constants:
- 51392d32ca/src/Bicep.Core/LanguageConstants.cs (L23)
VS Code Extension definition:
- 51392d32ca/src/vscode-bicep/package.json (L47)

closes: vim/vim#19026

4e722fdfdd

Co-authored-by: Scott McKendry <me@scottmckendry.tech>
2025-12-28 00:16:20 +00:00
zeertzjq
1e44a001ec vim-patch:9.1.2024: 'fsync' option cannot be set per buffer (#37129)
Problem:  'fsync' option cannot be set per buffer
Solution: Make 'fsync' option global-local
          (glepnir)

closes: vim/vim#19019

4d5b303726

Co-authored-by: glepnir <glephunter@gmail.com>
2025-12-28 08:14:45 +08:00
zeertzjq
ab5a92bff6 Merge pull request #37128 from zeertzjq/vim-9.1.2019
vim-patch:9.1.{2019,2026}
2025-12-28 07:20:15 +08:00
zeertzjq
f4eabcca4f vim-patch:9.1.2026: tests: patch 9.1.2019 not tested properly
Problem:  tests: patch 9.1.2019 not tested properly.
Solution: Add missing :exe (zeertzjq).

closes: vim/vim#19028

78046cc539
2025-12-28 07:02:03 +08:00
zeertzjq
e53accf8ec vim-patch:9.1.2019: inconsistent cursor encoding past EOL with ve=all
Problem:  When virtualedit is set to all, the cursor is supposed to be
          permitted to reside anywhere, including on the virtual space
          beyond the end of the buffer's text. Switching modes triggered
          a routine that "fixed" a cursor that was past the end of the
          line by shifting it back to the last actual character in the
          line and compensating with a virtual column offset. While
          visually identical, this re-encoding changed the underlying
          byte index, causing position-reporting functions to return
          inconsistent values after a mode change.
Solution: Skip this coordinate adjustment when virtual editing is fully
          enabled. By treating the line terminator as a valid, stable
          position, the cursor’s internal representation remains
          unchanged when entering or exiting Visual mode, ensuring
          consistent coordinate reporting. Add a regression test to
          check this functionality.
          (McAuley Penney)

fixes:  vim/vim#16276
closes: vim/vim#19009

491f0fa457

Co-authored-by: McAuley Penney <jacobmpenney@gmail.com>
2025-12-28 07:01:45 +08:00
glepnir
922816877f fix(pum): hide info floating window when insufficient space (#37107)
fix(pum): hide info window when insufficient space

Problem:
1. Info window was displayed even with insufficient space.
2. Tab characters counted as single cells.

Solution:
1. Hide window when space < 10 columns. Will be configurable
   via completepopup width option in the future.
2. Use win_linetabsize over mb_string2cells.
2025-12-27 13:56:34 +00:00
zeertzjq
47aef025a7 vim-patch:ffd5c52: runtime(compiler): ignore 'Found' messages in ruff and ty compiler (#37119)
while at it, also update the ty command line

closes: vim/vim#19012

ffd5c52d23

Co-authored-by: Konfekt <Konfekt@users.noreply.github.com>
2025-12-27 01:46:13 +00:00
zeertzjq
7991e4aa5e vim-patch:538da34: runtime(netrw): Fix reading UNC paths on windows (#37120)
Problem:  When Vim is launched with a UNC directory, netrw treats it as a
          relative path and compose it again.
Solution: This is due to `exists("g:netrw_cygwin")` always being true.
          We can directly use `g:netrw_cygwin`.

closes: vim/vim#19015

538da34ad3

Co-authored-by: tao <2471314@gmail.com>
2025-12-27 01:44:37 +00:00
zeertzjq
c11153b320 vim-patch:9.1.2021: filetype: fluent files are not recognized (#37117)
Problem:  filetype: fluent files are not recognized
Solution: Detect *.ftl files as fluent filetype (ners)

References:
- https://projectfluent.org/

closes: vim/vim#19011

b91b30643a

Co-authored-by: ners <ners@gmx.ch>
2025-12-27 01:35:19 +00:00
zeertzjq
7b5276b382 vim-patch:9.1.2020: tests: test_virtualedit.vim leaves swapfiles behind (#37115)
Problem:  tests: test_virtualedit.vim leaves swapfiles behind
Solution: Close open buffers using :bw! instead of :close!

a8a0ee5004

Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-12-27 00:57:52 +00:00
Evgeni Chasnovski
c9965491d0 feat(pack): allow running update() without Internet connection
Problem: There is now way to run `update()` without Internet connection
  while there are some workflows that do not require it. Like "switch
  plugin version" and "revert latest update".

Solution: Add `opts.offline` to `update()`. This also allows now to
  treat `vim.pack.update(nil, { offline = true })` as a way to
  interactively explore currently installed plugins.
2025-12-26 20:05:12 +02:00
Evgeni Chasnovski
8c28507fcf feat(pack): allow choosing update target in update()
Problem: There are two fairly common workflows that involve lockfile and
  can be made more straightforward in `vim.pack`:

    1. Revert latest update. Like if it introduced unwanted behavior.

    2. Update to a revision in the lockfile. Like if already updated
       on another machine, verified that everything works, `git add` +
       `git commit` + `git push` the config, and want to have the same
       plugin states on current machine.

Solution: Make `update` allow `opts.target`. By default it uses
  `version` from a plugin specification (like a regular "get new changes
  from source" workflow). But it also allows `"lockfile"` value to
  indicate that target revision after update should be taken from the
  current lockfile verbatim.

  With this, the workflows are:

    1. Revert (somehow) to the lockfile before the update, restart, and
       `vim.pack.update({ 'plugin' }, { target = 'lockfile' })`. If Git
       tracked, revert with `git checkout HEAD -- nvim-pack-lock.json`.
       For non-VCS tracked lockfile, the revisions can be taken from the
       log file. It would be nicer if `update()` would backup a lockfile
       before doing an update, but that might require discussions.

    2. `git pull` + `:restart` +
       `vim.pack.update(nil, { target = 'lockfile' })`.
       The only caveats are for new and deleted plugins:
        - New plugins (not present locally but present in the lockfile)
          will be installed at lockfile revision during restart.
        - Deleted plugins (present locally but not present in the
          lockfile) will still be present: both locally *and* in the
          lockfile. They can be located by
          `git diff -- nvim-pack-lock.json` and require manual
          `vim.pack.del({ 'old-plugin1', 'old-plugin2' })`.
2025-12-26 18:32:59 +02:00
Jan Edmund Lazo
899ec829be vim-patch:9.0.0145: substitute that joins lines drops text properties (#37108)
Problem:    Substitute that joins lines drops text properties.
Solution:   Move text properties of the last line to the new line.

213bbaf15a

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-12-26 09:51:47 +00:00
Yi Ming
e855a23c02 feat(lsp): on_accept can return item to customize behavior #37092
Problem:
`on_accept` is a bit cumbersome to customize.

Solution:
* Before: users had to override the entire `on_accept` logic for their changes to be applied.
* Now: users can modify the item and return it to apply the modified changes, or return `nil` to fully customize how the changes are applied.
2025-12-26 00:08:12 -05:00
Justin M. Keyes
c03d635a12 Merge #37097 feat(pack)!: improve handling of src change 2025-12-25 23:44:08 -05:00
glepnir
ef0386fe9a fix(pum): adjust info window column offset when scrollbar is present (#37069)
Problem:
When the popupmenu has no border but includes a scrollbar, the info window
column is misaligned due to a missing column offset.

Solution:
Apply a one-column offset to the info window when the popup menu has no border
and a scrollbar is present.
2025-12-26 02:15:55 +00:00
zeertzjq
b7adf8081c test(api/server_requests_spec): fix flaky test (again) (#37100) 2025-12-26 01:27:30 +00:00
zeertzjq
a565774bfc vim-patch:9.1.1483: not possible to translation position in buffer (#37099)
Problem:  not possible to translation position in buffer
Solution: use _() macro to mark the output as translatable
          (Emir SARI)

Row/Column indicator separator is currently not customizable. Some
languages have a space after the comma as the usual practice, plus this
would help translators use a custom separator like colons if necessary.

Additionally, after a save, the line and the byte indicator is also
hardcoded, this enables i18n for that as well.

closes: vim/vim#17608

81f9815831

Co-authored-by: Emir SARI <emir_sari@icloud.com>
2025-12-26 08:30:21 +08:00
Evgeni Chasnovski
c8ea8374c8 docs(pack): use more tags and add "Use shorter source" example 2025-12-25 12:57:59 +02:00
Evgeni Chasnovski
0353d33b00 feat(pack)!: change src of installed plugin inside update() in place
Problem: Changing `src` of already installed plugin currently takes
  effect immediately inside `vim.pack.add()` and acts as "delete and
  later fresh install". Although more robust, this might lead to
  unintentional data loss (since plugin is deleted) if the plugin was
  manually modified or the new source is not valid.
  Also this introduces unnecessary differentiation between "change
  `version`" and "change `src`" of already installed plugin.

Solution: Require an explicit `vim.pack.update()` to change plugin's
  source. It is done by conditionally changing `origin` remote of the
  Git repo. The effect does not require update confirmation in order to
  have new changes fetched from the new `src` right away.

  If in the future there are more types of plugins supported (i.e. not
  only Git repos), also do extra work (like delete + install) during
  `vim.pack.update()`.
2025-12-25 12:57:59 +02:00
github-actions[bot]
5a1a92cc7a docs: update version.c (#37059)
vim-patch:8.2.3793: using "g:Func" as a funcref does not work in script context
vim-patch:6ec7d40b7 runtime(getscript): GLVS plugin fails with wget.exe with PowerShell
vim-patch:2387c49f6 translation(zh_CN): Add license disclaimer
vim-patch:9.1.2002: Vim9: heap-use-after-free when when accessing protect class member
vim-patch:9.1.2010: Missing out-of-memory checks in vim9class.c
vim-patch:9.1.2011: crash when unreferencing gtk icon theme

Applicable patches became N/A due to previous ports (a4ea6027) and vim9:

vim-patch:8.2.0335: no completion for :disassemble
vim-patch:8.2.2033: Vim9: :def without argument gives compilation error
vim-patch:8.2.4288: preprocessor indents are inconsistent
vim-patch:8.2.4324: Vim9: script-local function name can start with "_"
vim-patch:8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies
vim-patch:8.2.4957: text properties in a wrong position after a block change
vim-patch:9.0.0166: when using text properties line text length computed twice
vim-patch:9.0.0219: cannot make a funcref with "s:func" in a def function
vim-patch:9.0.1357: using null_object results in an internal error
vim-patch:9.0.1484: Coverity warns for using invalid array index
vim-patch:9.1.0274: MS-Windows: a few compiler warnings
vim-patch:9.1.1339: missing out-of-memory checks for enc_to_utf16()/utf16_to_enc()
vim-patch:9.1.1434: MS-Windows: missing out-of-memory checks in os_win32.c
2025-12-25 03:38:50 -05:00
Olivia Kinnear
29494f042c fix(ex): error handling for :lsp #37061 2025-12-25 03:19:12 -05:00
Jan Edmund Lazo
60a0e3d0a0 vim-patch:9.1.0151: ml_get_buf_len() does not consider text properties (#37094)
Problem:  ml_get_buf_len() does not consider text properties
          (zeertzj)
Solution: Store text length excluding text properties length
          in addition in the memline

related vim/vim#14123
closes: vim/vim#14133

a72d1be5a9

--------

Replace ml_line_len with ml_line_textlen to be explicit
that Nvim doesn't currently support Vim's text properties
and Nvim doesn't support lines with "ambiguous" length.

--------

vim-patch:9.1.0153: Text properties corrupted with fo+=aw and backspace

Problem:  Text properties corrupted with fo+=aw and backspace
Solution: Allocate line and move text properties
          (zeertzjq)

closes: vim/vim#14147

7ac1145fbe

vim-patch:9.1.0163: Calling STRLEN() to compute ml_line_textlen when not needed

Problem:  Calling STRLEN() to compute ml_line_textlen when not needed.
Solution: Use 0 when STRLEN() will be required and call STRLEN() later.
          (zeertzjq)

closes: vim/vim#14155

82e079df81

Co-authored-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
2025-12-25 15:38:45 +08:00