Commit Graph

140 Commits

Author SHA1 Message Date
Yochem van Rosmalen
042c66e4f9 docs: job-control.txt => flow layout #38463 2026-03-24 08:30:23 -04:00
Justin M. Keyes
a3b48b1054 docs: api, plugins, ui2 2026-03-24 00:14:55 +01:00
Yochem van Rosmalen
3e93793bb1 docs: change lua-bit to new layout #38447
Problem:
Flow layout looks better on neovim.io. Nvim-owned help files should
switch to the new layout. Also lua-bit.txt doesn't use the same format
for function documentation as the other docs (such as api.txt).

Solution:
Switch to new layout. Tweak the function documentation to be in line
with the other docs style.
2026-03-23 17:41: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
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
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
Justin M. Keyes
e3a1e47bb2 docs: misc 2026-03-20 23:30:09 +01: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
Justin M. Keyes
7dfb8e3497 docs: terminal.txt new layout 2026-03-18 20:07:32 +01:00
nikolightsaber
fd1e019e90 refactor(treesitter)!: get_parser return nil on error #37276 2026-03-13 15:57:36 -04:00
Justin M. Keyes
b8a976afda docs: api, messages, lsp, trust
gen_vimdoc.lua: In prepare for the upcoming release, comment-out the
"Experimental" warning for prerelease features.
2026-03-11 18:00:18 +01:00
Justin M. Keyes
dce8bdd247 Merge #38117 from noib3/fix-lua-lints-in-src 2026-03-09 18:16:01 -04:00
Riccardo Mazzarini
92b2a26772 fix: resolve all remaining LuaLS warnings in src/ 2026-03-09 21:47:15 +01:00
Riccardo Mazzarini
9204b7541d fix: silence LuaLS's no-unknown warnings in src/ 2026-03-09 21:47:15 +01:00
Christian Clason
908591c61c refactor(lua): adapt to Stylua 2.4.0 2026-03-07 18:23:35 +01:00
Yochem van Rosmalen
ac6cf5b03b fix(gen): alias /doc/user/helptag.html to /doc/user/helptag/ #38156
Problem:
helptag.html is used to search for the online help documentation of a
specified tag. The previous URL was `/doc/user/helptag.html` but that
switched to `/doc/user/helptag/` in
https://github.com/neovim/neovim.github.io/pull/437. The alias of the
.html page was added to all other doc pages but forgotten for the
helptag.html page

Solution:
Add the alias to the helptag.html page too
2026-03-06 13:20:40 -05:00
Yochem van Rosmalen
74d1af165a revert :gen_help_html.lua commit 4a4de73 #38100
revert commit 4a4de73043
2026-02-28 06:34:01 -05:00
Yochem van Rosmalen
4a4de73043 fix(help): better align local-additions #38097
Problem:
Descriptions of plugins often contain taglinks which are generally
concealed. This misaligns them by 2 characters with descriptions that
don't have a taglink in them.

Solution:
Don't count "bar" characters (`|`) for the description width.

Example:

Actual buffer content:
```
myplugin.txt                  |lsp| is cool
myplugin.txt        this is a nice plugin
```

Rendered as:
```
myplugin.txt                  lsp is cool
myplugin.txt        this is a nice plugin
```
2026-02-27 17:50:51 -05:00
Yochem van Rosmalen
b57ed5e940 refactor(gen): let Hugo build html docs #37972
Problem:
The html and css of the website's documentation pages are defined in
long strings in gen_help_html.lua, making it hard to maintain and
improve them. E.g. adding in headers that state the documentation is for
nightly Nvim has been a long standing feature request.

Solution:
Move the inlined css and html (e.g. the <head>, <nav>, etc.) to Hugo.

Now that the website is build with Hugo, we can use its templating
system to generate the full html/css from the Tree-sitter tree:
https://github.com/neovim/neovim.github.io/pull/437
2026-02-23 17:26:27 -05:00
Justin M. Keyes
0d13945bbb feat(messages): drop hardcoded 'showmode' delay #38029
Problem:
- Editing a 'readonly' file forces a 3-second delay.
- nvim_get_mode waits 3 secs with 'showmode' enabled or when there are error messages.

Solution:
Remove the delay for "ui2", by using `msg_delay`.
2026-02-23 09:54:35 -05:00
Riccardo Mazzarini
cb8c9186e6 feat(highlight): support more SGR attributes #37901
Problem:
TUI does not support several standard SGR text attributes:
- dim/faint (SGR 2)
- blink (SGR 5)
- conceal (SGR 8)
- overline (SGR 53)
This means that when a program running in the embedded terminal emits
one of these escape codes, we drop it and don't surface it to the
outer terminal.

Solution:
- Add support for those attributes.
- Also add corresponding flags to `nvim_set_hl` opts, so users can set
  these attributes in highlight groups.
  - refactor(highlight): widen `HlAttrFlags` from `int16_t` to `int32_t`
    Widen the `rgb_ae_attr` and `cterm_ae_attr` fields in HlAttrs from
    int16_t to int32_t to make room for new highlight attribute flags,
    since there was only one spare bit left.
  - The C flag is named HL_CONCEALED to avoid colliding with the
    existing HL_CONCEAL in syntax.h (which is a syntax group flag, not
    an SGR attribute).
- Also note that libvterm doesn't currently support the dim and overline
  attributes, so e.g. `printf '\e[2mThis should be dim\n'` and `printf
  '\e[53mThis should have an overline\n'` are still not rendered
  correctly when run from the embedded terminal.
2026-02-20 18:35:55 -05:00
Tristan Knight
13cf80deef fix(lsp): map all LSP methods to server capabilities (#37910) 2026-02-16 13:20:34 -08:00
Tristan Knight
b99cdd08de refactor(lsp): centralize provider capability resolution #37221
- Refactor LSP client to use unified provider-based capability lookup for
  diagnostics and other features.
- Introduce `_provider_value_get` to abstract capability retrieval,
  supporting both static and dynamic registrations.
- Update diagnostic handling and protocol mappings to leverage
  provider-centric logic.
2026-02-14 10:50:48 -05:00
luukvbaal
bf68ba40a0 refactor: rename _extui => _core.ui2 #37692
Problem:
_extui module name is confusing and should eventually end up in _core/.

Solution:
Move it there and name it ui2.
2026-02-05 07:45:45 -05:00
jdrouhard
9278f792c3 feat(lsp): support range + full semantic token requests #37611
From the LSP Spec:
> There are two uses cases where it can be beneficial to only compute
> semantic tokens for a visible range:
>
> - for faster rendering of the tokens in the user interface when a user
>   opens a file. In this use case, servers should also implement the
>   textDocument/semanticTokens/full request as well to allow for flicker
>   free scrolling and semantic coloring of a minimap.
> - if computing semantic tokens for a full document is too expensive,
>   servers can only provide a range call. In this case, the client might
>   not render a minimap correctly or might even decide to not show any
>   semantic tokens at all.

This commit unifies the usage of range and full/delta requests as
recommended by the LSP spec and aligns neovim with the way other LSP
clients use these request types for semantic tokens.

When a server supports range requests, neovim will simultaneously send a
range request and a full/delta request when first opening a file, and
will continue to issue range requests until a full response is
processed. At that point, range requests cease and full (or delta)
requests are used going forward. The range request should allow servers
to return a result faster for quicker highlighting of the file while it
works on the potentially more expensive full result. If a server decides
the full result is too expensive, it can just error out that request,
and neovim will continue to use range requests.

This commit also fixes and cleans up some other things:

- gen_lsp: registrationMethod or registrationOptions imply dynamic
  registration support
- move autocmd creation/deletion to on_attach/on_detach
- debounce requests due to server refresh notifications
- fix off by one issue in tokens_to_ranges() iteration
2026-02-03 13:16:12 -05:00
luukvbaal
d30d91f3a4 fix(ui): only internal messages are unsafe #37462
Problem:  Fast context for msg_show event inhibits vim.ui_attach from
          displaying a stream of messages from a single command.

Solution: Remove fast context from msg_show events emitted as a result
          of explicit API/command calls. The fast context was originally
          introduced to prevent issues with internal messages.
2026-01-26 18:18:51 -05:00
Tommy Guo
103ddaf9ae fix(lua): correct line number reporting for options set in coroutines (#37463) 2026-01-21 02:18:33 +00:00
zeertzjq
dd6ed20272 docs: misc (#37280)
Close #36806
Close #36812
Close #37003
Close #37016
Close #37038
Close #37039
Close #37157
Close #37185
Close #37213

Co-authored-by: saroj_r <sarojregmi.official@gmail.com>
Co-authored-by: Olivia Kinnear <git@superatomic.dev>
Co-authored-by: Igor <igorlfs@ufmg.br>
Co-authored-by: Justin Roberts <JustinEdwardLeo@gmail.com>
Co-authored-by: "Mike J. McGuirk" <mike.j.mcguirk@gmail.com>
Co-authored-by: Aymen Hafeez <49293546+aymenhafeez@users.noreply.github.com>
Co-authored-by: Peter Cardenas <16930781+PeterCardenas@users.noreply.github.com>
Co-authored-by: DrNayak2306 <dhruvgnk.work@gmail.com>
2026-01-07 08:11:42 +08:00
Tristan Knight
ed562c296a fix(lsp): improve dynamic registration handling #37161
Work on #37166 

- Dynamic Registration Tracking via Provider
- Supports_Method
    - Multiple Registrations
    - RegistrationOptions may dictate support for a method
2026-01-02 01:46:13 -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
zeertzjq
c08139d790 fix(lua): don't remove first char of non-file stacktrace source (#37008) 2025-12-18 08:09:16 +08:00
Yochem van Rosmalen
0e04f88081 ci(lintdocurls): ignore websites that block GHA #36982
Problem:
These URLs seem to be unreachable from GHA CI but are available locally.

Solution:
Ignore them for now.
2025-12-15 23:46:15 -05:00
Justin M. Keyes
d5cfca5b76 feat(docs): numbered listitems 2025-12-15 13:55:15 -05:00
Justin M. Keyes
a49bf5e1d3 fix(gen_help_html): parser override
Call `vim.treesitter.language.add()` before `get_helptags` (which
triggers filetype=help). And do this in the main routine, instead of
each gen/validate task.
2025-12-15 13:55:15 -05:00
Justin M. Keyes
981ea41abb feat(tui): ghostty builtin terminfo #36963
Problem:
The builtin terminfo defs don't include xterm-ghostty, so features like
`kTerm_set_underline_style` are missing when building without unibilium.

Solution:
- Add ghostty to `gen_terminfo.lua`.
  - Note: The ncurses defs are somewhat different than what ghostty ships.
- Special-case ghostty in `terminfo_from_builtin`.
2025-12-15 02:07:51 -05:00
Justin M. Keyes
ebb7c38ca2 docs: misc
fix https://github.com/neovim/neovim.github.io/issues/419

Co-authored-by: Rob Pilling <robpilling@gmail.com>
2025-12-06 20:33:02 -05:00
Tristan Knight
9e9cdcaa18 refactor(lsp): unify capability checks and registration #36781
Problem:
Our LSP type system didnt have a concept of RegistrationMethods, this is where the method to dynamically register for a capability is sent to a different method endpoint then is used to call it. Eg `textDocument/semanticTokens` rather than the specific full/range/delta methods

Solution:
Extended generator to create `vim.lsp.protocol.Methods.Registration` with these registration methods. Also extend `_request_name_to_client_capability` to cover these methods. Adjust typing to suit
2025-12-06 18:31:11 -05:00
Justin M. Keyes
d62bbe24cb fix(tui): enable vtpcon strikethrough feature #36762
Problem:
Strikethrough was not enabled for vtpcon thus preventing strikethrough
text from being shown.

Solution:
Update `windows.ti`.

Co-authored-by: ymich9963 <gmichael834@gmail.com>
Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
2025-11-30 11:22:12 -05:00
Justin M. Keyes
9f90992934 fix(scripts): gen_terminfo clears Windows terminfo definitions #36736
Problem:
`gen_terminfo.lua` clears out Windows terminfo definitions:

    rm -r /tmp/nvim_terminfo
    nvim -ll src/gen/gen_terminfo.lua

`src/nvim/tui/terminfo_builtin.h`:

    static const TerminfoEntry vtpcon_terminfo = {
      .bce = false,
      .has_Tc_or_RGB = false,
      .Su = false,
      .max_colors = -1,
      .lines = -1,
      .columns = -1,
      .defs = {
        [kTerm_carriage_return] = NULL,
        [kTerm_change_scroll_region] = NULL,
        [kTerm_clear_screen] = NULL,
        [kTerm_clr_eol] = NULL,
        [kTerm_clr_eos] = NULL,
        [kTerm_cursor_address] = NULL,
        [kTerm_cursor_down] = NULL,
        [kTerm_cursor_invisible] = NULL,
        [kTerm_cursor_left] = NULL,
        [kTerm_cursor_home] = NULL,
        [kTerm_cursor_normal] = NULL,
        [kTerm_cursor_up] = NULL,
        [kTerm_cursor_right] = NULL,
        [kTerm_delete_line] = NULL,
        ...

Solution:
Generate the database in 2 steps, don't concatenate the sources.
2025-11-28 15:04:49 -08:00
Yochem van Rosmalen
a468bc573d ci: check URL reachability #35593
Problem:
scripts/check_urls.vim manually matches urls in the help pages and then
synchronously checks them via curl/wget/powershell. This is extremely
slow (~5 minutes for Nvims runtime on my machine) and prone to errors in
how the urls are matched.

Solution:
- Use Tree-sitter to find the urls in the help pages and `vim.net.request` to
  check the responses.
- Add a `lintdocurls` build task and check it in CI (every Friday).
  - Reopens a dedicated issue if it finds unreachable URLs.
- Drop the old check_urls.vim script.
2025-11-18 12:35:22 -08:00
Justin M. Keyes
f01c212e37 docs: rework main help page 2025-11-16 00:55:28 -05:00
Yochem van Rosmalen
94ae48ff29 docs(undotree): rename help tag #36497
Problem: confusing that there is the tag `undo-tree` (the Vim
implementation) and `undotree` (the Lua plugin for visualization).

Solution: rename tag to undotree-plugin. Mention the plugin in the docs of
|undotree|.
2025-11-12 09:00:27 -08:00
Yochem van Rosmalen
9bdb011a50 refactor(spellfile): config() interface, docs #36481
Problem:
- Exposing the raw config as table is a pattern not seen anywhere else
  in the Nvim codebase.
- Old spellfile.vim docs still available, no new documentation

Solution:
- Exposing a `config()` function that both acts as "getter" and "setter"
  is a much more common idiom (e.g. vim.lsp, vim.diagnostic).
- Add new documentation and link old docs to |spellfile.lua| instead of
  |spellfile.vim|.
2025-11-09 21:51:39 -08:00
bfredl
b75a68ff06 Merge pull request #36367 from bfredl/metadata_iii
refactor(build): split out metadata step
2025-10-29 11:37:14 +01:00
bfredl
829a5dc83e refactor(build): split out metadata step
This was part of an attempt to add "git describe" to zig build
without re-building too much. This doesn't yet work as zig upstream
changes are are also needed, but I think this was a sensible refactor
even in isolation, so breaking it out.

"API dispatch" doesn't depend on any ui event stuff nor on
version, that was just an accident of the metadata collection
being crammed into the same file.

Remove "manual invocation" instruction. this is going to bitrot anyway.
Both cmake and build.zig allows you to extract the command line of a
step, so you can debug it separately.
2025-10-29 10:23:55 +01:00
bfredl
4b678a499c refactor(termkey): make termkey use internal terminfo properly
problem: termkey/driver-ti.c had its internal dependency upon unibilium
which would completely skip builtin terminfo defs.
solution: add termkey info to TerminfoEntry struct

NOTE: this disables a lot of named function keys which are present as
terminfo "keys" both are mostly unset in terminfo entries for modern
terminals, and also  not recognized by nvim as mappable keys
anyway, except a few ones like `<undo>` which this still will keep.

We probably don't want to encode up to F63 keys forever. While only 12
physical keys are available on modern keybords, instead Chords using
F-keys are usually encoded as high key numbers, like <C-S-F3>
becoming <F39> . But reconsideirg that has implications for configuration
that is best done as a separate (breaking) change.
2025-10-29 09:43:36 +01:00
Gregory Anders
bb6f5c3b31 fix(tui): reset cursor style on exit (#36261)
Fix the cursor style terminfo capability (should be Se, not se). Also
include foot in the list of terminals that supports setting and
resetting cursor style (see
https://codeberg.org/dnkl/foot/issues/797#issuecomment-280305)
2025-10-28 13:11:00 -05:00
Justin M. Keyes
c90f742ee2 docs: new layout 2025-10-27 19:32:16 -04:00