aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* [extregs] implement tab completion for ~ menu.extregsJosh Rahm17 hours
|
* [extregs] update the register statusmsg to show the full extreg name.Josh Rahm18 hours
| | | | Now it shows something like `5 lines yanked into "~my.extreg`
* [extregs] implement dot redo functionality for extregs.Josh Rahm19 hours
|
* [extregs] fixed rebase.Josh Rahm35 hours
|
* [feat] comprehensive alias tests and fixes.Josh Rahm35 hours
| | | | Alias semantis are identical to using the full extreg name.
* [bugifx] extregs fix output for :registers to not include extregs if they ↵Josh Rahm35 hours
| | | | don't exist
* [extregs] add 'extregs' to has() function.Josh Rahm35 hours
| | | | Add tests for aliases.
* [extregs] Add support for :registers with extregs and aliases.Josh Rahm35 hours
|
* [extregs] implemented aliases.Josh Rahm35 hours
|
* [extregs] tests are passing (at least all those that pass in upstream/master)Josh Rahm35 hours
| | | | Added a big test suite for extregs
* [extregs] more unittests for exregsJosh Rahm35 hours
|
* [extregs] switch to a hash map for an arbitrary number of extregs.Josh Rahm35 hours
|
* [extregs] move extreg_commit into op_yank_reg.Josh Rahm35 hours
| | | | This is the lower level operation used by delete and change.
* [extregs] add support for extregs in setreg and getreg.Josh Rahm35 hours
|
* [extregs] implement support for esoteric register access.Josh Rahm35 hours
| | | | | | | - support for let syntax: let @~extreg_name = ... - support for expressions: let x = @~extreg_name - support for cmdline <C-r> - support for ex commands: <cmd>put ~extreg_name
* [extreg] syntax working for let @~extreg.name = ...Josh Rahm35 hours
|
* [feat] extregistersJosh Rahm35 hours
| | | | | | | | | | | | | | | | | | | | | Implements "extended registers" Extended registers provide access to a separate namespace of registers backed by custom lua callback functions. A new special register ("~) is introduced, which prompts the user for the name of an extregistr to yank or paste from. This enables file-backed or cloud-synced or other arbitrary register behavior. One can now use: `"~file_extreg<cr>yy` to yank into the "file_extreg" register. AI-assisted: Qwen3-Coder
* docs(help): specify h4 "function signature" format #42434masterJustin M. Keyes2 days
| | | | | | | | | | | | | | | | | | | | | Work towards enabling ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) in all `:help` files. Problem: The final boss of vimdoc pseudo-structure: Vim's quasi-headings on function signatures and excmd docs is visually distinctive but too inconsistent for a nice parse rule. Solution: - Define the quasi-heading format as an "h4" variant, specified at `:help help-tag-heading`. - For simplicity and predictability, it is defined as any line that ends with a help tag(s) preceded by 2 or more spaces (or 1 tab). - Update existing docs. - This one-time update has a lot of changes, but is very unlikely to conflict with ported Vim-patches because (1) Vim rarely adds new *excmds* that we want, and (2) *function* docs are auto-generated. ref https://github.com/neovim/tree-sitter-vimdoc/issues/110
* feat(defaults): drop TAB from 'termpastefilter' #42433Justin M. Keyes2 days
| | | | | | | | Problem: By default, 'termpastefilter' removes TAB chars when pasting to a :terminal. Very annoying, and does not improve "security". Solution: Drop "HT" from the 'termpastefilter' default.
* docs: update version.c #42344github-actions[bot]2 days
| | | | | | | | | | | | | | | vim-patch:9.2.1181: patch 9.2.1181: MS-Windows: compile warnings with clang 23 vim-patch:9.2.1188: patch 9.2.1188: prop_type_get() does not return the "override" item vim-patch:ce7c78578 AGENTS.md does not explain how to write garbage collection tests vim-patch:9.2.1192: patch 9.2.1192: Compile warning when FEAT_DIFF is disabled vim-patch:9.2.1193: patch 9.2.1193: Vim9: dict type with type variable not checked in generic function vim-patch:3f1281d50 CI: enable Linux coverage for string-valued action input vim-patch:9.2.1202: patch 9.2.1202: Vim9: crash on error in a long "implements" list vim-patch:9.2.1181: patch 9.2.1181: MS-Windows: compile warnings with clang 23 vim-patch:9.2.1084: Cannot check a script without executing it vim-patch:9.2.1140: Vim9: :def in legacy script can create a script variable vim-patch:9.2.1184: the dry run feature not well received
* fix(options): out-of-range number in 'iskeyword' aborts Nvim (#42410)ump45nose3 days
| | | | | | | | | | | | Problem: A number in 'iskeyword', 'isfname' or 'isident' that overflows (e.g. via a modeline) hits abort() or an assert in getdigits_int(). Solution: Parse the numbers non-strictly so an out-of-range value gives E474. Fixes #42409 AI-assisted
* vim-patch:4eae1d0: runtime(gitrevlist): prevent interpreting keywords as ↵zeertzjq3 days
| | | | | | | | | | | | | | | | | options (#42403) Problem: gitrevlist's keywordprg "git show" doesn't realise that input should never be interpreted as an option. (Note that it is in practice impossible to pass a value that is interpreted as an option, but this expresses intent and is defensive.) Solution: pass --end-of-options to force input to be interpreted as arguments. related: vim/vim#20702 closes: vim/vim#21472 https://github.com/vim/vim/commit/4eae1d03e82c5b775a25c097509562efd350a8a3 Co-authored-by: Fionn Fitzmaurice <git@fionn.computer>
* fix(snippet): preserve the full TM_DIRECTORY path (#42408)Volodymyr Chernetskyi3 days
| | | | | | | | | | Problem: TM_DIRECTORY expands to the directory's basename, losing its parent path. Solution: Remove the tail modifier when expanding the current file's directory. Extend the existing known-variable test to check the full directory path. AI-assisted
* refactor(watch): extract watchdirs into a classLewis Russell3 days
| | | | | | | | | | | | Problem: watchdirs() keeps its state in large nested callbacks in _watch.lua, which makes its directory tracking logic harder to change. Solution: Move the backend into its own module and store its state in a WatchDirs instance. Split setup, event handling and cleanup into methods. Extend the existing test to cover cancellation while a directory stat is pending. AI-assisted
* docs: vimdoc specification #42412Justin M. Keyes3 days
| | | | | | | | | Problem: No "spec" for various :help format (vimdoc) conventions, including the new "table" support. Solution: Introduce `:help help-spec`. Also, bump the vimdoc parser.
* Merge #42411 from justinmk/doc3Justin M. Keyes3 days
|\ | | | | docs: flow layout
| * docs: flow layoutJustin M. Keyes3 days
| | | | | | | | | | | | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
| * docs: cleanup invalid help sourceJustin M. Keyes3 days
|/ | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
* vim-patch:9.2.1198: memory leak with 'quickfixtextfunc' #42405zeertzjq3 days
| | | | | | | | | | | | Problem: The list returned by 'quickfixtextfunc' is never unreferenced, so it is not freed until garbage collection. Solution: Unreference the list after filling the quickfix buffer (Volodymyr Chernetskyi). closes: vim/vim#21437 https://github.com/vim/vim/commit/84d86c65d3bc612320c3d38c2fc987c5cdd81ae9 Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
* Merge pull request #42404 from zeertzjq/vim-9.2.1196zeertzjq3 days
|\ | | | | vim-patch:9.2.{1196,1199}
| * vim-patch:9.2.1199: case-folded regexp matches can end inside a UTF-8 characterzeertzjq3 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Case-folded regexp matches can end inside a UTF-8 character when the input is longer than the literal pattern. Solution: Return the input byte length after a successful comparison even when it exceeds the pattern byte length, and test literal replacements and backreferences (Volodymyr Chernetskyi). related: vim/vim#14756 related: vim/vim#21212 closes: vim/vim#21439 https://github.com/vim/vim/commit/c9a9517ce8498256b50576e8291709083b607d70 Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
| * vim-patch:9.2.1196: NFA literal matches miss characters with different ↵zeertzjq3 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | case-folded widths Problem: NFA literal matches miss characters with different case-folded widths, including when retrying after a failed suffix match. Solution: Advance past the actual input character in both paths and test string and buffer searches (Volodymyr Chernetskyi). related: vim/vim#14294 closes: vim/vim#21438 https://github.com/vim/vim/commit/b3affdd29ea4b1017f5c870824a9e4576731fa95 Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
* | vim-patch:9.2.1201: [security]: code injection via cargo quickfix plugin #42406zeertzjq3 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: [security]: code injection via cargo quickfix plugin (Daniel Dalvelac) Solution: Use chdir() instead of string executing a cd command Github Security Advisory: https://github.com/vim/vim/security/advisories/GHSA-x2w5-pj55-7hpc fyi @gpanders https://github.com/vim/vim/commit/b93c000ddfc27c6a1192bcba77204709536cf094 Co-authored-by: Christian Brabandt <cb@256bit.org>
* | fix(diagnostic): use logical positions for counted jumps #42394Volodymyr Chernetskyi3 days
| | | | | | | | | | | | | | | | | | | | | | | | | | Problem: After edits move diagnostic ranges, counted jumps resume searching from their original positions. This can revisit the same diagnostic and hang the default first/last diagnostic mappings. Solution: Advance the search origin using the diagnostic's current logical position. Test forward and backward counted jumps after inserting or deleting a line, including jumps to the last or first diagnostic without wrapping. AI-assisted
* | fix(lsp): ignore completion items without LSP metadata #42401Volodymyr Chernetskyi3 days
| | | | | | | | | | | | | | | | | | | | | | | | Problem: Accepting an item from another completion source raises an error when its user_data.nvim table does not contain LSP metadata. Solution: Retrieve and guard the nested LSP metadata before accessing its fields. Cover acceptance of a foreign completion item without LSP metadata. AI-assisted
* | fix(lsp): keep label fallback for empty snippet insertText #42402Volodymyr Chernetskyi3 days
| | | | | | | | | | | | | | | | | | | | | | | | Problem: An empty snippet insertText falls back to the label during selection, but acceptance clears that label and expands an empty string. Solution: Require nonempty insertText before expanding a snippet without textEdit. Extend the omnifunc acceptance fixture with an empty snippet insertion. AI-assisted
* | fix(lsp): preserve explicit completion edit ranges #42399Volodymyr Chernetskyi3 days
| | | | | | | | | | | | | | | | | | | | | | | | Problem: A completion list default edit range can replace the explicit range of an InsertReplaceEdit, filtering out valid items or changing their replacement. Solution: Only synthesize a default text edit when the completion item has none. Extend the existing itemDefaults test for explicit edits with both range variants. AI-assisted
* | fix(lsp): prefer textEdit for snippet completion text #42400Volodymyr Chernetskyi3 days
| | | | | | | | | | | | | | | | | | | | | | | | Problem: Snippet completion words and previews prefer insertText even when textEdit is present, although the actual expansion uses textEdit.newText. Solution: Use the text edit before the fallback insertion text in both selectors. Extend the existing precedence test to check the snippet word and preview. AI-assisted
* | docs: cleanup #42395Justin M. Keyes3 days
| | | | | | | | | | | | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks. https://github.com/neovim/neovim/issues/31825
* | fix(health): handle percent signs in LSP reports #42396Volodymyr Chernetskyi3 days
|/ | | | | | | | | | | Problem: Active-feature report text is passed to string.format() without arguments. Percent signs in buffer or client names can raise an error or change the displayed text. Solution: Report the concatenated text without formatting it again. AI-assisted
* fix(ui2): use global value of 'fillchars' #42397Evgeni Chasnovski3 days
| | | | | | | | Problem: Custom ui2 window tracks 'fillchars' option to adjust to the change of `msgsep` flag. However, 'fillchars' is `:h global-local` window option. If it is set locally to the window, ui2 reacts to its `msgsep` value and keeps using it afterwards even in other windows. Solution: Use and react to only global value of 'fillchars'.
* feat(inspector): support ranges in vim.inspect_posLewis Russell3 days
| | | | | | | | | | | | | | | | Problem: Highlight inspection is limited to a single position, and its result types do not document the fields shared by different highlight sources. Solution: Accept end_row/end_col in vim.inspect_pos to inspect a range. Keep range ends exclusive and retain the existing single-position behavior. Support Ex line ranges in :Inspect, including Visual selections. Document named result types, expose shared highlight fields, and keep the existing extmark details and buffer field for compatibility. AI-assisted
* fix(health): stop timed-out provider probe jobs #42390Volodymyr Chernetskyi3 days
| | | | | | | | | | Problem: The timeout handler raises an error before jobstop(), leaving the provider probe running after the healthcheck fails. Solution: Stop the job before raising the timeout error. AI-assisted
* fix(startup): respect --noplugin when used with --clean #42362Max Coplan3 days
| | | | | | | | | | | | | | | Problem: When starting Nvim with both `--clean` and `--noplugin` (in either order), `--noplugin` is silently ignored and built-in runtime plugins are loaded anyway. `command_line_scan()` sets `p_lpl = false` for `--noplugin`, and `--clean` sets `params.use_vimrc = "NONE"` and `params.clean = true`, which later overwrites `p_lpl` back to `true` via `p_lpl = vimrc_none ? params.clean : p_lpl`. Solution: Only reset `p_lpl = false` when `vimrc_none && !params.clean`, preserving `p_lpl = false` if `--noplugin` was passed. AI-assisted
* fix(health): run provider probes only once #42391Volodymyr Chernetskyi3 days
| | | | | | | | | | | | | Problem: Provider checks start and wait for a job, then execute the same command again to obtain its output. The returned output can disagree with the first process's exit status, and the second execution has no timeout. Solution: Return the first job's captured output. Bind the output callbacks to their state and preserve line breaks between callback data entries. Cover invocation count, multiline stdout, and merged stderr. AI-assisted
* fix(health): report when 'paste' is enabled #42389Volodymyr Chernetskyi3 days
| | | | | | | | | | Problem: The configuration check compares the boolean 'paste' option to 1, so it never reports that the option is enabled. Solution: Check the boolean value directly and cover enabled and disabled states. AI-assisted
* docs: cleanup tables, highlights.scm #42381Justin M. Keyes3 days
| | | highlights.scm: `#match` is slow, prefer `#lua-match`.
* docs: add Barrett Ruth to .mailmap #42385Barrett Ruth3 days
|
* vim-patch:9.2.1197: :autocmd completion fails after ++args (#42384)glepnir4 days
| | | | | | | | | Problem: Cannot complete the command after ++once or ++nested for :autocmd. Solution: Skip over these flags in set_context_in_autocmd() (glepnir). closes: vim/vim#21429 https://github.com/vim/vim/commit/cf57ec0db8a9bc9926c7ede86a8586f057545723
* fix(options): extend dry-run validationLewis Russell4 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: nvim_set_option_value() dry runs skip checks in did_set_* callbacks. This logic also prepares values needed to apply the option, such as tab widths or a compiled regexp. Moving the checks into validation callbacks needs a way to save that work for did_set_*. Solution: Store prepared values in optset_T so did_set_* can consume them after the option is stored. Dry runs perform the same validation, then free the prepared values without changing live state. This extends dry-run validation for: - 'cedit': reject invalid command-line window keys. - 'completeitemalign': require each completion column exactly once. - 'cursorlineopt': reject empty values and conflicting line modes. - 'encoding': accept only UTF-8 and its aliases. - 'fileencoding': reject lists and local changes with 'nomodifiable'. - 'messagesopt': require mandatory fields and enforce numeric limits. - 'spellcapcheck': return regexp errors, including under :silent!. - 'spellsuggest': reject conflicting suggestion modes. - 'varsofttabstop' and 'vartabstop': reject invalid tab widths. - 'wildmode': reject more than four completion stages. 'makeencoding' also uses the shared encoding preparation. Separating value preparation exposed a bug in 'vartabstop' and 'varsofttabstop': failed assignments could discard local tab widths, and global assignments could overwrite them. Fix this by preparing new widths separately and applying them only after a valid local assignment. AI-assisted