<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neovim/src/nvim/lua/executor.c, branch master</title>
<subtitle>Vim-fork focused on extensibility and usability</subtitle>
<id>http://git.waynecole.info/neovim/atom?h=master</id>
<link rel='self' href='http://git.waynecole.info/neovim/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/'/>
<updated>2026-04-23T16:42:41Z</updated>
<entry>
<title>fix(lua): don't strip debuginfo in precompile module #39191</title>
<updated>2026-04-23T16:42:41Z</updated>
<author>
<name>phanium</name>
<email>91544758+phanen@users.noreply.github.com</email>
</author>
<published>2026-04-23T16:42:41Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=398f2c108d8ee3ce7ac950b60520a9569b63da67'/>
<id>urn:sha1:398f2c108d8ee3ce7ac950b60520a9569b63da67</id>
<content type='text'>
Problem:
debug.getinfo on bytecode module/func don't give you detail source info.

Solution:
- Use `loadstring`+`string.dump` to replace LUAC_PRG(`luac`/`luajit -b`)
- `string.dump(…,false)` to generate non-strip version bytecode
- `loadstring(…,fname)` to specify the full source name

BEFORE:

    $ nvim --clean +'=debug.getinfo(vim.fn.maparg("]&lt;Space&gt;", "n", 0, 1).callback, "Sl")' --headless +q
    {
      currentline = -1,
      lastlinedefined = 456,
      linedefined = 452,
      short_src = "?",
      source = "=?",
      what = "Lua"
    }

AFTER:

    $ nvim --clean +'=debug.getinfo(vim.fn.maparg("]&lt;Space&gt;", "n", 0, 1).callback, "Sl")' --headless +q
    {
      currentline = -1,
      lastlinedefined = 456,
      linedefined = 452,
      short_src = "/home/xx/b/neovim/runtime/lua/vim/_core/defaults.lua",
      source = "@/home/xx/b/neovim/runtime/lua/vim/_core/defaults.lua",
      what = "Lua"
    }</content>
</entry>
<entry>
<title>feat(eval): treat Lua string as "blob" in writefile() #39098</title>
<updated>2026-04-22T17:36:43Z</updated>
<author>
<name>Barrett Ruth</name>
<email>62671086+barrettruth@users.noreply.github.com</email>
</author>
<published>2026-04-22T17:36:43Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=fb6aeaba2d3a38c7febd0a39cabd89685de11b9d'/>
<id>urn:sha1:fb6aeaba2d3a38c7febd0a39cabd89685de11b9d</id>
<content type='text'>
Problem:
vim.fn.writefile() treats Lua strings as Vimscript strings instead of a "binary clean" string.

Solution:
Treat Lua-originated strings as blob data.</content>
</entry>
<entry>
<title>fix(excmd): nlua_call_excmd require() failure is a "lua_error"</title>
<updated>2026-04-20T00:31:09Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-19T15:37:03Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=a38451be40ca571e9c55656b19ea8926d5f4524b'/>
<id>urn:sha1:a38451be40ca571e9c55656b19ea8926d5f4524b</id>
<content type='text'>
Although `nlua_call_excmd` is semantically for implementing Ex-commands,
the `require()` should never fail, so that's a "Lua error".

But if the call itself fails (the later `semsg` call), that's an "Ex
cmd" error.
</content>
</entry>
<entry>
<title>refactor(excmd): migrate ex_terminal to Lua</title>
<updated>2026-04-20T00:31:09Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-18T15:17:54Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=919a1099510a6998bd7edeaaa0522719687242b7'/>
<id>urn:sha1:919a1099510a6998bd7edeaaa0522719687242b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor(excmd): migrate ex_checkhealth to Lua</title>
<updated>2026-04-20T00:12:05Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-18T14:40:25Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=fe7218528d70b6df006c356761a92620f6a989c7'/>
<id>urn:sha1:fe7218528d70b6df006c356761a92620f6a989c7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(vimfn): use Lua for more excmds/vimfns</title>
<updated>2026-04-18T14:57:37Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-17T16:14:14Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=3ebfa2a3cbbed848667fe26c16973ce7e43a04e4'/>
<id>urn:sha1:3ebfa2a3cbbed848667fe26c16973ce7e43a04e4</id>
<content type='text'>
Problem:
Too much boilerplate needed to use Lua to impl an excmd or f_xx
function.

Solution:
- Add `nlua_call_vimfn` which takes the args typval, executes
  Lua, and returns a typval.
- refactor(excmd): lua impl for :log, :lsp
</content>
</entry>
<entry>
<title>perf(vim.fn): call Lua-implemented vim.fn.xx() directly #39166</title>
<updated>2026-04-17T23:10:20Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-17T23:10:20Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=0d4d285bd2c19697164175280b32bf93e3a7b1da'/>
<id>urn:sha1:0d4d285bd2c19697164175280b32bf93e3a7b1da</id>
<content type='text'>
Problem:
- Builtin "Vimscript" functions (f_xx) are mostly implemented in C.
  Partly that's because there is some boilerplate required to call out
  to Lua.
- Calls to `vim.fn.foo()` always marshall over the Lua &lt;=&gt; Vimscript
  ("typval") bridge, even if `fn.foo()` is implemented entirely in Lua:
  ```
  Lua =&gt; typval =&gt; Object =&gt; Lua =&gt; Object =&gt; typval =&gt; Lua.
  ```

Solution:
Functions declared in eval.lua with `func_lua` are implemented in
entirely in Lua (`_core/vimfn.lua`).

- `gen_eval.lua` wires `func_lua` entries to `lua_wrapper`, which handles
  the typval conversion for Vimscript callers (slow path).
- `nlua_call()` detects `func_lua` functions and calls the Lua
  implementation directly. This eliminates all conversion overhead for
  Lua callers (fast path).
- Validate at build-time that `func`, `func_float`, and `func_lua` are
  mutually exclusive.
- Migrate `hostname()` as a toy example, to show the idea.</content>
</entry>
<entry>
<title>docs: news #38464</title>
<updated>2026-03-28T13:59:54Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-03-28T13:59:54Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=64d55b74d83d566975e269bed0810d9008119ddf'/>
<id>urn:sha1:64d55b74d83d566975e269bed0810d9008119ddf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(messages): disallow user-defined integer message-id #38359</title>
<updated>2026-03-19T01:07:17Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-03-19T01:07:17Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=1b2b715389c5a34f323001f34e4b78b86c9cff8d'/>
<id>urn:sha1:1b2b715389c5a34f323001f34e4b78b86c9cff8d</id>
<content type='text'>
Problem:
`nvim_echo(…, {id=…})` accepts user-defined id as a string or integer.
Generated ids are always higher than last highest msg-id used. Thus
plugins may accidentally advance the integer id "address space", which,
at minimum, could lead to confusion when troubleshooting, or in the
worst case, could overflow or "exhaust" the id address space.

There's no use-case for it, and it could be the mildly confusing, so we
should just disallow it.

Solution:
Disallow *integer* user-defined message-id.
Only allow *string* user-defined message-id.</content>
</entry>
<entry>
<title>docs: api, messages, lsp, trust</title>
<updated>2026-03-11T17:00:18Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-02-12T13:16:47Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=b8a976afdaf0080498e85530fae65a3165f201d5'/>
<id>urn:sha1:b8a976afdaf0080498e85530fae65a3165f201d5</id>
<content type='text'>
gen_vimdoc.lua: In prepare for the upcoming release, comment-out the
"Experimental" warning for prerelease features.
</content>
</entry>
</feed>
