For notable changes, see runtime/doc/news.txt (or `:help news` in Nvim).
Following is a list of fixes/features commits.
BREAKING
--------------------------------------------------------------------------------
- 649dd00fe2 remove deprecated functions
- 0370e4def0 remove neovim qt
- 880f7d12fe remove vimballs (#22402)
- c48b1421af rename "playground" => "dev" #23919
- 2f85bbe615 rewrite TOhtml in lua
- abe39f2b24 api: change return type of nvim_win_text_height to Dict (#24365)
- 7180ef6901 api: nvim_open_win: noautocmd blocks all autocmds #28192
- 700cab0068 events: trigger CursorMoved later on switching window (#23711)
- e4a136f713 ex_cmds: remove :behave
- e5e0bda41b lsp: add vim.lsp.status, client.progress and promote LspProgressUpdate (#23958)
- 5a363ccac8 lsp: deprecate trim_empty_lines
- 5a2536de0c lsp: move changetracking to separate file (#26577)
- 58618d208a lsp: promote LspRequest to a full autocmd and enrich with additional data (#23694)
- 1b9ccd38a1 lsp: rename vim.lsp.get_active_clients to get_clients (#24113)
- eb1f0e8fcc lsp: replace snippet parser by lpeg grammar
- 448907f65d lsp: vim.lsp.inlay_hint.get(), enable(), is_enabled() #25512
- 7caf0eafd8 lua: add stricter vim.tbl_islist() and rename old one to vim.tbl_isarray() (#16440)
- 747264320c mappings: remove #n as a notation for a function key (#17318)
- f7da472257 options: graduate shortmess+=f flag
- c3d1d9445c options: graduate some more shortmess flags
- 5df4fdf253 options: make OptionSet `v:` values use typval
- 881d17a113 options: remove compatible behaviours for vim 5.0 and earlier
- e19cc9c9b7 options: unify `set_option` and `set_string_option`
- db590e96d5 startup: "nvim -l" message does not end with newline #24215
- 2ca076e45f treesitter: incremental injection parsing
- f5dc453109 treesitter: new standard capture names
- fc0ee871de treesitter: remove deprecated legacy injection format
- 6debb18523 treesitter: remove duplicated diagnostic code (#24976)
- 18da6964cc vim.iter: remove vim.iter.map/filter/totable #26138
- 9b028bd64f vim.iter: rename xxback() => rxx() #28503
- 8d4a53fe6e vim.json: remove global options, "null", "array_mt" #24070
- 40ce857797 vim.ui: change open() to return `result|nil, errmsg|nil` #28612
- e0d92b9cc2 vim.ui: change open() to return pcall-like values #28502
FEATURES
--------------------------------------------------------------------------------
- a66b0fdfaa NVIM_APPNAME supports relative paths #25233
- c0beb8173f add .luarc.json (#24592)
- 14b7ffcf89 add __call typing for vim.inspect()
- ca7e488cfe add link in issue template to minimal config template
- 4bf47222c9 add vim.text module (#26069)
- 0ebc4de0ff allow opting in to builtin clipboard providers (#28083)
- e8d3c4cccb generate types and docs for v variables
- 29fe883aa9 ignore swapfile for running Nvim processes #25336
- 28d1640dd6 improve return type annotations for vim.api.*
- 199a990c9e report "build" in vim.version() #23925
- e688793253 tostring(vim.version())
- c559ab0ae6 update unicode tables (#27317)
- ecdb6465e2 vim.version() returns a Version object
- 4b60267f82 :source: source current ft=lua buffer as Lua code (#23802)
- 428edcde70 api: add forward and back mouse buttons
- 037ea6e786 api: add nvim__redraw for more granular redrawing
- ca9f6f5694 api: add nvim_tabpage_set_win (#27222)
- db8fe63a93 api: add nvim_win_text_height (#24236)
- 16513b3033 api: allow floats to be opened in non-current tabpage (#28480)
- 6b4970f6e0 api: allow open_win/win_set_buf in the cmdwin in some cases
- 5d921e28c1 api: allow win_close in cmdwin to close wins except previous
- 472271199e api: allow win_hide to close cmdwin or non-previous windows
- 6bba4beced api: make nvim_open_win support non-floating windows (#25550)
- b162adbb7c api: pass 0 to nvim_get_chan_info for current channel (#27321)
- 42bbc4fabc api: support abbreviations in nvim_set_keymap
- 98a4ed0a11 api: support getting abbreviations (#26868)
- d3d7d763f3 builtin: improve types
- 748bc4d22d clipboard: add OSC 52 clipboard support
- db57df04b6 clipboard: enable OSC 52 clipboard provider by default (#26064)
- 734848dc1a colorscheme: add semantic tokens modifiers to builtin color scheme
- 1e0996b572 colorscheme: update treesitter groups
- 73de98256c comment: add built-in commenting
- ae4ca4edf8 complete: support f flag for complete buffer part
- 01c51a4913 completion: support completing more string options
- ae3685798d decoration: allow conceal_char to be a composing char
- 30a5c28c87 decoration_provider: log errors as error messages
- 9711370c26 defaults: add :Inspect to right-click menu (#28181)
- 2613ba5000 defaults: enable 'termguicolors' by default when supported by terminal
- 513fc46195 defaults: improve :grep defaults #28545
- c26dc1f77c defaults: map Q and @x to repeat in Visual mode (#26495)
- 8758c6fb87 defaults: set g:netrw_use_errorwindow = 0 #24179
- 1d81d7a268 defaults: treat "•" as a list item prefix #24623
- 20b38677c2 defaults: use ripgrep (rg) for 'grepprg' if available
- 61063653b0 defaults: visual CTRL-R for LSP mappings #28537
- 4ee656e4f3 diagnostic: add `vim.diagnostic.count()` (#26807)
- 73034611c2 diagnostic: add default mappings for diagnostics (#16230)
- fc6d713dd8 diagnostic: add support for many namespaces filtering in GetOpts (#28045)
- 5ed9916a28 diagnostic: enable(…, opts)
- e780177506 diagnostic: filter diagnostics by specific severities (#24736)
- b13e63db1d diagnostic: goto functions jump to highest severity (#28490)
- 26765e8461 diagnostic: is_enabled, enable(…, enable:boolean)
- 9cb7e00b97 diagnostic: provide more control over virtual text display (#24724)
- ee41153a94 diagnostic: revert default behaviour of goto_next/prev()
- 07b60efd80 diagnostic: specify diagnostic virtual text prefix as a function
- a3b3978474 diagnostics: support numhl and linehl for diagnostic signs
- 0381f5af5b diff: grouping optimization for linematch algorithm
- 42333ea98d docs: generate builtin.txt (#24493)
- 9beb40a4db docs: replace lua2dox.lua
- 1d4a5cd185 eval: exists() function supports checking v:lua functions (#26485)
- 4a1ad676ce ex_cmds: no error on :lua with {range} and {code} (#27290)
- c2433589dc ex_cmds: ranged :lua #27167
- b04286a187 extmark: support proper multiline ranges
- 1c032ad703 extmark: window scoped extmark
- 68cb4a7405 extmarks: add "undo_restore" flag to opt out of undo-restoring
- 4e6f559b8c extmarks: add 'invalidate' property to extmarks
- c249058758 extmarks: add sign name to extmark "details" array
- bbd5c6363c extmarks: add virt_text_repeat_linebreak flag (#26625)
- 15e77a56b7 extmarks: subpriorities (relative to declaration order) (#27131)
- f0884f21fa extmarks: support hl_mode "combine" for inline virt_text (#24099)
- 372aa2eb3d float: add fclose command
- 35570e4a11 float: implement footer
- 4200a0f167 float: support toggle show float window
- 1233ac467d fold: transparent foldtext
- 71530cc972 folds: support virtual text format for 'foldtext' (#25209)
- 38b9c322c9 fs: add vim.fs.root (#28477)
- e3e6fadfd8 fs: expose join_paths as `vim.fs.joinpath` (#23685)
- bc67cf3ccd gen_help_html: add anchors to help tags #25112
- b0cf9c5fee gen_help_html: ignore pi_netrw.txt errors
- 81d8fce8f9 gen_help_html: non-default vimdoc.so parser
- da09f9b551 gen_lsp.lua: protocol.Methods #24504
- f41496ce74 gen_lsp.lua: sort by name, handle failure #24504
- 3692fd4c87 gen_lsp.lua: validate CLI args #26514
- 2ff2785c39 health: checkhealth buffer can show in a split window (#26714)
- 4382d2ed56 health: fold successful healthchecks #22866
- d1bc6fca71 health: list attached buffers in LSP report #23561
- 2877672d70 health: make :checkhealth support more split modifiers (#26731)
- ddda5e0a48 help: hide filename of "gO" outline using conceal #27547
- e72c0cd920 highlight: Allow hyphens (-) in highlight group names (#24714)
- 986bf7e78d highlight: add `FloatFooter` highlight group
- 574519d9d6 highlight: tweak default color scheme
- 64a14026d7 highlight: update default color scheme
- a79694a08e issue_template: instruct not to include a package manager
- 69ffbb76c2 iter: add `Iter.take` (#26525)
- cebc00603e l10n: update Turkish translations #24246
- fec51229c4 l10n: update Ukrainian translations (#24882)
- 996dd36c77 lsp: add actionable advice to lsp client quit error msg (#24510)
- 4ff3217bbd lsp: add fswatch watchfunc backend
- 643546b82b lsp: add handlers for inlay hints (#23736)
- 317c80f460 lsp: add method filter to get_active_clients (#24319)
- 6888607415 lsp: add more LSP defaults (#28500)
- 0fe86f7e24 lsp: add opts paramater to vim.lsp.codelens.refresh
- 131a1ee82d lsp: add original LSP Location as item's user_data in locations_to_items (#23743)
- f1775da07f lsp: add snippet API (#25301)
- db0ec84fb4 lsp: add type annotations for lsp.util.locations_to_items (#26694)
- f190f758ac lsp: add vim.lsp.buf.subtypes(), vim.lsp.buf.supertypes() (#28388)
- 451bc50d40 lsp: deprecate severity_limit
- e9b85acfbb lsp: enable workspace/didChangeWatchedFiles by default (#23190)
- 4a09c178a1 lsp: fallback to code-action command on resolve failure (#25464)
- 2f22ed6a00 lsp: handle multiple clients in omnifunc (#24381)
- 63b3408551 lsp: implement textDocument/diagnostic (#24128)
- 5e3cf9fb4b lsp: improve control over placement of floating windows (#24494)
- 15641f38cf lsp: include positionEncodings in default client capabilities
- ddd92a70d2 lsp: initial support for dynamic capabilities (#23681)
- ca5de9306c lsp: inlay hints #23984
- 350d818564 lsp: inlay_hint.is_enabled({filter}) #28523
- 33e1a8cd70 lsp: map K to hover by default #24331
- 97bea3163a lsp: more annotations
- 37079fca58 lsp: move inlay_hint() to vim.lsp (#24130)
- 12c2c16acf lsp: opt-in to dynamicRegistration for inlay hints (#24102)
- a49924a318 lsp: remove notify from vim.lsp.buf_detach_client (#25140)
- 8149bd089e lsp: report fswatch errors
- fb54e6980e lsp: set client offset_encoding if server supports positionEncoding
- 96e19533f6 lsp: set kind in select call for codelens #23889
- 9af3559643 lsp: set workDoneToken in initialize request (#28182)
- f736b075d3 lsp: snippet parsing using lpeg
- 134b9ec483 lsp: soft deprecate vim.lsp.for_each_buffer_client (#24104)
- 63f9c2da9a lsp: support completion itemDefaults
- 3f788e73b3 lsp: support connect via named pipes/unix domain sockets (#26032)
- 7e36c8e972 lsp: support for choice snippet nodes
- 5c40f3e86a lsp: support vim.lsp.ListOpts.loclist in location_handler()
- abd2352bd8 lsp: update LSP protocol 3.18 typings to date (#28730)
- cfd4a9dfaf lsp: use treesitter for stylize markdown
- d5063f4b29 lsp: vim.lsp.inlay_hint.enable(nil) applies to all buffers #28543
- c0952e62fd lua: add `vim.system()`
- 9248dd77ac lua: add hl priority opts on yank (#23509)
- 6425869771 lua: add meta file for vim submodules (#24525)
- 3734519e3b lua: add noref to deepcopy
- 7c661207cc lua: add ringbuffer (#22894)
- 877d04d0fb lua: add vim.func._memoize
- ab1edecfb7 lua: add vim.iter (#23029)
- d675bd01b1 lua: allow vim.F.if_nil to take multiple arguments (#22903)
- c379d72c49 lua: allow vim.wo to be double indexed (#20288)
- e52c25b761 lua: deprecate vim.tbl_add_reverse_lookup
- f1dfe32bf5 lua: enable(enable:boolean, filter:table) #28374
- 5b40a1c09d lua: implement Iter:join() (#26416)
- c01e624b07 lua: more specific error messages for vim.api type checking
- e1ff2c51ca lua: pass keys before mapping to vim.on_key() callback (#28098)
- 2db719f6c2 lua: rename vim.loop -> vim.uv (#22846)
- 6c0812d92e lua: specific error messages for type checking `opts` params
- fd089c8e50 lua: typing for vim.fn.* (#24473)
- 302d3cfb96 lua: use callable table as iterator in vim.iter (#23957)
- 51c754b62e lua: use keyset type information
- 8e5c48b08d lua: vim.fs.normalize() resolves ".", ".." #28203
- 7e70ca0b48 lua: vim.keycode (#22960)
- 9e86f473e0 lua: vim.region accepts getpos() arg (#22635)
- 4d04feb662 lua: vim.tbl_contains supports general tables and predicates (#23040)
- 48d533272e lua-types: types for vim.api.* (#24523)
- 25e7299707 man: allow opening pages in current window (#27861)
- 08db61b19b man: respect 'wrapmargin' when wrapping man pages (#24091)
- f9944a78bc meta: add types for vim.lpeg
- deb6fd6704 msgpack-rpc: show actual request id in error message
- 01fe6b9e6a msgpack_rpc: support out-of-order responses on `msgpack-rpc`
- 619407eb54 nvim_open_term: convert LF => CRLF (#26384)
- e98decf9a6 quickfix: support -q - to read 'errorfile' from stdin (#27303)
- 7b0123dd6a remote: avoid --remote-ui infinite loop (#24465)
- cca6c4c698 rpc: allow empty string key in msgpack => Vim conversion
- d0d4160dd1 runtime: highlight hl groups in syntax.txt (#25050)
- 5f4895200a scripts: add lsp_types.lua (#23750)
- 4e6096a67f server: allow embed with listen (#25709)
- 170c890dca shortmess: "q" flag fully hides recording message (#27415)
- d3582e102b statuscolumn: re-evaluate for every screen line (#25885)
- 224f303ee5 stdlib: add vim.base64 module (#25843)
- fa131de9ad tabline: middle mouse button now closes tab (#27522)
- c855eee919 term: enable reflow by default (#21124)
- cd1b14f027 termdebug: improve `:Evaluate` floating window (#26621)
- cffdf102d4 terminal: allow :terminal to take modifiers (#15427)
- 0c89854da1 terminal: close shell terminals automatically
- 7589336120 terminal: respond to OSC background and foreground request (#17197)
- beca827212 terminal: trigger TermRequest autocommand events (#22159)
- c6ec7fa8d7 treesitter: add 'injection.self' and 'injection.parent'
- 6cfca21bac treesitter: add `@injection.filename`
- 5d8ab32f38 treesitter: add a query editor (#24703)
- cb0a1a10b2 treesitter: add bash parser and queries
- bb15fa0356 treesitter: add folding for `InspectTree` (#27518)
- 9ce1623837 treesitter: add foldtext with treesitter highlighting (#25391)
- 31c4ed26bc treesitter: add injection language fallback (#24659)
- 28f54a7878 treesitter: add lang parameter to the query editor (#25181)
- 88c8803aa1 treesitter: add python parser and queries
- c194acbfc4 treesitter: add query_linter from nvim-treesitter/playground (#22784)
- af040c3a07 treesitter: add support for setting query depths
- 11844dde81 treesitter: bundle markdown parser and queries (#22481)
- 5e6240ffc2 treesitter: handle quantified fold captures
- f69658bc35 treesitter: highlight Lua files by default (#26824)
- 988b472d90 treesitter: highlight help files by default (#26347)
- 845d5b8b64 treesitter: improve query error message
- 189fb62032 treesitter: improved logging (#23638)
- c0b99bb1de treesitter: show root nodes in :InspectTree (#26944)
- cb46f6e467 treesitter: support URLs (#27132)
- ff6092b4ee treesitter: update Bash parser and queries to v0.21.0
- 8dda630ae9 treesitter: update C parser and queries to v0.21.0
- 3836eeb901 treesitter: update C queries from upstream
- aca4ad430b treesitter: update Lua parser and queries to v0.1.0
- 5e875ae8d0 treesitter: update Markdown parsers and queries to v0.2.1
- 8a3385dde7 treesitter: update Python parser and queries to v0.21.0
- 20dcbaaaf8 treesitter: update Vim parser and queries to v0.4.0
- 987dff6713 treesitter: update Vimdoc parser and queries to v2.4.0
- 1384bebd5a treesitter: update query parser to v0.2.0
- 668f16bac7 treesitter: upstream query omnifunc from playground (#23394)
- a478bf936b treesitter: use 0-based indexing to show ranges in `:InspectTree`
- ac8ed77afb tui: add 'termsync' option (#25871)
- 4ee9e58056 tui: query extended underline support using DECRQSS (#28052)
- b4b7ca2d54 tui: support DCS responses in TermResponse event (#26061)
- 622ae2f53e tui: support Super and Meta modifiers (#24357)
- a142670360 tui: support undercurl in WezTerm (#28037)
- 56627ca242 tui: use TermResponse event for OSC responses (#25868)
- 32b49448b2 tutor: add Japanese tutor #27268
- 9c2270b834 types: add `test/.luarc.json`
- d3a8e9217f ui: add chdir UI event (#27093)
- 6ea6b3fee2 ui: add support for OSC 8 hyperlinks (#27109)
- b72931e704 ui: allow non-zero 'cmdheight' with ext_messages
- 2615ed879e ui: allow to get the highlight namespace
- e38027ef69 ui: completeopt support popup like vim
- 2e4e12756a ui: indicate margins for the area used by win_viewport
- efa9b299a7 ui: inline virtual text
- dacd34364f ui-ext: make 'mousehide' into proper ui_option (#25532)
- 43ded8d358 version: unverbose ":version", ":verbose version" #24195
- 0a598c13b1 vim.deprecate: only issue warning if neovim version is high enough
- a767c046f4 vim.iter: add Iter:flatten (#26786)
- af6e6ccf3d vim.ui: vim.ui.open, "gx" without netrw
- fa4b02fa67 vim.version: add `vim.version.le` and `vim.version.ge`
- 27a566f3f8 vimdoc: support Markdown code blocks (#25127)
FIXES
--------------------------------------------------------------------------------
- f5573fba3d Remove nested for_each_tree in TSTreeView (#26328)
- ae28ef327e adjust error message for error in UI event callback (#28200)
- ebe489d8f0 allow multiline message for echoerr (#25380)
- 592bc831ce avoid ui_grid_cursor_goto when drawing window separators
- d6483793e1 buffer overrun in lmpack_session_receive
- 3bbb0aa399 checkhealth warning even if init.lua exists #25306
- 5cb906e91c correct versions in deprecation warnings
- 118fd8367c deduplicate gen_cflags
- eb4676c67f disallow removing extmarks in on_lines callbacks (#23219)
- 6e9b204afb doc errors
- 77d3526a3d explain that user should run nvim with -V1 to see more information
- fd791db0ec fix ASAN errors on clang 17 (#25469)
- bb38c066a9 fix compiler warning from clang
- 478273a423 fix iter_matches call in query linter (#27496)
- bb7324292c flush UI state before blocking in vim.wait (#25938)
- 44d4ae448d function was renamed (#23772)
- 1dd700a8d9 gf fails on "foo/bar.txt:1:2" on Windows
- 6e703f778f handle argv not present in nvim_get_chan_info
- 56dc8b9212 heap-buffer-overflow in file_name_in_line
- 74b2f6c3d9 ignore non-existent properties during header generation
- f5a09f1b03 invoke changed_bytes when rewriting <Tab> char #25125
- b8273c9a33 lua annotations
- 69d49727d7 luacheck
- 4ce3159e24 missing case in setxattr error handling (#26176)
- 41fb98d6fa move fswatch linux check inside of vim.schedule (#27824)
- ba58c6f8a4 only attempt to close timer if not already closing (#26047)
- b400b947f3 prevent child processes from inheriting ui channel file descriptors
- 99b8a343e1 quick update, squash later
- 83b51b36aa raise TS min version
- a090d43d61 splitting of big UI messages
- 2424c3e696 support UNC paths in vim.fs.normalize
- 43e76cc346 tostring(vim.version()) fails if build is NIL #24097
- 8c7a8be274 transposed xcalloc arguments (#28695)
- 35f453f65d type warnings in shared.lua
- f112ac73bd unreliable "checkhealth completions" test
- b32b5b2711 use BEL to terminate OSC 11 request (#26335)
- d95e3a4c9c use no_ff instead of ffdos as condition
- a1bec02c1e use snprintf instead of sprintf
- ca887b80a9 version-range < and <= #23539
- c1ee187f82 vim.loop in luv threads (#23924)
- fe4583127f vim.validate() order is not deterministic #28377
- be8b15200d windows timeouts have exit code 1
- 1f8fb7c000 :let: fix error when applying operator to boolean option (#24030)
- 5a3752889c NVIM_APPNAME: show error message if $NVIM_APPNAME is invalid
- c4ad15ae32 PVS/V009: add top-level message
- 128e194f64 PVS/V1001: variable is assigned but is not used
- 1bbbca267d PVS/V547: expression is always true/false
- 592e4472da PVS/V564: the '|' operator is applied to bool type value
- 30d311ebcf PVS/V592: expression is enclosed by parentheses twice
- 3ecd45ded0 api: allow negative column arguments for nvim_buf_set_text (#23501)
- 3ac952d4e2 api: avoid assertion when autocmd group id is 0 (#23210)
- b2a8a93147 api: avoid immediate TextChanged with nvim_create_buf (#25492)
- ef7ae66eef api: avoid integer truncation
- b1e24f240b api: avoid open_win UAF if target buf deleted by autocmds
- 0a81ec14a4 api: better topline adjustments in nvim_buf_set_lines
- c18f3cfcdb api: crash after nvim_win_set_config title/footer validation error (#26606)
- aa4e47f704 api: disallow some more functions during textlock
- 22d9338afc api: disallow win_set_buf from changing cmdwin's old curbuf (#24745)
- da979ae04b api: do not re-apply win_config.style when missing
- 344906a08f api: do not update grid position in nvim_win_set_cursor (#28235)
- 22205f36a6 api: don't change title when setting buffer in a window (#23492)
- 711a2f5ff6 api: don't leak memory with nvim_win_get_ns (#27570)
- 1cf51a07a6 api: don't set coladd of mark (#26648)
- 5fd1bac65e api: don't use stl 'fillchar' for "use_statuscol_lnum" (#27501)
- a3751f5de2 api: dont change curwin for nvim_win_set_height
- 1ff4562502 api: dont change curwin for nvim_win_set_width
- 59fed8bb64 api: extmark highlight groups not always included in details (#23179)
- 9b9030ff2c api: fix inconsistent behavior of topline touched in recent refactor
- fc2a56fe61 api: fix set_lines viewport adjustment, but this time good
- b7763d7f6b api: get virtual text with multiple hl properly (#25307)
- b3be7b7413 api: handle NUL in nvim_err_write() and nvim_out_write() (#25354)
- 132bbd1cbd api: handle clearing out last line of non-current buffer
- d942c2b943 api: handle win_split_ins failure properly
- 5cfdaaaeac api: ignore 'autochdir' when renaming other buf (#28376)
- 2fc2343728 api: ignore 'autochdir' when setting buf in other win (#28371)
- 7367838359 api: limit depth of nvim_cmd (#27225)
- 0da27e9bde api: load buffer first on nvim_buf_set_lines (#25823)
- 4e5c633ed4 api: make getting explicit empty hl in virtual text work (#28697)
- d05d63a18f api: make nvim_get_hl not return non-existing groups
- a70eae57bd api: make open_win block only enter/leave events if !enter && !noautocmd
- 5d58136ccc api: make open_win/win_set_config check if splitting allowed
- 4ec8fd43bf api: make width/height for split by nvim_open_win work (#28341)
- b1577d371a api: make win_set_config with "win" for splits need "split/vertical"
- 0330dd9e69 api: mark nvim__complete_set as experimental #28579
- d22172f36b api: more intuitive cursor updates in nvim_buf_set_text
- b051b131f5 api: nvim_buf_get_offset in a new buffer with zero or one lines
- e0453d7f57 api: nvim_cmd{cmd="win_getid"} parsed as :winsize #24181
- 6091df6b7a api: nvim_create_buf assert fails if autocmds set &swapfile
- d5c23d72a5 api: nvim_create_buf leaks memory if buffer is loaded early
- b7708eac24 api: nvim_get_hl should return default flag
- a741c7fd04 api: nvim_parse_cmd error message in pcall() #23297
- e55a502ed4 api: open_win fire Buf* events when !enter && !noautocmd if entered early
- a873f33993 api: open_win fire BufWinEnter for other buffer when !enter && !noautocmd
- e7c262f555 api: patch some cmdwin/textlock holes
- a9968912b7 api: redundant error when using `nvim_cmd` (#24010)
- dbcba26bf1 api: revert unintended change of optional bool params
- b25753381c api: set script context when using nvim_set_hl (#28123)
- d3ea9a04bc api: update "w_scwidth" in nvim_eval_statusline()
- c971f538ab api: update grid cursor in nvim_win_set_cursor()
- 130cb4815a api: use a conditional stack for nvim_cmd (#26341)
- cf9f002f31 api: use correct buffer for "range" in nvim__redraw (#28614)
- 77118d0da8 api: use text_locked() to check textlock
- bcb70eeac4 api: win_set_config autocmds crash when moving win to other tabpage
- 233649bc75 api: win_set_config fires unnecessary autocmds
- b52d15853e api: win_set_config set tp_curwin of win moved from other tabpage
- 54022a2946 api: win_set_config update statuslines after removing splits
- a9cd8467cb api: wrong nvim_buf_set_extmark error for invalid hl_mode
- 4d3a38ac07 api, lua: handle setting v: variables properly (#25325)
- 92760a7f42 api, lua: make blank lines in a message work properly (#24244)
- 08fc1ebbaa api/buffer: fix handling of viewport of non-current buffer
- 24e3ee9d07 api/options: validate buf and win
- 139e6f68f9 autocmd: API functions accept garbage after event name #25523
- 02d00cf3ee backup: E1509 when writing extended attr to symlink (#28014)
- 746a153bc1 base64: only check padding if leftover index is set (#25854)
- 533e01a75b base64: properly handle embedded NULLs when decoding (#28349)
- 095bd8d0f8 buffer: do not filter help buffer
- e5d9b15044 buffer_updates: correct buffer updates when splitting empty line
- 11865dbe39 build: better deps for doc
- ffaf74f147 build: distinguish vim.mpack from global require'mpack'
- f9416470b1 build: include FindPackageHandleStandardArgs
- ade42d531b build: teach cmake about vvars
- da7178cbbf builtin: fix incorrect optional fields for fn.sign_define
- 6fa0f303d7 builtin: parameter mismatch between winsaveview and winrestview
- 3159a2c28f change: update fold after on_bytes (#26364)
- 342c7da4bd channel: use os_write() instead of fwrite() for stderr (#26689)
- cd6458123f charset: fix wrong display of 0xffff (#24158)
- 603f3b36a4 checkhealth: error in node.js check #28348
- b0978fca6b checkhealth: fix crash due to incorrect argument type
- 7f94a032e1 checkhealth: shell_error and cpanm module
- bfdec5b0e7 clang: null pointer dereference in parse_msgpack #25389
- 1027ccac6d clangd: check size of array before applying qsort on it
- cdd8017469 clangd: set block pointer to null in case map is empty
- 6851b265ba clipboard: don't pass --foreground to wl-copy (#25481)
- c3de6524a5 clipboard: ignore exit caused by signal #23378
- 3128cff6b1 clipboard: increase OSC 52 wait timeout (#25936)
- 46ceefb52b clipboard: make getreg() accurate for clipboard registers (#26740)
- d2983dcdb1 clipboard: make osc52 work with PUC Lua (#26014)
- e51e524175 cmake: restore previously undocumented workround, now documented
- 3688735c2b cmdline: don't redraw 'tabline' in Ex mode (#24123)
- c72d877c33 cmdline: wrong 'incsearch' highlighting after :redraw (#27947)
- bc67bbe446 codelens: add buffer and line checks before displaying codelens (#23887)
- 2b1a6e7597 colorscheme: add missing LSP groups
- 0c850add3e colorscheme: default statusline groups usability #26921
- 8b23653695 colorscheme: link LSP semantic tokens to treesitter groups
- 62e0e0349c colorscheme: try .lua files in 'rtp' before .vim files in 'pp' (#23727)
- eca72def1f colorscheme: typo
- d4bd6b1eaa colorscheme: use explicit normal foreground in syntax groups
- 3c724fe1f3 column: 'statuscolumn' not drawn after virt_lines with "n" in 'cpo' (#22967)
- cdc028e97d column: add truncated width during estimation for 'statuscolumn'
- e89071522c column: always set b_signcols.max
- c126a3756a column: apply numhl signs when 'signcolumn' is "no" (#26167)
- 2ded2e75f4 column: avoid exceeding configured 'signcolumn' width
- b50fdcba4a column: clear "b_signcols" before moving saved marks
- 13d50c3b13 column: clear "b_signcols" when marktree is cleared
- ec74538044 column: correct width after truncated 'statuscolumn' error (#26737)
- 2bdef6dd2a column: don't overflow sign column with extmark signs (#23854)
- bab4bcdefb column: don't reset 'statuscolumn' width after it has been drawn
- c509f4907b column: fill 'statuscolumn' clickdefs with evaluated width (#26891)
- 25e62697c3 column: fix wrong cursor with 'statuscolumn' and cpo+=n (#24268)
- dbf6be296d column: full redraw with 'stc, 'rnu' and inserted lines (#27712)
- 7d0a23973b column: handle unprintable chars in 'statuscolumn' (#24198)
- 0db6946b39 column: handle w_redr_statuscol at end filler lines (#27365)
- 97122eaa1c column: ignore empty signcols range (#28177)
- 967c7abde3 column: keep track of number of lines with number of signs
- f871fee8b6 column: pass kFalse when initializing "b_signcols.count"
- 44d4f03573 column: rebuild status column when sign column is invalid
- c6864b0d14 column: redraw 'statuscolumn' on wrapped lines with 'relativenumber'
- 35cec0de4a column: redraw and update signcols for paired extmark
- d88814ef68 column: remove sign from line it was previously on with undo
- df399ea0d2 column: reset decor state before starting from top
- 5a4e0b837f column: use a single path for sign sorting (#27431)
- a878e02d5d column: use maxwidth to allocate/fill 'statuscolumn' click defs #24190
- 783b0aba41 completion: check that healthcheck name is string (#28458)
- fbeef0d4ef completion: don't add backslashes to runtime pattern (#24296)
- cdc8bacc79 completion: filter results with complete+=f (#26029)
- af8500af64 completion: improve popup window position (#26739)
- d1b2a5cf5f completion: make sure the buffer name is valid (#25975)
- e9b9a86cd5 context: don't crash on invalid arg to nvim_get_context (#25977)
- fdaf6bc557 context: don't leak memory on multiple invalid objects (#25979)
- 55be4a4e26 coverity: dead code #25562
- 6d698c86d0 coverity: unhandled retval for marktree_itr_get_overlap() #26518
- 6f49ed58c3 coverity/348240: memory leak in put_view()
- 9d48266bed coverity/471380: null dereference in get_local_additions()
- ae48d965d7 coverity/477623,477624: guard null pointer dereference in kv_concat_len (#27022)
- 2b0acacb3c decor: allow adding providers during redraw
- 5ca330859c decor: check decor kind before accessing union field (#27205)
- 60d320dea3 decoration_provider: don't leak memory on error (#24410)
- 65738202f8 decorations: better approximation of botline #24794
- 2accf24805 decorations: crash with revised mark with changed decoration flags
- a0e9ef09d7 decorations: do not apply sign highlight id as range attr id
- fba17d5b88 decorations: fix imbalanced sign count
- 444f37fe51 decorations: incompletely displayed line should also get decorations
- dc48a98f9a decorations: validate botline for on_win
- 328a237351 defaults: auto-close terminal for &shell with args (#28276)
- 5aa1ba3efe defaults: background detection in tmux (#26557)
- 5e98439f6d defaults: diagnostic mappings descriptions #28646
- ccb5a76e5a defaults: don't use nvim_feedkeys in default mappings (#24520)
- 85cb0b0ddc defaults: make terminal autoclose not block other events (#27581)
- aa1d0ac095 defaults: only repeat macro for each selected line if linewise (#28289)
- eef2aedff6 defaults: remove tmux background detection passthrough (#27571)
- 5b45efbee6 defaults: set 'fsync' #26034
- 8df3742378 defaults: use augroup for default autocommands (#26933)
- a8e4ee2f2b defaults: validate 'channel' before responding to OSC request (#27594)
- 6318edadc3 defaults: visual hash (#) on text with "?"
- abd380e28d defaults: visual mode star (*,#) is fragile
- b9a0e762f1 defaults: visual star (*) on text with "?"
- 9b4b23493d defaults: wait until VimEnter to set background (#26284)
- 72e3d8c3f9 deps: bump luv to 1.48.0-2
- 87db6d894a deps: make sure --force-config takes effect
- 7aad4643f9 deps: remove stray conflict marker
- 8a6716682e deps: restore functionality of USE_EXISTING_SRC_DIR
- d4dc884012 deps: restore functionality of USE_EXISTING_SRC_DIR
- d272143318 diagnostic: always return copies of diagnostic items (#25010)
- 29d5ff6ac4 diagnostic: check for sign namespace instead of sign group
- 3d8f0cb695 diagnostic: check if delete failed in `qf_fill_buffer()` (#25932)
- 89ffdebd20 diagnostic: fix typing on field |diagnostic-severity|
- 83635e4e3d diagnostic: get border from config (#28531)
- 96f59e1b99 diagnostic: invalid col number compare in next_diagnostic (#28397)
- ad76b050eb diagnostic: open_float on multi-line diagnostics #28301
- 37011bc45e diagnostic: rename buffer → bufnr in type annotation (#23042)
- 50284d07b6 diagnostic: typing
- a4fc3bb0e6 diagnostic: vim.diagnostic.get(…,{lnum=…}) on multi-line diagnostic #28273
- add1b10b79 diagnostic: virtual_text prefix function should have index and total (#25801)
- 35f475d0a5 diagnostics: if buffer not loaded, skip handlers that set extmark (#25628)
- 5a25dcc5a4 diff: filler lines for hunks bigger than linematch limit (#24676)
- 2f9ee9b6cf doc: improve doc generation of types using lpeg
- c4417ae70c doc: prevent doxygen confusion
- 67f5332344 docs: clean up non-docstring comments for vimdoc gen
- ae7020c667 docs: fix TSNode incorrect signatures
- ab65a98adb docs: ignore_invalid #24174
- f40df63bdc docs: make lines not overflow in vim docs
- 0a90e4b05a docs: match DocSearch style with site theme
- 0d149bb186 docs: the runtimepath is not the runtime path
- 957d05d16b docs: too much whitespace around <pre> blocks #24151
- d931b829e9 docs: vimdoc syntax errors
- 036da0d079 docs: vimdoc syntax errors
- 17c59e417f docs: vimdoc syntax errors
- 34b57508a7 drawline: check filler_todo in place of removed draw_state (#27889)
- 455bca1ba8 drawline: combine extmark highligh with area hl correctly
- 3299797150 drawline: consider position in linebuf for foldcolumn (#26803)
- 889f81c65f drawline: don't invoke on_line for filler line (#28219)
- 2b9d3869f8 drawline: don't use temporary "v" variable when not needed (#26777)
- 06694203e5 drawline: fix missing Visual hl on double-width fold char (#24308)
- d5488633f6 drawline: initialize linebuf_attr to 0 instead of -1 (#27840)
- e9280a68f7 drawline: initialize variable
- 2819718873 drawline: initialize variable
- 36941942d6 drawline: inline virt_text hl_mode inside syntax/extmark hl (#24273)
- 37b73cf14b drawline: make cursorlineopt=screenline work with resized grid
- be1d09c427 drawline: missing NUL termination when drawing TAB (#27307)
- 5b31447811 drawline: update prev_ptr after getting syntax attrs (#27072)
- 14839c5d18 edit: backspace adds extra spaces for inline virtual text (#28005)
- 267e90f31d edit: don't go to Terminal mode when stopping Insert mode (#27033)
- b2e8c0df20 edit: fix K_EVENT interfering with 'digraph' (#24258)
- 143a178332 editorconfig: add missing root validation (#23462)
- cbbda3bcd7 editorconfig: check that buffer is valid (#23922)
- abb8c2c453 editorconfig: do not set 'endofline'
- df2f5e3912 editorconfig: highlight properties with dashes (#24407)
- dc45fb4655 editorconfig: only warn once on errors
- cdbc3e3f3e editorconfig: syntax error regression
- bf0c69e504 eval: correct failure return value for readfile/blob (#27722)
- 5b312cd5f6 eval: make has('pythonx') work properly (#27739)
- 0e4086b741 eval: prevent double-free in garbage collection (#22990)
- 12d123959f eval: properly support checking v:lua function in exists() (#27124)
- b8c34efe33 eval: skip over v:lua properly (#27517)
- ad2fad9a3b event-loop: flush UI when no input is available (#25728)
- 6725565258 event-loop: process input before events (#27358)
- 58a1ef8e6a events: avoid unnecessary CursorMoved (#24675)
- bf9e92c81c events: check for WinResized/WinScrolled in terminal mode (#27226)
- dd24ea8195 events: don't expand non-file as file name
- 774a32e5fe events: null dereference in autocmd functions
- a8cfdf43bc events: trigger VimResume on next UI request (#24426)
- a114a21eff ex_getln: initialize pointer with NULL
- 9e7c4fe579 exception: remember whether message is multiline (#25351)
- 4a098b97e5 excmd: append original command to error message
- 75d9c413d4 excmd: make :def unknown rather than unimplemented (#23150)
- f1dd75c2af exitfree: don't use ex commands to close windows in free_all_mem()
- 79a558277b extmark: fix crash when stepping out from internal node
- a78fd18ed9 extmark: fix cursor position with both left and right gravity inline text
- 320e9c1c21 extmark: only invalidate unpaired marks on deleted rows
- 8e97edb93f extmark: restore extmarks when completing original text
- 2d33a766a1 extmarks: `U` changed_bytes after extmark_splice (#26501)
- 23c21e7630 extmarks: account for rightleft when drawing virt text (#25262)
- d54156ed08 extmarks: blending space shouldn't overwrite wide char (#26960)
- 54225bdb02 extmarks: crash with sign after many marks
- 65b1fd00a7 extmarks: do not remove decor from invalid old marks
- 437d35dbf7 extmarks: do not remove invalid marks from decor upon deletion
- a05bbc60ea extmarks: don't position overlay virt_text halfway a char (#24027)
- 4dd43e31db extmarks: don't show virt lines for end mark (#23792)
- dfa8b582a6 extmarks: draw TAB in virt_text properly with 'rl' (#25381)
- a6e4793baf extmarks: draw virt_text below diff filler lines properly (#25170)
- 958cc22836 extmarks: empty inline virt_text interfering with DiffText (#24101)
- 0534ad8ca5 extmarks: empty inline virt_text interfering with Visual highlight
- 31a51acdc3 extmarks: fix heap buffer overflow caused by inline virtual text (#23851)
- 9c41a81dec extmarks: fix virt_text_hide off-by-one hiding (#23795)
- a6dd67f5b6 extmarks: fix virt_text_hide with 'nowrap' and multibyte (#23757)
- 818d7f6daf extmarks: fix win_col virt_text drawn on wrong screen line (#25264)
- c4df2f08b6 extmarks: fix wrong highlight after "combine" virt_text (#24281)
- b65cd7ff1a extmarks: fix wrong virt_text position after wrapped TAB (#25168)
- 4c7cec4e29 extmarks: handle inline virt_text with empty chunk (#24005)
- ee3d4f6b90 extmarks: handle overwriting right half of wide char (#26951)
- f4f1ce1d16 extmarks: hide inline virt_text properly with 'smoothscroll' (#24106)
- 34a786bc49 extmarks: inline virt_text support multiple hl groups (#25303)
- 5a6c7c805b extmarks: make empty "conceal" respect &conceallevel = 1 (#24785)
- 510e1f131b extmarks: make right_align and win_col work on wrapped line (#23759)
- 215244f749 extmarks: missing "spell" and "conceal" in details (#27116)
- 35e50d79c6 extmarks: overlay virt_text position after 'showbreak' (#25175)
- a0790558c3 extmarks: priority order of inline and non-inline virt_text (#27532)
- b52bd8a2de extmarks: properly handle virt_text on next screen line (#25166)
- a376d979bd extmarks: redraw line on adding/removing conceal (#27463)
- 2d9e063a63 extmarks: redraw pre-undo position (#27437)
- 2137edbd4f extmarks: redraw properly with scoped inline virt_text (#27569)
- 1cc358aed6 extmarks: restore old position before revalidating
- 0818d65528 extmarks: skip virt_text if it is out of window (#25658)
- 19d63563e1 extmarks: splice earlier when opening new line (#28108)
- 362df0f793 extmarks: wrong display when changing text with virt_lines (#24879)
- d5a85d737a f_wait: flush UI before blocking (#25962)
- 81f67b79e8 file_search: path with spaces in finddir() and findfile() (#25493)
- a69c720639 fileio: fix off-by-one in rename_with_tmp (#27780)
- c6c21db82b filetype: add typing and dry (#24573)
- 020d1f626a filetype: call on_detect before setting buffer filetype
- fdf5013e21 filetype: correctly detect bash-fc-{id} files as "sh"
- d6f406db45 filetype: don't use fnamemodify() with :e for extension (#27976)
- 670c7609c8 filetype: make sure buffer is valid before call nvim_buf_call (#24922)
- af38b46a25 filetype: return on_detect function when matching by file contents
- 2955c921ce filetype: use unexpanded file name (#27931)
- e32af31ee8 flake: clang-tools moved to nativeBuildInputs (#26955)
- fd08fd3de3 float: add fixd option
- 884470124d float: allow floating window in cmdline area
- 9ecb43b637 float: apply 'winblend' to title/footer highlight (#25999)
- 898371fc9f float: don't relative flaot win itself
- fcdfbb4303 float: fix some other crashes with :unhide or :all (#25328)
- 3ea124a8d9 float: improve error message when reconfig failed (#25076)
- c5abf487f1 float: make "fixed" work with relative=win (#25243)
- 03e8b5fc91 float: make bufpos work properly with resized parent grid
- 437ed3cee2 float: trigger winnew event when float window create
- f5953edbac float: update position of anchored windows first (#25133)
- 9de157bce4 float: win_get_bordertext_col returning negative column number (#25752)
- 5f18dd3013 float: wrong position when bufpos is set
- 0e01e81552 folds: allow overlay virtual text on folded line (#23892)
- ee986ee044 folds: combined Folded and Visual highlights (#23752)
- ded01a819a folds: don't show search or match highlighting on fold (#24084)
- 811140e276 folds: fix missing virt_lines above when fold is hidden (#24274)
- 678548a2b4 folds: show Folded highlight in Visual selection (#23741)
- 58f9486144 folds: update folds in Insert mode with fdm=indent (#24402)
- 38e38d1b40 fs: allow backslash characters in unix paths
- 8a7e3353eb fs: make `normalize()` work with '/' path (#24047)
- ae5095cac9 fs: use generics for better typing
- e4da418ba8 fs.lua: normalize slash truncation (#23753)
- 06fcf71bd0 fswatch: --latency is locale dependent
- 502a7a0558 ftplugin: respect runtimepath ordering
- 03a2c5b772 ftplugin: source Lua files after Vimscript files per directory (#23801)
- be5cf33836 gen_help_html: type warnings, spell_ignore_files #27254
- 6c35fb421e gen_lsp.lua: improve type name, and fix wrong type inheritance
- 214b125132 gen_lsp.lua: no notifications in lsp.Methods #24530
- 765729a145 gen_vimdoc: INCLUDE_DEPRECATED not generating docs for deprecateds
- ccf328172b gen_vimfn_types: don't include tag before signature's line (#24492)
- 86c9d8b53c gen_vimvim: correctly add aliases to vimAutoEvent (#23429)
- 240c41e1af genvimvim: add special abbreviations of :delete (#23172)
- 51ea753747 genvimvim: generate prefixed boolean options properly (#27487)
- 9f32deba56 grid: add start column when getting char on line (#25627)
- 4ed1c2a8af grid: don't draw beyond max column (#26172)
- 9c202b9392 grid: handle clearing half a double-width char (#27023)
- 6a486c44e6 gx: move to to _init_default_mappings #24420
- 67b2ed1004 gx: visual selection, expand env vars
- e39b6d0c52 health: "attempt to concatenate nil"
- 7ffe450173 health: check for _host_prog variables properly (#23014)
- 50cd5ed360 health: check more "old" files
- f6dcc464f2 health: check unmatching python_glob as empty table (#28215)
- 6818ba271c health: clients may not support watchfiles #28710
- 03a021f378 health: combine python and virtualenv healthchecks (#23004)
- c67efe3a9c health: correctly expand and resolve PYENV_ROOT (#26953)
- 88eb0ad149 health: fix tmux RGB capability detection (#26886)
- cde4892b49 health: fix typo in function name
- 63a17322dd health: improve python executable check error handling (#26954)
- ba88fd886a health: malformed call to warn() #26217
- 8c6f97bef8 health: properly use the value of $PYENV_VERSION (#23109)
- c8ebb04e92 health: replace healthFoo with DiagnosticFoo (#23475)
- 843c1bed95 health: stop job properly on timeout (#23877)
- 96d0c709b6 healthcheck: expand vimrc variable (#28379)
- 4229bbe514 helptags: make multibyte help tags work properly (#23975)
- 7b6d041bae heredoc: allow missing end marker for scripts
- a2f17e97ec highlight: add `FloatFooter` to 'highlight_defs.h' (#25577)
- 837f268093 highlight: add `Nvim{Light,Dark}Gray{1,2,3,4}` colors
- 8afb3a49c0 highlight: add create param in nvim_get_hl
- f8ea49cfe1 highlight: add force in nvim_set_hl
- 4ce0ada0d4 highlight: add missing g: prefix for colors_name (#22952)
- 03ca36d1f8 highlight: apply 'winblend' to NormalNC (#23555)
- 6c3e170e56 highlight: apply 'winblend' to float border (#25981)
- d4872377fe highlight: attr set all when normal attr changed
- dcaf207336 highlight: combine ColorColumn with low-priority CursorLine (#23017)
- 66925f14de highlight: consistently spell "Goldenrod"
- 5183651773 highlight: correct hi command output
- ca7dd33fa7 highlight: don't show CursorColumn on current line (#27848)
- 59289fb987 highlight: make CurSearch work properly with 'winhl' (#24448)
- b11a8c1b5d highlight: remove unnecessary assignment to char_attr for 'spell' (#23713)
- 9a2c98087b highlight: update `IncSearch` to link to `CurSearch`
- ab92575753 highlight: winhl receive wrong argument
- b60a2ab4cb inccommand: block errors when parsing command line again (#24374)
- bc5b0da84e inccommand: don't crash with "split" and 'n' flag
- 382ea4d402 inccommand: don't preview in Ex mode (#26587)
- c1c2a1b5dd inccommand: don't save information of a buffer twice (#24501)
- ef44e59729 inccommand: don't set an invalid 'undolevels' value (#24575)
- ba9f86a9ce inccommand: improve preview buffer number handling (#27087)
- 643bea31b8 inccommand: restrict cmdpreview undo calls (#24289)
- 1dba570e63 inccommand: save and restore '[ and '] marks (#26442)
- 35ffe58ea4 inccommand: update topline after moving cursor (#27341)
- a14c780918 input: set termkey buffer size to read stream capacity
- b61575ba70 intro: clear intro if new buffer is shown in focused float
- 9530a23016 intro: link showing intro to state at start
- 0570a19c8a intro: make intro explicitly stateful
- d1a30221fc intro: redrawing intro exposing pseudo-randomness
- 21360523cd intro: still show intro message with floating window
- 6b96122453 iter: add tag to packed table
- 2ee8ace217 iter: make pipeline termination conditions consistent (#24614)
- 9489406879 iter: remove special case totable for map-like tables
- 57ccd82417 job-control: fix use after free (#25223)
- 1c71c32b29 job-control: make jobwait() flush UI after hiding cursor (#25927)
- e057b38e70 json: allow objects with empty keys #25564
- af6537bc66 jumplist: Ctrl+o, Ctrl+i weird behavior when deleting buffers #25461
- 017ff93b02 keycodes: recognize <t_xx> as a key (#24700)
- 6709f7f8f1 keycodes: simplify S- properly when D- is present (#27316)
- 4447cefa48 l10n: update Japanese translations (#27856)
- 7d17ab5b6f l10n: update Ukrainian translations (#26819)
- 908843df61 languagetree: apply `resolve_lang` to `metadata['injection.language']`
- e353c869ce languagetree: don't treat unparsed nodes as occupying full range
- 6b5f44817e languagetree: remove double recursion in LanguageTree:parse
- f5530bf566 linematch: initialize array
- 766f4978d6 lint: lint warnings #24226
- 5465adcbab lint: use tbl_contains
- 0804034c07 loader: cache path ambiguity #24491
- 89135cff03 loader: remove cyclic dependency on vim.fs (when --luamod-dev)
- 66c66d8db8 loader: reset hashes when running the loader
- ec80e4cb4d log: increase size of buffer for nvim instance name
- 4d0f4c3de9 lsp: E403 if doc contains multiple codeblocks #24458
- 20c331915f lsp: SignatureHelp docstring is not escaped #16702
- 01691c5447 lsp: abort callHierarchy on no result (#28102)
- 9abced6ad9 lsp: account for border height in max floating popup height (#25539)
- 3e016fa8d4 lsp: actually send diagnostic-tags back to the server
- 37d8e50459 lsp: add "silent" option to vim.lsp.start (#28478)
- 2e1f5055ac lsp: add assertion for explicit bufnr in apply_text_edits (#27614)
- 542c910a1d lsp: add missing LSP semantic token highlight links
- be5e361154 lsp: add param assert in client_is_stopped (#23857)
- ac0e8323dc lsp: add parentheses to generated union array types (#27560)
- 0fcbda5987 lsp: add snippet regression test (#27618)
- e42fdaad21 lsp: add spacing for inlay hints separately #24079
- 48bcc7b971 lsp: advertise workspace.didChangeConfiguration capability (#26028)
- c07dceba33 lsp: allow Lua pattern chars in code action filter (#24041)
- 3bf887f6e0 lsp: always return boolean in lsp.buf_client_attach (#24077)
- 966eb8e0b3 lsp: announce publishDiagnostics.dataSupport (#24442)
- 39fc340276 lsp: avoid assertion when `client_hints` do not exist (#28461)
- 47dbda97d2 lsp: buffer messages until connected to server (#28507)
- adbe7f3683 lsp: call `on_list()` even for single location (#25830)
- 15983cf2c6 lsp: cancel session when leaving snippet region (#25762)
- 816b56f878 lsp: cancel watchers when closing a client
- 9b8a075539 lsp: change `silent` in lsp.start.Opts to optional (#28524)
- d3e0352574 lsp: check if inlay hints are enabled for a buffer before disabling (#24074)
- fa9a85ae46 lsp: clean up duplicate and unused meta type annotations
- 8bd6f7c20b lsp: clear codelens on LspDetach (#24903)
- 97c0a52416 lsp: correct deprecation message #28403
- aa62898ae3 lsp: correct the error message's cmd on spawning (#27632)
- 77a9f3395b lsp: create codelens request parameters for each buffer (#27699)
- 9281edb334 lsp: create per client params in lsp.buf.code_action
- 39cc38a87b lsp: defer writing error msgs (#27688)
- 1b679ac192 lsp: define LspInlayHint highlight group #24073
- dc8c086c7e lsp: directly rename the existing buffers when renaming (#27690)
- c1a95d9653 lsp: disable didChangeWatchedFiles on Linux
- 2fde6295df lsp: display initialization errors (#25409)
- 94127cb5df lsp: do not add extra indentation
- cc87dda31a lsp: do not assume client capability exists in watchfiles check (#24550)
- 0fe0cf5ada lsp: do not cancel snippet when selecting placeholder (#25835)
- 073035a030 lsp: don't register didChangeWatchedFiles when capability not set (#23689)
- 5eee633c97 lsp: don't start additional client if attach failed (#28744)
- 21fa19f3e8 lsp: don't use hl_mode = combine for inlay hints #24276
- 96b94f8d77 lsp: duplicate on_detach, on_reload callbacks #24067
- b95b6ed975 lsp: empty commands should not be considered executable (#28216)
- c3c673cdec lsp: enable() does not activate inlay hints on open buffers #28629
- b2c26a875b lsp: ensure buffer is not attached more than once
- fa0a25dcb3 lsp: error in reset_timer on second detach #24117
- 72e64a1afe lsp: extra "." when completing with tsserver #24646
- 031088fc0a lsp: filetype matching to documentSelector in dynamic capabilities (#25425)
- d191bdf9d5 lsp: fix attempt to call non existent function (#24212)
- dd3fa64573 lsp: fix dynamic registration of code actions (#23826)
- ce4ea638c7 lsp: fix incorrect typing and doc for `vim.lsp.rpc`
- f487e5af01 lsp: fix infinite loop on vim.lsp.tagfunc
- 74bd4aba57 lsp: fix multi client handling workspace_folder methods (#18839)
- 5e5f5174e3 lsp: fix off-by-one error for omnifunc word boundary
- ba6761eafe lsp: fix omnicomplete in middle of the line (#25787)
- 075a72d5ff lsp: fix relative patterns for `workspace/didChangeWatchedFiles` (#23548)
- 840e1864c2 lsp: handle NUL bytes in popup text (#25612)
- 345bd91db2 lsp: handle absence of a trailing newline #25194
- 0e9a33572d lsp: handle adjacent snippet tabstops
- 853f647da6 lsp: handle reverse lookup in capabilities
- 91f67fabe6 lsp: handle stale bufnr on LspRequest autocmd trigger (#24013)
- 849d82b80b lsp: handle stale bufnr on LspRequest autocmd trigger (#27981)
- 2eecb1b85d lsp: highlight active parameter in signature help #25663
- e55e80d51c lsp: inlay hints: "Failed to delete autocmd" when closing buffer #24469
- 7968322e7a lsp: inlay_hint nil reference error #24202
- ba8f19ebb6 lsp: lint warnings, default offset_encoding #24046
- 3304449946 lsp: log unknown diagnostic tags instead of showing a warning (#25705)
- 251ca45ac9 lsp: markdown code fence should allow space before info string #24364
- add7e106d5 lsp: noisy warning about offset_encodings #24441
- c235959fd9 lsp: only disable inlay hints / diagnostics if no other clients are connected (#24535)
- 1dacf2ecee lsp: prevent code-lens refresh from becoming a permanent no-op (#28228)
- 597ecf7516 lsp: re-add client.commands and mark private
- 94a904b453 lsp: reapplying already-applied hints #24114
- 4ecc71f6fc lsp: reduce diagnostics and add more types (#23948)
- bc7f86209d lsp: redundant vim.snippet.jumpable #28560
- ee156ca60e lsp: refactor escaping snippet text (#25611)
- 2ecba65b4b lsp: remove unknown LSP protocol property (#24345)
- 7311958e12 lsp: remove unnecessary file load/write when renaming (#27621)
- e14e750998 lsp: rename LspProgress data.result => data.params #28632
- f0e61e6d92 lsp: rename fails on missing parent directory #27291
- b413f5d048 lsp: rename undofile when renaming (#27684)
- d09957e0a0 lsp: rename: load and list new buffer if attached to window (#27408)
- 7668f89d5b lsp: replace @private with @nodoc for public client functions (#24415)
- 52823616bc lsp: replace bug-prone ternary operation #28627
- 5282d3299c lsp: restore marks after apply_text_edits() #14630
- cf5f1492d7 lsp: revert change to buf.clear_references() #24238
- 917172dd96 lsp: semantic token defer loading
- 3be2536ca0 lsp: send back diagnostic tags to the server
- a37d568082 lsp: send empty "added" list when removing workspace folder #24440
- 3c6d971e54 lsp: set extra info only when it has a value (#23868)
- 5785c32f11 lsp: set fallback client name properly
- 370232dbef lsp: track snippet deletion
- ca26ec3438 lsp: use only utf-16 in default client positionEncodings (#23903)
- b302da9ad2 lsp: use percentage format on lsp.status (#23971)
- 2c8f36a3b0 lsp: use plain loop for non-list-like table of protocol values
- 8addd27504 lsp: when renaming directory, check path prefix of buffer names (#27603)
- 597355deae lsp: wrong iterator in registerCapability handler (#24971)
- b2d471ab33 lua: allow nil values in serialized Lua arrays (#26329)
- 68f12e7fcb lua: annotate that TSNode functions can return nil (#24621)
- 4ffc20c951 lua: avoid internal error when :luado deletes lines (#27262)
- 3198038224 lua: correct return value for on_key with no arguments (#25911)
- 84bbe4b0ca lua: disallow vim.wait() in fast contexts
- 22eb2ba183 lua: do not schedule events if Nvim is exiting
- 7d279a09e0 lua: handle array with holes in luaeval() (#26630)
- c43c745a14 lua: improve annotations for stricter luals diagnostics (#24609)
- 2f779b94e7 lua: inspect_pos respect bufnr when get syntax info (#23098)
- e2e63bd045 lua: make highlight.on_yank use win-local highlight (#27349)
- b40170f7a3 lua: memory leak when using invalid syntax with exists() (#26530)
- 4ab9c5fa46 lua: not using global value in vim.opt_global (#25196)
- 20ec4c776a lua: only disable vim.schedule() when closing main loop (#26090)
- f150b62423 lua: only free luarefs when returning from API (#28373)
- 0190771713 lua: remove uri fragment from file paths (#27647)
- 5aa14e1231 lua: return after assert returns assert message (#27064)
- 5331d5772f lua: show error message when failing to set variable (#25321)
- 1294e221a2 lua: vim.fn.has('nvim-0.10') in fast context, used by vim.deprecate
- 37c58226a8 lua: vim.fs typing (#24608)
- 5db076c7cc lua: vim.region on linewise selection #25467
- 622b1ae38a lua: vim.split may trim inner empty items
- a7df0415ab lua2dox: filter out the entire `---@alias` block
- 32e69bd397 luarc.json: ignore test directory to save memory
- 6f936c9d85 man: make :Man with a range work (#25922)
- 59aadf33ef man: pass modifiers also to :tag (#27878)
- a9b4dc9614 man: set the nested flag for the BufReadCmd autocommand (#26285)
- c8d1d8b254 man.lua: don't continue on command error (#23009)
- a4c4b39d55 man.lua: hardwrapped manpage is not resized #25646
- 209ed16f57 man.lua: return support of all sections
- 3a7c30dc93 man.vim: q quits after jump to different tag in MANPAGER modified (#28495)
- 3c667d3e0f mappings: fix mapset() not replacing map with backslash (#26719)
- 0451391ec5 mark: properly init mark views (#22996)
- d432bba4e4 marks: handle switching buffer properly (#25763)
- 62306a29ad marktree: correct qsort usage
- 585549625d marktree: off-by-one error in `marktree_move`
- 34be915f6b marktree: preserve ordering in `marktree_move`
- b97d5038f1 marktree: some marks counted twice when checking for overlap
- ad5a155b1f mbyte: fix bugs in utf_cp_*_off() functions
- b028233991 memline: more curbuf stuff
- 91ef26dece messages: :map output with ext_messages (#26126)
- eabf9de1dc messages: allow more prompt in headless mode with UI (#27905)
- 60fb8a6a8b messages: avoid crash with :intro and ch=0 (#28343)
- 61a0aa6c51 messages: avoid passing negative length to strnlen() (#28753)
- ca258db156 messages: clear new lines when increasing 'cmdheight' (#27421)
- c9f47fca8b messages: ensure msg_grid is at top at more prompt (#23584)
- 2f17ef1fc4 messages: use "Vimscript" instead of "VimL" #24111
- 55dbf5c379 messages: validate msg_grid before using msg_grid_pos (#26189)
- 4db77017fb meta: add nil return types to lpeg functions
- 5198a2555d meta: cleanup lpeg operators
- dae6770b76 meta: include vim.json
- d31f7648ec mkspell: prevent Unicode character overflow (#23760)
- a8a93e517f mouse: avoid dragging after click label popupmenu callback (#26187)
- 6a2a37b1e1 mouse: avoid dragging when clicking next to popupmenu (#26201)
- 091eb4c8c7 mouse: click after eol with conceal and virtual text (#27897)
- 2b475cb5cc mouse: click on 'statuscolumn' with 'rightleft' (#25090)
- e25cf47ad3 mouse: click on empty line with 'foldcolumn'
- 84a4319545 mouse: cmdline click registered as statuscolumn (#23163)
- bf52fb7193 mouse: copy the line before syntax matching (#24320)
- 5fb4c397a1 mouse: drag vsep of window with 'statuscolumn' (#24462)
- dc394b9641 mouse: fix popup menu position check with winbar (#23456)
- 7c1921e9d6 mouse: fix popup_setpos position check with ext_multigrid (#23436)
- a3fba5cafc mouse: handle folded lines with virt_lines attached to line above (#23912)
- 64aa0f7d0b move: check for filler lines properly (#28307)
- 366d0c7887 move: check the correct buffer (#25698)
- 780509aedf move: fix using the wrong window (#28312)
- 60d1e3e471 msgpack: store grid line event as a value
- c52dfb6e84 normal: don't check conceal when pressing 'r' (#27892)
- 088cdf69e3 normal: make "g$" work properly with resized grid
- a1ded1b113 oldtest: always use a 64-bit int for swapfile block number
- 92c59c39c3 ops.c: remove duplicate u_save_cursor()
- 9d01385c6c options: `'modified'` showing incorrect value for scratch buffers
- c3e176f6e2 options: correct condition for calling did_set_option() (#25026)
- 9af03bcd47 options: do not change inccommand during preview (#25462)
- 796df966f3 options: don't update curswant for 'winhl' or 'winbl' (#27515)
- d956bc6379 options: setting 'scroll' with resized grid (#26628)
- c8a27bae3f options: use a union for def_val (#27169)
- 804c828e68 optionstr.c: incorrect use of curbuf/curwin
- a9df0c5ce6 osc52: do not use 'vim.iter' (#27218)
- 5d75d9aef2 osc52: enable OSC 52 by default in tmux sessions (#26072)
- 86c2213b5e osc52: use `p` for primary selection instead of `s` (#26076)
- 1045659097 osc52: use nvim_chan_send() to stderr for copying (#26690)
- e3bd04f2af pager: handle consecutive newlines properly (#27913)
- 1e7e9ee91f path: accept special characters on Windows (#25424)
- f064e72b9b path: check return value of append_path() (#28309)
- f5eabaa940 path: restore space separation in 'path' (#25571)
- 908f247c22 plines: count 'showbreak' for virtual text at eol
- a0cbf1d8d5 plines: cursor position with 'showbreak' and resized grid (#28067)
- 317038e7cb plines: don't return very large height on very long line (#24260)
- 7955c90621 plines: folded lines with virt_lines attached to line above
- 35c3275b48 plines: handle inline virtual text after last char (#24241)
- cbadb39d16 plines.c: initialize cts_max_head_vcol (#24855)
- fc14928719 printf: make positional %zd and %zu work (#24722)
- d0b3c87219 process: avoid potential data race on exit (#27769)
- 3e569d440b process: close handles and timer in pty_process_close() (#27760)
- 268066e014 process: start pty process eof timer on main thread (#27625)
- 49983387ff prompt: emit change event for prompt newline (#28260)
- 7bd6bd1ef7 provider: cannot detect python3.12 #25316
- 61ecb3e16c provider/pythonx: import the correct module (#25342)
- 540941ef83 pum: don't position too far with resized parent grid (#23442)
- f186224dfc pum: fix missing rightmost column with 'rightleft' (#23445)
- 8bc973c6f5 pum: fix missing scrollbar with 'rightleft' (#23448)
- a7550a20e0 pum: handle right-click menu repositioning with multigrid (#26975)
- fbaa278773 pum: make :popup position correctly with float border
- a3dfe1bc89 pum: position properly with ext_multigrid (#23336)
- c1331a65dd pum: show right-click menu above cmdline area (#23298)
- dd0e77d48a query_error: multiline bug
- 5ac2e47acc redo: make redo of Lua mappings in op-pending mode work (#23566)
- 60f69014a8 redraw: multibyte characters are wrapped at the end of a line (#23696)
- cb34d0ddd0 redraw: overwrite double-width char with virt_text properly (#23708)
- d184933cdc redraw: update Visual selection properly with splits (#27343)
- 54044e6dce release.sh: ze version is too big
- cce9460524 remote: make --remote-expr print to stdout (#23980)
- bde59e8147 remote: restore previous --remote-expr output formatting (#23988)
- 468292dcb7 rpc: "grid_line" event parsing crashes (#25581)
- 4d4092ac9e rpc: assertion failure due to invalid msgpack input
- 8921d56053 rpc: do not crash when no input is consumed
- c422722b2e rpc: fix hang with channel closed while waiting for response
- adb2258345 rplugin: dont create data dir if it's a broken symlink #25726
- 65dd3c1180 ruler: show ruler of curwin with no statusline in cmdline
- f5231d61a5 runtime: add commentstring for C# ftplugin (#23039)
- 3387dc4a46 runtime: add commentstring for D ftplugin (#25362)
- 615b48aca6 runtime: add more Nvim-only highlight groups to Vim syntax
- aee6f08ce1 runtime: do not allow breakcheck inside runtime path calculation
- df297e3c2b runtime: don't set gx mapping if already mapped (#24262)
- 9176b5e10a runtime: respect 'fileignorecase' when sourcing (#24344)
- dbb840da01 runtime: respect 'rtp' order for all runtime files (#24335)
- 70a0049296 runtime: source c ftplugins in correct order (#27377)
- d431a4d410 runtime: source old color scheme in bundled color schemes (#26641)
- 3ab6f60dc8 runtime: update 'vim' color scheme to use new tree-sitter groups
- 67fba9affa runtime/tutor: don't try to close fold when there is none (#24953)
- ee56daebb6 shada: update deleted marks (#24936)
- 517dfdf0fc shada: update marks when using delmarks! (#24978)
- 4d52b0cf67 showcmd: clear the rest properly (#28420)
- fcd9905291 sign: avoid deleting from sign map while looping over it (#27158)
- a84b454ebe sign: do not error when defining sign without attributes (#26106)
- a5ade3c63d snippet: correct indent with newline
- 4625394a76 snippet: do not add extra indent on newlines (#28538)
- a1bdf2852d snippet: remove misleading comment about TM_FILENAME_BASE (#26465)
- 8c044f0862 spell: always accept ':' as filename char in 'spellfile' (#27172)
- a803bff89c spell: extmark with spell=false should disable spell (#23400)
- eceb2dffce spell: splice extmarks on :spellrepall (#23929)
- aa65bd478a startup: "nvim -l foo.lua" may not set arg0 #24161
- 628f6cce80 startup: don't truncate when printing with -l (#24216)
- c0fa721ade startup: make recovery mode work without --headless (#24477)
- 8e739af064 startup: multiprocess startuptime #26790
- 8f10362cdc startup: only send one default_colors_set event during startup
- 559c4cfd52 startup: run embedded Nvim with real path (#24282)
- b21d960119 startup: set full_screen when in ex_mode
- 9637b7dae4 startup: stop TUI properly when quitting at swap dialog (#25337)
- d7359a8742 startup: trigger UIEnter for the correct channel (#25860)
- 01e273c340 statuscolumn: don't update clicks if current width is 0 (#24459)
- afd0c648a8 statuscolumn: force full redraw when signcolumn is invalid (#24859)
- dc6c11394b statuscolumn: update number hl for each screen line (#25277)
- a4b2400804 statusline: also allow right click when 'mousemodel' is "popup*" (#23258)
- 4ecf6fdfd8 statusline: bail out properly on negative row (#23535)
- 70da793c5e statusline: corrupted screen with minwid sign item in 'statuscolumn' (#23823)
- d7bb19e013 statusline: fill for double-width char after moving items (#24207)
- 54f5602038 statusline: fix uninitialized variable and possible overflow
- 9f15a18fa5 statusline: missing offset when showing 'keymap' (#27270)
- 7b973c71ea statusline: redraw when VIsual_mode changes (#23933)
- dbc0fa9bd6 stdpath: remove duplicate directories (#26653)
- 1907abb4c2 stream: do not close handle if it is already closing (#26537)
- 9dd48f7832 substitute: properly check if preview is needed (#23809)
- 9753cda591 syntax: use correct diagnostic group for checkhealth (#23538)
- 400b7842a9 termcap: escape escapes in passthrough sequence (#26301)
- e527842211 termcap: only call callback for requested capabilities (#26546)
- ffeb31c2f9 termcap: set 'nested' on TermResponse autocommand
- b7831c7f99 termcap: use tmux passthrough sequence when running in tmux (#26281)
- e6d3f87dfd termdebug: handle partial lines passed to callback (#22950)
- c413b42c45 termdebug: prompt mode breaks with &splitbelow set
- 8aad4b8425 termdebug: send SIGINT when interrupting prompt mode
- af78060b18 termdebug: trim suffixed "\r" in CommOutput
- 684e93054b terminal: assign channel to terminal earlier (#25771)
- 82b1a389ba terminal: avoid Insert mode in Terminal buffer (#25820)
- 99288ecc77 terminal: block input when there is pending TermRequest (#27589)
- f2ce31d3dc terminal: call validate_cursor() before screen update (#24425)
- e09adfdcff terminal: check if mouse on statusline/tabline/winbar/vsep (#26892)
- e115732465 terminal: check terminal size at end of screen update (#25480)
- 120c4ec855 terminal: disable reflow again
- c881092ffe terminal: don't lose focus on <MouseMove> (#25845)
- 16a416cb3c terminal: don't pass incomplete UTF-8 sequence to libvterm (#27922)
- d0d132fbd0 terminal: don't send unknown special keys to terminal (#24378)
- 74776dfb2a terminal: fix duplicate recording with mouse click (#28103)
- 21d466c1b9 terminal: forward horizontal mouse scrolling (#24552)
- d401b33314 terminal: handle horizontal scrolling in another window (#24828)
- 5e78fd7784 terminal: ignore $VIM and $VIMRUNTIME in pty jobs
- 0a7fda6fa0 terminal: include modifiers when forwarding mouse (#24549)
- d4c2fc6ff6 terminal: keep focus when scrolling number column of another window (#25848)
- 5ca6c9e046 terminal: make backslashes in 'shell' work on Windows
- aba954b662 terminal: never propagate $COLORTERM from outer env (#26440)
- b74262a336 terminal: send Shift-Home Shift-End Ctrl-Home Ctrl-End (#24418)
- 0fd8eb8aae terminal: set $COLORTERM unconditionally in :terminal (#24763)
- fa17a5ab49 terminal: use terminal buffer for TermRequest autocommand (#26974)
- 5999214c24 termkey: accept BEL (0x07) as OSC terminator
- ce2f770aaa termkey: do not sign extend mode value
- 50f5864dd2 termkey: include IO header on Windows
- 52e6059415 test: call separate_arguments() correctly to honor $BUSTED_ARGS (#26905)
- c5528e7fd8 test: clean up inline virtual text tests a little
- 380b634ac9 test: fix "indeterminism" warnings in UI tests
- f4c97da262 test: fix strings_spec.lua for AArch64
- 477458f7bf test: more tests for marktree
- d8e330bcec test: remove test/compat.lua
- a7bbda121d test: typing
- 8861ad83fd test/tui_spec: pass the expected NULL-sentinel to execl()
- f859d16aea tests: set SHELL=sh #24941
- 3d44340cea tests: use more global highlight definitions
- e9bfbe99cd textformat: remove unnecessary changed_bytes() (#26027)
- 255e547e18 timer: allow timer_info() to get info about current timer
- a8131aee9e tohtml: replace hex escape with digit escape (#27728)
- 0246f1a897 tohtml: set filetype of generated HTML to `html`
- ccc0980f86 treesitter: Use the correct replacement args for #gsub! directive (#23015)
- 71d9b7d15c treesitter: _trees may not be list-like
- a4743487b7 treesitter: `language.add` - only register parser if it exists
- 4a8bf24ac6 treesitter: adjust indentation in inspector highlights (#26302)
- ef64e225f6 treesitter: allow foldexpr without highlights (#23672)
- 6a264e0897 treesitter: allow optional directive captures (#28664)
- cf612c64b0 treesitter: allow passing lang to vim.treesitter.get_node() now correctly takes opts.lang (#26360)
- 32849d5667 treesitter: avoid # of nil in _query_linter
- 3fd7449d5a treesitter: check that buf is loaded in autocommands (#25679)
- e7f50f43c8 treesitter: clip end row early
- 6b19170d44 treesitter: correctly calculate bytes for text sources (#23655)
- bd5008de07 treesitter: correctly handle query quantifiers (#24738)
- fba18a3b62 treesitter: do not calc folds on unloaded buffers
- c30ebb17f6 treesitter: document more standard highlight groups
- 040369e1e4 treesitter: don't forcefully open folds
- 72ed99319d treesitter: don't invalidate parser when discovering injections
- 4607807f9f treesitter: don't update fold if tree is unchanged
- 26b5405d18 treesitter: enforce lowercase language names (#28546)
- 3a8265266e treesitter: escape "\" in :InspectTree #28613
- 369f58797d treesitter: escape quotes in :InspectTree view #24582
- 6e45567b49 treesitter: fix TSNode:tree() double free (#24796)
- 50a03c0e99 treesitter: fix another TSNode:tree() double free
- 7c6f9690f7 treesitter: fix indexing in foldexpr
- 01b91deec7 treesitter: fix parens stacking in inspector display (#26304)
- f40a109716 treesitter: fix trim predicate
- 1f551e068f treesitter: fixup for InspectTree
- 26cc946226 treesitter: foldexpr tweaks
- e85e7fc7bc treesitter: handle empty region when logging (#24173)
- 12faaf40f4 treesitter: highlight injections properly
- 6f75facb9d treesitter: improve vim.treesitter.foldexpr
- 6c8387067d treesitter: inspect-tree remember opts on buf change
- 8179d68dc1 treesitter: logger memory leak
- b6e339eb90 treesitter: make InspectTree correctly handle nested injections (#26085)
- 3af59a415c treesitter: make Visual hl work consistently with foldtext (#25484)
- c7e7f1d4b4 treesitter: make foldexpr work without highlighting (#24167)
- 0211f889b9 treesitter: make sure injections don't return empty ranges (#24595)
- 0df681a91d treesitter: make tests for memoize more robust
- 7fa292c52d treesitter: outdated highlight due to tree with outdated region
- 617d1b28d6 treesitter: prefix treesitter types with vim
- 90a12d4a16 treesitter: prepare highlight states for [s, ]s
- 7e5ce42977 treesitter: properly combine injection.combined regions
- 19a793545f treesitter: redraw added/removed injections properly (#23287)
- 7a76fb8547 treesitter: remove more double recursion
- e124672ce9 treesitter: reset cursor max_start_depth
- 7d97150084 treesitter: return correct match table in iter_captures()
- 3b29b39e6d treesitter: revert to using iter_captures in highlighter
- 315c711700 treesitter: set cursor position when opening inspector
- 48085e40bb treesitter: stop() should treat 0 as current buffer #24450
- 32dc484ec9 treesitter: support subfiletypes in get_lang (#23605)
- b6fdde5224 treesitter: text alignment in checkhealth vim.treesitter
- 0f85aeb478 treesitter: treecursor regression
- 26143d7a5c treesitter: update @markup default links
- 9ff59517cb treesitter: update c queries
- c44d819ae1 treesitter: update folds in all relevant windows (#24230)
- ffb340bf63 treesitter: update folds only once on InsertLeave
- edf9a897f0 treesitter: update highlights for query (#23699)
- b697c0cd4f treesitter: update lua parser and queries (#24148)
- ad95b36985 treesitter: update markdown parser and queries (#24429)
- 39a0e6bf3c treesitter: update parsers and queries
- 3d4eb9d544 treesitter: update queries
- c97de026e3 treesitter: update vimdoc and vimscript queries
- dc7ccd6bca treesitter: use 0 as initial value for computing maximum (#27837)
- 7bc5ee7f93 treesitter: use proper query syntax for inspector (#26274)
- 00e6651880 treesitter: use tree range instead of tree root node range
- 8c9dab3e0d treesitter: use vim.highlight.priorities instead of hardcoded 100 (#24052)
- 674f2513d4 treesitter: validate language alias for injections
- 2bf3e82676 treesitter: validate window before updating preview highlights
- ab2811746e treesitter playground: fix the wrong range of a node displayed i… (#23209)
- f85aa2e67f treesitter.c: improve comments on fenv usage
- c5b9fb2f25 treesitter.foldexpr: check for all insert submodes
- b3bda2f043 tui: `space_buf` overflow when clearing screen (#27352)
- cb2b5e2780 tui: disable DECRQM and DECRQSS queries for Terminal.app (#28453)
- 405bad5e08 tui: do not toggle cursor visibility when flushing the buffer (#26055)
- b76cc974b9 tui: don't forget to update cursor visibility (#26523)
- 911f3d9623 tui: don't overwrite an assertion faliure message on exit
- 168e69ae01 tui: don't set cursor color when there is none (#28236)
- 5a08b5be3c tui: don't set tty background if &bg was set before VimEnter (#23701)
- 00b7428b3b tui: don't use DECRQSS in screen or tmux (#28086)
- 846714ca3e tui: don't use tui->params[] for 'termsync' (#26565)
- 197827321a tui: grid_clear properly clears the screen
- 884a83049b tui: grow termkey's internal buffer for large escape sequences (#26309)
- ad867fee26 tui: handle cursor visibility properly (#26091)
- fd50185492 tui: initialize clear attrs with current terminal background
- c26b39a9aa tui: make :cquit work properly with remote TUI (#25313)
- 3ae62c4706 tui: make disabling title restore old title from stack (#23585)
- 4c31a1b807 tui: make setcellwidths() work for non-ambiwidth chars (#28322)
- 4f235e3caf tui: position cursor at bottom-left before stopping (#23369)
- 0f1b511f23 tui: redraw on SIGWINCH even if size didn't change
- 8e69716953 tui: restore title before exiting alternate screen (#23776)
- 999e167a52 tui: start flush earlier (#26463)
- 367e52cc79 tui: use buflen to calculate remaining buffer size (#26942)
- 3198598e69 tui: use uv_timer_t instead of TimeWatcher for input (#26435)
- 0ce065a332 tui: v:argv does not report the original argv[0] #24015
- bc6fc0123d tutor: Tutor steps don't work on Windows #25251
- bf5703042b tutor: don't use concealed text in expected lines #24316
- e34c23b701 tutor: set a value for ":syntax iskeyword" (#27833)
- 04232a19cc type: remove incorrect arguments from vim.rpc*
- 21152f7905 types: add more annotations to eval.lua
- b7d5b55f74 types: add some return/parameter type annotations (#24867)
- e6947bb1e8 types: make filetype.add parameters optional
- 191cca2566 types: move type annotation for `IterMod`
- 813dd36b72 types: rename win_get_config return type to win_config
- b3342171d5 typing: vim.fn.execute
- 1355861b92 typval: don't treat v:null as truthy (#23281)
- 0592fd5e17 ui: "resize -1" with cmdheight=0 #24758
- ab1c2220f0 ui: activating all ext capabilities without remote UI #28555
- 5b111a8f00 ui: adjust 'smoothscroll' for inner dimensions
- 389f5ca39d ui: adjust the cursor when inserting virtual text
- 046c9a83f7 ui: always use stl/stlnc fillchars when drawing statusline (#25267)
- 0c86828ac5 ui: avoid ambiguity about chunk that clears part of line (#24982)
- e778e01161 ui: avoid recursiveness and invalid memory access #28578
- 0ce3910868 ui: cursor pos with left gravity inline virt_text at eol (#24329)
- 91a4938edf ui: data corruption in remote_ui_raw_line
- 1de82e16c1 ui: delay win_viewport until screen update #24182
- a916523574 ui: doesn't trigger au event when enter is false
- b5a38530ba ui: don't force 'cmdheight' to zero with ext_messages
- fdc8e966a9 ui: don't send empty grid_line with redrawdebug=compositor (#23899)
- 13f55750e9 ui: empty line before the next message after :silent command
- d41b8d4758 ui: ext_cmdline should not move cursor to curwin
- a38d7f9984 ui: fix cursor position with multiple inline virtual text
- e0707d3529 ui: fix edge case around flushing
- 75f350aac6 ui: fix incorrect highlighting when virtual text next to match
- 332b70d2ed ui: fix incorrect highlighting when virtual text wraps with number
- 0c7fa3bdcc ui: fix multi-byte characters highlight in virtual text
- a37c990483 ui: fix overflowing nowrap virtual text not displaying if tab follows
- 5d7afb2e9f ui: fix tabs not being spaced properly after virtual text with no wrap
- 34d862942c ui: fix virtual text not displaying when two overlapping inlines (nowrap)
- c5bf838f8a ui: fix visual and search highlighting interfering with virtual text
- 1936285d98 ui: fixes incorrect rendering when virtual text is not visable and nowrap
- 64e8a3c4d1 ui: handle virtual text with multiple hl in more cases (#25304)
- 981acc2922 ui: propagate line wrapping state on grid_line events
- b8c1b36061 ui: set 'cmdheight' to zero for all open tabpages
- a8522f02e9 ui: startup intro message should be visible with ext_multigrid
- 1cd7824dd6 ui: trigger TabNewEntered after split new tab
- 7626f431d8 ui: update ext_ui widgets when attaching non-remote UI
- 128091a256 ui: wrong cursor position with left gravity inline virt text at eol
- a9418ef8cf ui: wrong display with 0-width inline virt_text at eol (#24854)
- e8b3ed74bc ui-ext: "scroll_delta" handle topfill and skipcol (#24249)
- 43d66c0ebb ui-ext: send title to newly-attached UI
- 519b9929e9 ui.open: some URLs fail on Windows
- 4d654472e6 ui_client: check return code of dup()
- 633bf61d3b ui_client: check return value of channel_job_start (#27729)
- 71ad771ea4 ui_compositor: only reset skipstart at first column (#24776)
- 840749d6c9 undo: fix crash caused by checking undolevels in wrong buffer
- c0a29931e2 unhide: close floating windows first (#25318)
- 9afbfb4d64 unittests: ignore __s128 and __u128 types in ffi
- 9e79f7433e usercmd: Fix buffer overflow in uc_list() (#23225)
- 9802de9334 userfunc: fix possible out of bound access
- 5a8fe0769c vim.deprecate: show deprecation warning in devel versions as well
- ca6dbf3558 vim.iter: use correct cmp function when truncating tail in `take` (#27998)
- e15991c811 vim.json: properly treat luanil options as booleans (#28622)
- fec5e3ab24 vim.region: handle multibyte inclusive selection properly (#26129)
- 2afb04758c vim.system: close check handle (#24270)
- 9b7cf4f0be vim.system: don't process non-fast events during wait() (#27300)
- a44521f46e vim.system: let on_exit handle cleanup after kill
- 6d5f12efd2 vim.system: make timeout work properly
- 57adf8c6e0 vim.ui: open() may wait indefinitely #28325
- e644e7ce0b vim.ui.open: return (don't show) error message
- fd085d9082 vim.ui.open: try wslview before explorer.exe #28424
- 5e4a5f1aaa vim.ui.open: use explorer.exe instead of wslview #26947
- 6cc76011ca watchfiles: skip Created events when poll starts (#23139)
- 9bd4a28079 window: :close crash if WinClosed from float closes window (#27794)
- 731e7f51ee window: :close crash with autocmd, floats and tabpage (#27793)
- 33dfb5a383 window: :close may cause Nvim to quit with autocmd and float
- 2cbfa4b9af window: don't go to unfocusable float when closing (#28455)
- a47be0b2d9 window: prevent win_size_restore from changing cmdheight
- 4bfc7802f0 windows: set stdout to binary mode for --api-info
PERFORMANCE
--------------------------------------------------------------------------------
- a9c551e5e3 cache breakindent/showbreak width in win_lbr_chartabsize
- b5653984e5 don't decode utf8 character multiple times in getvcol()
- cca8a78ea2 improve utf_char2cells() performance (#27353)
- 2f2f12122f remove loop for computing last position in getvcol()
- 32a4c9f4f9 remove redundant strlen in skipwhite (#26177)
- cdf848a314 reuse fast character size calculation algorithm from getvcol()
- 2289ca273c column: avoid counting when max signs are removed from a range
- 4a34da82c1 column: keep track of number of lines that hold up the 'signcolumn'
- f4001d27ef column: only invalidate lines affected by added sign
- 7f084770c2 diagnostic: avoid table copies to filter by severity (#28491)
- 1cb6040554 events: store autocommands in flat vectors (#23256)
- 9af2be292d extmarks: add metadata for efficient filtering of special decorations
- 929e1b7f1c extmarks: avoid unnecessary invalidations for virt_text (#27435)
- 19fb573ad9 extmarks: avoid unnecessary marktree traversal with folds (#24306)
- d44ed3a885 extmarks: better track whether namespace has extmarks (#28615)
- ef94fb69c6 extmarks: don't handle inline virt_text if there is none (#24322)
- 8bb67d64e2 fs: normalize path only once in fs.dir
- 40db569014 iter: make ListIter.totable more efficient (#23714)
- ef1801cc7c iter: reduce number of table allocations
- dcdefd0428 loader: use a quicker version of vim.fs.normalize
- 648f777931 lsp: load buffer contents once when processing semantic tokens responses (#23484)
- 2f4792943a lsp: only joinpath for dirs in watchdirs
- edf05b005f lsp: process semantic tokens response in a coroutine that yields every 5ms (#23375)
- 79a5b89d66 lsp: reduce polling handles for workspace/didChangeWatchedFiles (#23500)
- 4d3a04279d lsp: remove grouping logic from lsp.status (#24096)
- de28a0f84c lsp: replace file polling on linux with per dir watcher (#26108)
- 7e97c773e3 lsp: use async fs_stat for file watching on linux (#26123)
- cdd87222c8 lua: avoid spairs in vim.validate happy path
- c5af5c0b9a lua: faster vim.deprecate() #28470
- c5990f2cdc os/env: os_getenv() allocation when there is no env var set
- 18e62c1bdb redraw: only redraw Visual area when cursor has moved (#27340)
- 94085cfce8 redraw: reduce redraw with undo and extmarks or 'spell' (#27442)
- 516b173780 rtp: reduce rtp scans (#24191)
- 0e11bf0e1a substitute: don't reallocate new_start every time (#24997)
- 4fd852b8cb treesitter: cache fold query (#24222)
- 07080f67fe treesitter: do not scan past given line for predicate match
- c0cb1e8e94 treesitter: filter out trees outside the visible range early
- 2b6c9bbe7f treesitter: incremental foldupdate
- 3ba930844c treesitter: insert/remove items efficiently (#23443)
- a76b689b47 ui-ext: approximate scroll_delta when scrolling too much (#24234)
- 0d1bc795f8 ui_client: skip some initialization not necessary for ui client
- 14a5813c20 vim.fs.normalize: use iterator
BUILD
--------------------------------------------------------------------------------
- c1ff216668 actually export symbols on mac
- 664f2749e6 add "ci" configure preset to reduce verbosity
- 1094d0c0db add CMAKE_C_FLAGS to --version output
- 1290121722 add CMakePresets for deps build to reduce verbosity
- ce6075f82a add check to clint to prevent non-defs header includes
- 624de849de add function add_target
- 82bb7bbc48 add luajit runtime files when installing (#23514)
- 831d662ac6 add sub-targets to the doc target
- 1bf29a0ae1 add system lua include dir for lpeg
- 4cc69f45b4 add ubsan default options
- 4880385809 adjust clang-tidy warning exclusion logic
- b80a8e2c16 adjust how find order is prioritized
- d561830a52 align .clang-format rules with uncrustify config
- c18d7941ef allow sccache as compiler cache
- cd097ab8cc allow using system rocks
- 54d357dce0 bump lpeg to 1.1.0 (#25016)
- 7840760776 bump minimum cmake version to 3.13
- 7a5effb0f9 bump required minimum libvterm version to 0.3.3
- 2835b0daad bump uncrustify to version 0.77
- 77c0d5415b bump uncrustify to version 0.78.1
- 87a45ad9b9 bump uncrustify to version 0.79.0 (#28756)
- 1798a4b5e9 bump uncrustify version
- 826b95203a bundle uncrustify
- 37bc73e9bc change dependency URLs to cache variables
- 1086016477 cmake cleanup
- 404fdb0f36 cmake fixes
- f8310beeed create BINARY_LIB_DIR directory before adding parser
- 9909668111 create a text file for specifying dependency information
- 5a7280ba68 create helper function for simplifying luarocks installation
- f936a962d0 create separate targets for nvim with and without runtime files
- bcaff309b6 disable UnusedIncludes from clangd
- 7a80e169c5 disable all compiler warnings from dependencies
- 8fdc84d0aa disable conversion warnings for GCC
- 310fb2efc3 disable conversion warnings for older GCC versions
- a1c2da56ec do not use GIT_REPOSITORY for local dependencies
- da2130934b don't allow Xcode as generator
- 543e0256c1 don't define FUNC_ATTR_* as empty in headers (#26317)
- 24b60b0f71 don't format deleted files
- c2e47e7bec don't print installed files locally
- f30844008b download busted from own neovim/deps repository
- 5abba97d77 download dependencies with unreliable mirrors from deps repo
- 71384129f7 download libiconv and gettext from `deps` repository
- 801ac2accb drop diff.exe from windows builds
- f0eb3ca916 eliminate semicolons from --version string
- 397b92e02d enable ASAN for MSVC
- 40139738eb enable IWYU on mac
- 25cfe3fd43 enable formatting during rebase
- 517f0cc634 enable lintlua for scripts/ dir #26391
- 45fe4d11ad enable lintlua for src/ dir #26395
- 59d117ec99 enable lintlua for test/ dir
- c3836e40a2 enable lintlua for test/unit/ dir #26396
- 03c3f7887d enforce PREFER_LUA
- 7cb29a572b ensure `make clean` doesn't remove source files
- 0a3645a723 find system luv on ubuntu
- 5bb17958c5 fix "make iwyu" not working (#24873)
- 12ccea5967 fix --luamod-dev not working properly (#24519)
- 75b80516d5 fix link error for `_BitScanForward64` (#28173)
- 3f188bc533 fix parser installation location
- 4fb1739e6f fix uncrustify
- 896b400bff fix universal mac builds
- 01e4a70d66 improve git-cliff CHANGELOG output
- ef92b5a994 include all dependency directories when generating headers
- 187ae67735 introduce variable DEPS_IGNORE_SHA for skipping dependency hash check
- 30a0299bc6 make dependency URL variables non-cached (#23577)
- b4da4783f9 make genappimage.sh work with existing CMAKE_INSTALL_PREFIX
- 9f9cef1b56 make lpeg an imported library
- c1a05f6112 make the vimdoc generation depend on the nvim target (#25876)
- 8b8e607284 move luarocks and rocks installation to main build
- d1bb9bffd5 remove BUSTED_PRG dead code (#23340)
- 8206954a67 remove LOG_DEBUG option
- c48f94d1f3 remove LOG_LIST_ACTIONS option and related code
- 353a4be7e8 remove PVS
- 88366641ad remove USE_BUNDLED_BUSTED option
- ca243f06dd remove `lintdoc` from `lint` target
- 675522af18 remove clint checks and style text covered by uncrustify
- 8be24fed8f remove config-specific find_package search for libuv
- c40872acbd remove duplicate include directories in --version output
- ebb10d6248 remove functionaltest-lua target
- 8ae39eb584 remove git requirement
- 9f8f287c61 remove luarocks
- 339011f59c remove uninstall target
- c8fd82b26d reorder compiler option setting
- 78239f0bbc reorganize cmake files
- 55793bcfa1 revert accidental permission changes (#23319)
- f31f260f0c rework --version generation
- a827003e30 rework IWYU mapping files
- e5d7003b02 rework formatting to use add_glob_target
- 1997ef134a set char to always be signed
- a75ef40f4c set deps default build type to Release (#27495)
- a1550dbf0a silence new clang-tidy warnings
- 383018dbb8 simplify policy-setting for dependencies
- 4788abf2da stop installing parser.h from treesitter
- 26033eee1d suppress bugprone-reserved-identifier warnings
- 34509bbea3 sync IWYU and clint to ignore the same headers (#26228)
- 0a8e66898d update builtin terminfo (#27272)
- a388c852c4 update libtermkey commit
- 706f871014 update uncrustify to 0.76
- f4136c9d42 use -O3 optimization for release builds
- 2c1e8f7e96 use `GIT_REPOSITORY` for local URLs
- e0d97d264f use built nvim artifact to generate eval files (#25875)
- 3d3717de4e use libvterm commit with generated *.inc files
- 4f526b9fd8 use neovim/libtermkey instead of neovim/deps for libtermkey
- 8405649f92 use neovim/libvterm instead of neovim/deps for libvterm
- 2a57613b9b use stylua with add_glob_target
- ae3eed53d6 various build improvements
- c8667c8756 various cmake fixes
- 5cefec7349 various cmake fixes
- bec2ebebda various cmake fixes
- c50951a4d0 various fixes
- 4c91194611 various fixes
- bf0be0f63e various improvements
- 404043e74c vendor libtermkey
- e38a053692 IWYU: export generated headers
- 71141e8cf5 IWYU: fix headers for arabic.h
- 8b428ca8b7 IWYU: fix includes for func_attr.h
- f4aedbae4c IWYU: fix includes for undo_defs.h
- 17d81ac2ab IWYU: map everything in the C99 specification
- c2a5105e88 IWYU: remove arabic_defs.h (#26235)
- 38a20dd89f IWYU: replace most private mappings with pragmas (#26247)
- 09541d514d IWYU: replace public-to-public mappings with pragmas (#26237)
- 39771b2238 Makefile: add nvim to oldtest phony target
- 6823fdb20b PVS: exclude build directory
- 5d387c3388 ci: ensure correct headers are used on macOS
- dcb11c1091 clint: don't allow INIT() in non-header files (#27407)
- c98ef2d7c6 clint: fix deprecation and linter warnings
- 7e2387f41b clint: more precise check for "defs" headers (#26236)
- cf8b2c0e74 iwyu: add a few more _defs.h mappings (#25435)
- 5f03a1eaab lint: remove unnecessary clint.py rules
- eecddd2416 lint: use stylua without add_glob_target
- 25e51d393a lua: vendor coxpcall
- 4dc86477b6 luarc.json: disable luadoc-miss-see-name #24108
- fd9ac5aa8e makefile: remove a phony target uninstall (#24349)
- 978962f9a0 release.sh: regenerate docs after changing NVIM_API_PRERELEASE (#28229)
- 9ca81b0259 release.sh: set VIMRUNTIME when regenerating docs (#28765)
- 4399c4932d release.sh: use git cliff, drop old script
- d0ae529861 scripts: allow a git ref for lsp_types #24377
- bfb81e1a85 snap: remove obsolete snapcraft.yaml
- 981301d11f terminfo: include user capabilities in comments (#28066)
- 6801befcc5 uninstall: don't build if installation manifest not found
- 345dcba629 windows: set longPathAware in manifest #28389
Problem: Wiki contents are not discoverable and hard to maintain.
Solution: Move FAQ to runtime docs.
Co-authored-by: Christian Clason <c.clason@uni-graz.at>
For a summary of notable changes, see runtime/doc/news.txt or run `:help news` within nvim.
BREAKING CHANGES
- Remove hardcopy
- Make iconv a non-optional dep
- Remove has("debug") (#22060)
- Make libintl a required dependency
- Rename vim.pretty_print => vim.print
- Rename sanitizer options from CLANG_* to ENABLE_*
- Remove the .deb release (#22773)
- **column**: Ensure 'statuscolumn' works with virtual and wrapped lines
- **cscope**: Remove
- **defaults**: Change default 'commentstring' value to empty (#22862)
- **edit**: Remove old c implementation of hebrew keymap
- **editorconfig**: Change editorconfig_enable to editorconfig
- **exepath**: Prefers extensionless for powershell
- **health**: Remove deprecated health.lua
- **lsp**: Add rule-based sem token highlighting (#22022)
- **lua**: Execute Lua with "nvim -l"
- **messages**: Graduate the 'msgsep' feature
- **options**: Deprecate paste, remove pastetoggle (#22647)
- **rpc**: Preseve files when stdio channel is closed (#22137)
- **runtime**: Remove filetype.vim (#20428)
- **treesitter**: Remove g:ts_highlight_lua (#22257)
- **treesitter**: Remove silent option from language.add()
- **treesitter**: Consolidate query util functions
- **treesitter**: Remove deprecated show_tree func
- **treesitter**: Deprecate top level indexes to modules (#22761)
- **treesitter**: Rename help parser to vimdoc
FEATURES
- Added support for @generic to lua2dox.lua
- Added support for optional params to lua2dox
- Added support for specifying types for lua2dox
- Mention ":help news" in intro #20674
- ":write ++p" creates parent dirs #20835
- Add vim.secure.read()
- `vim.inspect_pos`, `vim.show_pos`, `:Inspect`
- $NVIM_APPNAME #22128
- Try to recover from missing tempdir #22573
- Add `vim.filetype.get_option()`
- Add `vim.treesitter.language.get_filetypes()` (#22643)
- Allow function passed to defaulttable to take an argument (#22839)
- **api**: Nvim_select_popupmenu_item support cmdline pum (#20652)
- **api**: Add command name to Lua command callback opts
- **api**: Show more exception info
- **api**: More fields in nvim_list_uis
- **api**: Add filetype option nvim_get_option_value
- **api**: Add nvim_get_hl (#22693)
- **api**: Nvim_exec2(), deprecate nvim_exec() #19032
- **api**: Evaluate 'statuscolumn' with nvim_eval_statusline()
- **api**: Set statuscolumn line number in nvim_eval_statusline()
- **aucmd_win**: Allow crazy things with hidden buffers (#21250)
- **checkhealth**: Improve treesitter report
- **checkhealth**: Check runtime ($VIMRUNTIME)
- **checkhealth**: Use "help" syntax, avoid tabpage #20879
- **clipboard**: Copy to system clipboard in tmux when supported (#20936)
- **clipboard**: Added wayclip support (#21091)
- **diagnostic**: Add `suffix` option to `open_float()` (#21130)
- **diagnostic**: Add `suffix` option to `virt_text` config (#21140)
- **diagnostic**: Don't open quickfix/loclist if no diagnostics #21397
- **diagnostic**: Vim.diagnostic.is_disabled() #21527
- **diagnostic**: Add support for tags
- **docs**: Nested lists in HTML, update :help parser
- **docs**: Format parameters as a list #20485
- **docs**: Update parser, HTML gen #20720
- **docs-html**: Try to use tags for ToC headings
- **editorconfig**: Add builtin EditorConfig support
- **editorconfig**: Add editorconfig syntax file
- **editorconfig**: Allow editorconfig to be toggled dynamically
- **exrc**: Use vim.secure.read() for 'exrc' option
- **exrc**: Support .nvim.lua (#21436)
- **extmarks**: Allow preventing spellchecking with spell = false
- **extmarks**: Extend nvim_buf_get_extmarks()
- **filetype**: Fall back to file extension when matching from hashbang (#22140)
- **float**: Open float relative to mouse #21531
- **fs**: Add opts argument to vim.fs.dir()
- **gen_help_html.lua**: Remove old AWK scripts
- **health**: Detect tmux RGB support via `client_termfeatures`
- **help**: Highlighted codeblocks
- **highlight**: Add DiagnosticOk (and associated) highlight groups (#21286)
- **highlight**: Define the concept of altfont as a (c)term rendering attribute
- **l10n**: Update Turkish translations (#20444)
- **l10n**: Update zh_CN translations (#21085)
- **lsp**: Add bufnr option to lsp.start (#20473)
- **lsp**: Support window/showDocument (#19977)
- **lsp**: Run handler in coroutine to support async response (#21026)
- **lsp**: Support set title in lsp relate floatwindow (#21110)
- **lsp**: Support willSave & willSaveWaitUntil capability (#21315)
- **lsp**: Initial support for semantic token highlighting
- **lsp**: Highlight semantic token modifiers (#21390)
- **lsp**: Add function to get semantic tokens at cursor
- **lsp**: Add function to clear codelens (#21504)
- **lsp**: Show active clients in :checkhealth vim.lsp (#21670)
- **lsp**: Add triggerKind option for vim.lsp.buf.code_action (#21905)
- **lsp**: Implement workspace/didChangeWatchedFiles (#21293)
- **lsp**: Implement workspace/didChangeWatchedFiles (#22405)
- **lsp**: Overwrite omnifunc/tagfunc set by ftplugin #22267
- **lsp**: Render markdown in docs hover #22766
- **lsp**: Create default link from @lsp.type.comment to Comment (#22888)
- **lua**: Send "--" literally to Lua "-l" script
- **lua**: Exit 1 on Lua "-l" script error
- **lua**: Execute stdin ("-") as Lua
- **lua**: Store "nvim -l" scriptname in _G.arg[0]
- **lua**: Low-level interpreter mode (nvim -ll)
- **lua**: Make sure require'bit' always works, even with PUC lua 5.1
- **lua**: Add semver api
- **lua**: Omnifunc for builting lua interpreter
- **lua**: Use vim.empty_dict() for empty return value in new api functions (#22737)
- **lua**: Allow `:=expr` as a shorter version of `:lua =expr`
- **lua**: Add `vim.loader`
- **lua-api**: Avoid unnecessary allocations (#19877)
- **man**: Add health check
- **man.lua**: Support spaces in manpage names
- **message**: Avoid spam on failed os_msg
- **packaging**: Add start menu and desktop shortcuts on Windows
- **provider**: Add support for Yarn node modules on Windows (#21246)
- **secure**: Add `:trust` command and vim.secure.trust() (#21107)
- **spell**: Support nospell in treesitter queries
- **spell**: Also source `spell/LANG.lua` when setting `spelllang` (#22111)
- **test**: Add Lua forms for API methods (#20152)
- **treesitter**: Add vim.treesitter.show_tree() (#21322)
- **treesitter**: Add 'lang' option to show_tree() (#21341)
- **treesitter**: Show filetype associated with parser (#17633)
- **treesitter**: Allow capture text to be transformed
- **treesitter**: Add metadata option for get_node_text
- **treesitter**: Respect metadata[id].range for offset!
- **treesitter**: Playground improvements
- **treesitter**: Add filetype -> lang API
- **treesitter**: Upstream foldexpr from nvim-treesitter
- **treesitter**: Expand the API
- **treesitter**: Add :InspectTree command (#22477)
- **treesitter**: Bundle query parser and queries (#22483)
- **treesitter**: Use upstream format for injection queries
- **tui**: Run TUI as external process
- **tui**: Graduate the +tui feature
- **tui**: Support altfont mode in tui.c
- **ui**: Add support to display a title in the border of a float (#20184)
- **ui**: Add 'statuscolumn' option
- **ui**: Restore has('gui_running')
- **ui**: Add scroll_delta to win_viewport event #19270
- **vim-patch**: Mention original author #20772
- **vim.diff**: Allow passing an integer for linematch
- **vim.fs**: Pass path to find() predicate, lazy evaluate #22378
- **vim.fs**: Improve normalize
- **vim.gsplit**: Gain features of vim.split
- **vim.version**: More coercion with strict=false
- **web**: Syntax highlighting via highlight.js
- **window/ui**: Add splitkeep option (#19243)
- **windows**: Show icon in terminal titlebar, taskbar #20607
PERFORMANCE
- **column**: Only build fold/sign column when present in 'statuscolumn'
- **completion**: Use one call to globpath() for .vim and .lua #21942
- **diagnostic**: Use api variable and improve validate (#21111)
- **lsp**: Update semantic tokens algorithm for parsing modifiers (#21383)
- **lsp**: Only redraw the windows containing LSP tokens
- **lsp**: Better binary search mid calculation in semantic token (#22607)
- **statuscolumn**: Only fill click defs array once per redraw (#21884)
- **statusline**: UI elements are always redrawn on K_EVENT
- **treesitter**: Smarter languagetree invalidation
- **treesitter**: More efficient foldexpr
- **ui**: Mitigate redraw latency regression from TUI refactor
BUG FIXES
- Make_filter_cmd for :! powershell
- :! pwsh redirection for `command not found`
- Find multibyte file name in line (#20519)
- Change did_emsg back to int
- 'scroll' is not set correctly for floats with 'splitkeep'
- Setting tabline option not redrawing tabline
- Avoid unsigned overflow in home_replace() (#20854)
- Add lfs to luarc.json (#20979)
- Vim.ui.input always calls callback #21006
- Don't disable compositor widgets when a GUI with multigrid attaches
- Pvs warnings (#21145)
- Clang warnings (#21247)
- Vim.opt_local:append ignoring global option value (#21382)
- Issues with command line if ui elements are externalized
- Properly close builtin popup in ext_popupmenu
- Failing XDG test on Windows CI
- Pass value instead of pointer to isalpha (#21898)
- Use correct number for INT_MAX (#21951)
- Add manifest file to correctly determine Windows version (#21953)
- Uv_tty_set_mode failed in Windows #22264
- Lsp github issue template example (#22285)
- Remove "Features" section from --version/:version (#22315)
- Remove "Compiled by:" from :version/--version (#22316)
- Add missing void as function argument (#22317)
- Windows assertion failure due to incorrect path length (#22324)
- Resolve error from -Werror=maybe-uninitialized
- Address -Wmaybe-uninitialized warnings (#22436)
- Pasting in terminal buffer on windows #22566
- Invalid buffer size argument to snprintf #22729
- Snprintf buffer overflow detected by -D_FORTIFY_SOURCE=3 (#22780)
- **MSVC**: Set the active code page to utf-8 (#22384)
- **Windows**: Restore console title at exit #21922
- **api**: Dynamically allocate line buffer for nvim_out_write (#20537)
- **api**: Nvim_buf_get_text regression (#21071)
- **api**: Nvim_win_set_cursor redraw cursorcolumn for non-current window (#21072)
- **api**: Set correct curbuf when temporarily changing curwin (#21371)
- **api**: "emsg_silent" should imply "silent" in nvim_cmd (#21438)
- **api**: Nvim_create_autocmd crash on invalid types inside pattern array
- **api**: Avoid memory leak with click functions in nvim_eval_statusline() (#21845)
- **api**: Don't allow hiding aucmd_win from another tabpage (#21975)
- **api**: Allow empty Lua table for nested dicts #22268
- **api**: Set script context when setting usercmd or option (#22624)
- **api**: Vim.filetype.get_option() (#22753)
- **api**: Make nvim_get_hl return 'cterm' attrs properly
- **api**: Use local LastSet structure in nvim_get_option_info (#22741)
- **api**: Return both link and attributes with nvim_get_hl (#22824)
- **api**: Avoid double hit-enter prompt with nvim_err_writeln (#22879)
- **autocmd**: Handle recursion for force set (#22820)
- **buffer_updates**: Save and restore current window cursor (#16732)
- **build**: "make clean" fails
- **build**: Duplicate version string "v0.8.0-v0.8.0" #20578
- **build**: Fix invalid use of EXITFREE
- **chansend**: Sending lines to terminal in reverse order on Windows #19315
- **ci**: Skip test on windows (#21502)
- **ci/release/winget**: Bump action version
- **client**: Wait for session to exit
- **clint**: Disable whitespace/newline #20619
- **clipboard**: Prefer xsel #20918
- **clipboard**: Update version regex pattern (#21012)
- **clipboard**: Show provider warning when not during batch changes #21451
- **column**: Avoid drawing columns for virt_lines_leftcol
- **column**: Estimate 'statuscolumn' width appropriately
- **column**: No longer reset nrwidth_line_count for 'statuscolumn'
- **column**: Cmdwin cursor is offset with 'statuscolumn' (#22445)
- **column**: Issues with 'statuscolumn' width (#22542)
- **column**: Rebuild status column when sign column is invalidated (#22690)
- **column**: Invalidate statuscolumn width when UPD_NOT_VALID (#22723)
- **completion**: Set pum_size even if ext_popupmenu is used (#20648)
- **completion**: Correct what modes support fuzzy completion
- **completion**: Include lua syntaxes in :ownsyntax completion (#21941)
- **coverity/433537**: Don't call kv_concat_len() when read_size is 0 (#21664)
- **decoration**: Redraw correctly when re-using ids
- **decoration**: Call providers in win_update() earlier
- **decoration**: Do not reset must_redraw after calling providers (#21459)
- **decoration**: Don't show signcolumn for non-sign_text extmark (#22135)
- **diagnostic**: Correct type annotations; add Diagnostic type (#21120)
- **diagnostic**: Clear stale cache on reset (#21454)
- **diagnostic**: Sort diagnostics by column (#21457)
- **diagnostic**: Revert notification on missing diagnostics (#21632)
- **diagnostic**: Use correct field name for tags (#22835)
- **diff**: Remove size_t underflow (#20929)
- **diff**: Fix a crash in diff mode with linematch enabled (#21070)
- **diff**: Handle long lines without crashing (#21389)
- **diff**: Avoid restoring invalid 'foldcolumn' value (#21650)
- **diff**: "nvim -d" should only diff arglist files #21829
- **diff**: Adjust extmarks after diffput/diffget (#22440)
- **diff**: Add NULL check
- **diff**: Trigger on_bytes only once after diffget/diffput
- **diff.c**: Regression in diffgetput (#20843)
- **docs**: Missing "(" in :help HTML
- **docs**: Nil as viable argument for goto_prev (#20852)
- **docs-html**: Keycodes, taglinks, column_heading #20498
- **docs-html**: Update parser
- **docs-html**: Misaligned tabs after conceal #20690
- **edit**: Don't subtract msg_scrolled when removing double quote (#22630)
- **editorconfig**: Do not highlight unknown properties as errors (#21673)
- **embed**: Handle stdio in server properly
- **eval**: Make error number of charidx() same as Vim
- **eval**: Change some tv_dict_add() usages back to hash_add()
- **events**: Save v:event for cmdline autocommands separately (#21316)
- **events**: Skip WinScrolled for newly-created float windows (#21333)
- **ex_cmds**: Fix a mistake in the porting of Vim patch 8.1.0306 (#21096)
- **exit**: The TUI should not ui_flush() itself (#21625)
- **exit**: Skip unnecessary steps in TUI preserve_exit() (#21897)
- **extmarks**: Adjust extmarks when inserting prompt prefix
- **extmarks**: Problems with folded virtual lines (#21930)
- **extmarks**: Don't leak memory on error (#22507)
- **fileio**: Use first available directory in backupdir for backupcopy (#20655)
- **fileio.c**: Don't use uninitialized memory (#22031)
- **filetype**: Don't pass empty string to detect (#20766)
- **filetype**: Correctly detect tex files
- **filetype**: Make vim.filetype.match() work with contents only (#22181)
- **filetype**: Avoid recursive FileType autocmds (#22813)
- **filetype**: Make recursive work...again (#22826)
- **float**: Make closing float in another tab return to correct window
- **float**: Fix ml_get error with bufpos
- **float**: Fix crash with bufpos and non-existent window (#21319)
- **float**: Remove -1 in height clamp
- **folds**: Fix fold marker multibyte comparison (#20439)
- **folds**: Use long for number of folded lines (#21447)
- **folds**: Cursorline highlight is not always applied on closed folds (#22242)
- **folds**: Handle visual blockwise indent insertion correctly (#22898)
- **fs**: Duplicate path separator #21509
- **health**: Correct tmux rgb verification (#20868)
- **health**: Fix `tmux_esc_time` comparison
- **health**: Iterate using ipairs correctly (#22119)
- **health**: Stop using deprecated ts.language.inspect_language() (#22850)
- **help**: Force tree reparse after local addition insertion
- **helpers**: Restore channel id after a call to WITH_SCRIPT_CONTEXT
- **highlight**: Link more treesitter groups by default (#20711)
- **highlight**: Properly deal with underline mask when listing (#22057)
- **highlight**: Avoid ORing underline flags (#22372)
- **highlight**: Use winhl=Foo:Bar even when Bar is empty
- **inspect**: Alwasy resolve full treesitter lang hl groups
- **intro**: Omit patch version in ":help news" item #20713
- **intro**: Make :help news line easier to translate (#21974)
- **lintcommit**: Capitalized description #22282
- **loader**: Disable profiling by default
- **lsp**: Reporting bogus capabilities in CodeActionKind #20678
- **lsp**: Ignore hover and signatureHelp responses on buffer change (#21121)
- **lsp**: Render <pre>{lang} code blocks and set separator default to false (#21271)
- **lsp**: Remove workspaceFolders field (#21284)
- **lsp**: Call show_document with correct args
- **lsp**: Ensure open_logfile is safe for fast events (#21288)
- **lsp**: Followup fixes for semantic tokens support (#21357)
- **lsp**: Correct some type annotations (#21365)
- **lsp**: Fix get_active_clients bufnr parameter (#21366)
- **lsp**: Ignore null responses for semanticTokens request (#21364)
- **lsp**: Token_edit.data might be null on deletion (#21462)
- **lsp**: Adjust gravity of semantic tokens extmarks (#21574)
- **lsp**: Fix nil client access in get_active_clients (#21524)
- **lsp**: Change vim.lsp.get_active_clients.filter name annotation to string (#21624)
- **lsp**: Correct callHierarchy capability to fix lsp.buf.incoming_calls() (#21665)
- **lsp**: Fix `removed` param value in add_workspace_folder (#21915)
- **lsp**: Assert workspace/applyEdit receives params (#21945)
- **lsp**: Check method is supported when range formatting (#21970)
- **lsp**: Check if the buffer is a directory before w! it (#22289)
- **lsp**: Wrong format of bufnr and client order in error message (#22336)
- **lsp**: Fix some type annotations (#22397)
- **lsp**: CallHierarchy methods also require the callHierarchyProvider (#22427)
- **lsp**: Use buffer scheme for files not stored on disk (#22407)
- **lsp**: Only fire LspDetach for attached buffers (#22468)
- **lsp**: Don't monitor files if workspace_folders is nil (#22531)
- **lsp**: Change LspTokenUpdate to use buffer instead of pattern (#22559)
- **lsp**: Prevent lsp tests from picking up local user config (#22606)
- **lsp**: Send didClose on buffer rename (#22623)
- **lsp**: Use line start/end for visual line selection (#22632)
- **lsp**: Remove_workspace_folders fails if client has no workspace_folders #22633
- **lsp**: Vim.lsp.util.apply_text_edits cursor validation #22636
- **lsp**: Kill buffers after renaming a directory #22618
- **lsp**: Avoid switching buffers on lsp attach (#22689)
- **lsp**: Jump to tag locations reliably when :ltag is used (#22750)
- **lsp**: Add missing silent check in lsp hover handler (#22763)
- **lsp/window_showDocument**: Correctly handle external resources #20867
- **lua**: Properly configure luacheck and remove `local vim = ...` lines (#20551)
- **lua**: Assert failure with vim.regex() error inside :silent! (#20555)
- **lua**: On_yank error with blockwise multibyte region #20162
- **lua**: Pesc, tbl_islist result types #20751
- **lua**: Make `vim.deepcopy` work with `vim.NIL`
- **lua**: Always return nil values in vim.tbl_get when no results
- **lua**: Mark some eval functions that can run in API-fast
- **lua**: Vim.deprecate() shows ":help deprecated" #22677
- **luado**: Get old_line length before executing Lua code
- **man**: Support MacOS 13
- **man**: Handle absolute paths as `:Man` targets (#20624)
- **man**: Use italics for `<bs>_` (#22086)
- **man.lua**: Set modifiable before writing page (#20914)
- **man.lua**: Use `env` command (#21007)
- **man.lua**: Open in current window if it's already a man page (#21987)
- **man.lua**: Tests, naming
- **mappings**: Use all buckets in second round of unmap (#21534)
- **mappings**: Fix check for cpo-B inverted in completion
- **mappings**: Make "<" escaping in completion match Vim
- **mark**: Do not restore view in op-pending mode (#20889)
- **memline**: Use long instead of linenr_T for db_line_count
- **memory**: Fix memory alignment for dynamic allocation
- **messages**: Reset msg_grid_scroll_discount when redrawing (#21000)
- **messages**: Don't set cmdline_row when messages have scrolled (#21015)
- **mouse**: Ensure no scrolling with "ver:0" in 'mousescroll' (#20861)
- **mouse**: Statusline click registered as statuscolumn (#21748)
- **options**: No matter what is said, 'cmdheight' is tab-local (susy baka)
- **options**: Fix local 'sidescrolloff' doesn't work for mouse (#21162)
- **options**: Restore exists() behavior for options (#21510)
- **paste**: Feed keys as typed in cmdline mode (#20959)
- **path**: Don't remove trailing slash when getting absolute path (#20853)
- **powershell**: Wrong length allocation for ":%w !" #20530
- **qflist**: Avoid read of uninitialized memory (#20709)
- **rbuffer**: Handle edge case where write_ptr has wrapped around
- **redraw**: Get the line again after evaluating something
- **remote**: Don't leak memory on failure to connect to server (#21931)
- **rpc**: Don't free args on error in rpc_send_event
- **rpc**: Don't parse msgpack if buflen is 0 (#21899)
- **rpc**: Ignore redraw events when not in UI client (#21892)
- **rpc**: Ignore redraw events when exiting (#22184)
- **runtime**: Properly rely on t_Co for colorschemes (#20602)
- **runtime**: Use `g:terminal_color_{0-15}` in colorschemes (#20637)
- **screen**: Correctly draw background and eob with 'rightleft' (#22640)
- **screen**: Redraw the ruler for a current floating window
- **secure**: Crash when hitting escape in prompt (#21283)
- **shell**: On Windows :make does not echo #22728
- **showcmd**: Assert failure with cmdheight=0 (#21536)
- **sleep**: Correct cursor placement (#22639)
- **spell**: Fix wrong cast (#20810)
- **spell**: Properly source spell/LANG.{vim,lua} (#22716)
- **startup**: Support .exrc or .nvimrc with init.lua (#21181)
- **status**: Handle unprintable chars in the statusline
- **statuscolumn**: Fix crashes and clang/PVS warnings (#21725)
- **statuscolumn**: Fix sign column highlights (#21727)
- **statuscolumn**: Foldcolumn buffer is too small (#21761)
- **statuscolumn**: Make %l/%r respect 'number'/'relativenumber' (#21747)
- **statuscolumn**: Always fill click defs array (#21878)
- **statusline**: Don't show showcmd when not enough space (#21550)
- **statusline**: Make nvim_eval_statusline() work with %S (#21553)
- **statusline**: Don't leak memory with zero-width click labels
- **statusline**: Don't leak memory with truncated click labels
- **stdpath**: Default to /tmp if stdpath('run') cannot be created #20952
- **syntax**: Correct conceal for annotated code blocks (#21272)
- **tabline**: Avoid memory leak in tabline click definitions (#21847)
- **terminal**: Fix 'mousescroll' not respected in terminal mode (#21415)
- **test**: Unset XDG_CONFIG_HOME when running oldtest
- **test**: Fix issues detected by running unittests in ASAN/UBSAN
- **test**: Fix C imports on macOS arm64
- **tests**: Only get the color map once, even for multiple test files
- **tests**: Initialize Screen.colors in API highlight tests
- **tests**: Use -l mode for lsp tests
- **tests**: Fixes for using vim.mpack and more ASAN
- **tests**: Adapt treesitter/highlight_spec priority test
- **treesitter**: Properly restore `'syntax'` (#21358)
- **treesitter**: Really restore syntax
- **treesitter**: Validate language name
- **treesitter**: Fix most diagnostics
- **treesitter**: Don't trample parsers when filetype!=lang
- **treesitter**: Make params optional
- **treesitter**: Fixup language invalidation (#22381)
- **treesitter**: Remove virtual text from playground
- **treesitter**: Ipairs -> pairs
- **treesitter**: Fixup for health
- **treesitter**: Maintain cursor position when toggling anonymous nodes
- **treesitter**: Disallow empty filetypes
- **treesitter**: Typos in _range.lua
- **treesitter**: Break early from loop when match is found (#22499)
- **treesitter**: Raise ts_match_limit to 256 (#22497)
- **treesitter**: Is_in_node_range (#22582)
- **treesitter**: Correct include_bytes arg for parse()
- **treesitter**: Do not error on empty filetype
- **treesitter**: Better lang handling of get_parser()
- **treesitter**: Foldexpr (#22652)
- **treesitter**: InspectTree does not respect 'splitright' #22692
- **treesitter**: Annotations
- **treesitter**: Add missing deprecate
- **treesitter**: Update queries from nvim-treesitter
- **treesitter**: Use capture metadata range if exists
- **treesitter**: Disable folding in inspect_tree() (#22885)
- **treesitter**: Do not track ranges of the root tree (#22912)
- **ts**: Check buffer is loaded when restoring options (#21419)
- **tui**: Resume main thread if suspending isn't implemented (#20523)
- **tui**: Set cursor color param as string when required #21407
- **tui**: More work in the TUI
- **tui**: Do not set ui_client_termname if it is already set (#21607)
- **tui**: Make a copy of data->params before unibi_format() (#21643)
- **tui**: Do not invoke loop recursively for pad()
- **tui**: Set stdin as "blocking" on exit (#21973)
- **tui**: Detach/attach on suspend/resume (#22040)
- **tui**: Exit on input eof
- **tui**: Set taskbar, icon in Windows #22270
- **tui**: Only forward stdin_fd on first attach (#22293)
- **tui**: Properly check if stdin is a tty (#22321)
- **tui**: Avoid stack-use-after-scope with cursor color (#22435)
- **tutor**: Failing to get buf name #20933
- **ui**: Msg_ext_set_kind for nvim_echo (#20476)
- **ui**: Setting 'cmdheight' with global statusline (#20515)
- **ui**: Send grid_resize events before triggering VimResized (#20760)
- **ui**: Fix some cases of stale highlight definitions
- **ui**: Allow resize commands to set 'cmdheight' to 0
- **ui**: Fix fragile UI_CALL macro invocation (#21656)
- **ui**: Convert title_pos string in nvim_win_get_config
- **ui**: Set stc to empty in floatwin with minimal style (#21720)
- **ui**: Command line issues with external messages (#21709)
- **ui**: Re-organize tty fd handling and fix issues
- **ui**: Make sure screen is valid after resizing
- **ui**: Recording change doesn't trigger statusline redraw
- **ui**: Ruler is not redrawn in cmdline with redrawstatus
- **ui-ext**: Correct message kind in history before vim.ui_attach()
- **ui-ext**: Log and clear error in ui_comp_event (#21147)
- **ui-ext**: Force cursor update after resize in char-based UI
- **unittest**: Delete unused duplicated code
- **unittests**: Do not consider process crash to be a success
- **unittests**: Fix TUI broken test previously ignored
- **vim-patches**: Ensure libfuse is installed
- **vim.diff**: Correctly apply hunk offsets with linematch (#20931)
- **vim.diff**: Fix fastforward off-by-1 (#20937)
- **vim.ui.input**: Return empty string when inputs nothing (#20883)
- **vim.version**: Incorrect version.cmp()
- **vim.version**: Prerelease compare
- **win_close**: Remove float grid after closing buffer (#21551)
- **win_update**: Don't use unintialized memory in edge case (#22266)
- **windows**: Set console icon later in startup
- **windows**: Consistent normalization in fs.find
BUILD SYSTEM!
- Remove unused variable CMAKE_C_COMPILER_ARG1
- Remove code for cross-compilation
- Remove url for 32-bit winyank
- Remove unnecessary translation-related code
- Rely on builtin cmake downloading rather than custom script
- Define EP_PREFIX property
- Only generate compilation database for the nvim target (#20449)
- Remove EXITFREE for debug builds
- Generate compilation database for older cmake versions
- Add clang-tidy configuration file (#15601)
- Fix incorrect clang-tidy identifier rules (#20650)
- Rely on default cmake installation if possible
- Give example on complex regexes
- Preprocess vim patches with uncrustify #20786
- Copy each treesitter parser library individually #20797
- Fix plural messages missing from .po files (#20830)
- Make update-po support optwin.vim (#20840)
- Remove python linting #20851
- Add EXCLUDE option to add_glob_target
- Always ignore user's cmake preset (#20935)
- Allow IWYU to fix includes for all .c files
- Restrict `git describe` to top level source directory (#20993)
- Fix help tags generation when SHELL=fish (#21562)
- Add git sha to version when built with nix flake (#21210)
- Remove workaround for old luajit versions
- Remove workaround for ancient clang versions
- Use modern cmake (#21589)
- Include our libraries before system libraries (#21746)
- Enable iwyu with target properties instead of variables (#21797)
- Exclude tui/terminfo_defs.h from lintc-clint (#21822)
- Enable cmake workflow presets (#21860)
- Remove nvim as a dependency of unittests (#21903)
- Various cmake fixes (#21902)
- Bump MSVC warning to level two (#21890)
- Use CMAKE_POSITION_INDEPENDENT_CODE instead of -fPIC (#21947)
- Make generated source files reproducible #21586
- Remove unnecessary unit test code (#21940)
- Use cmake for all platforms for unibilium and libtermkey (#21926)
- Simplify treesitter installation (#21969)
- Use upstream CMakeLists.txt for unibilium (#21976)
- Delete pthreads import (#21732)
- Remove GNU make check (#21977)
- Remove tests for libtermkey (#21983)
- Use cmake to build treesitter on all platforms (#21984)
- Introduce default build variables (#21991)
- Use cmake to build libvterm on all platform (#21986)
- Check if libvterm version meets requirement (#22010)
- Find unibilium without relying on libfindmacros (#22015)
- Fix dependencies in find modules (#22017)
- Enable ccache by default if available (#22020)
- Enable ccache project-wide (#22045)
- Add uninstall make target (#22059)
- Remove unnecessary file generation (#22099)
- Update release data
- Stop relying on CMAKE_BUILD_TYPE to determine the build type (#22051)
- Unbreak building neovim with multi-config generators (#22104)
- Don't build libnvim when running the CI (#22149)
- Remove duplicate INTERFACE keyword (#22106)
- Prefer -D <variable>=<value> over -D<variable>=<value> (#22164)
- Replace check-single-includes with clang-tidy (#22061)
- Remove unused function get_test_target (#22176)
- Reuse source files with interface library (#22177)
- Create test/CMakeLists.txt and move test-related code (#22179)
- Remove codecov related files (#20859)
- Mark uninteresting variables as advanced (#22208)
- Enable MSVC level 3 warnings (#21934)
- Don't check environment variable to detect CI (#22234)
- Treat clang-tidy warnings as errors (#22238)
- Remove ENABLE_COMPILER_SUGGESTIONS option (#22249)
- Only use HOSTNAME_PRG if HOSTNAME is undefined (#22288)
- Use custom command to create single versiondef (#22290)
- Use libuv config file (#22209)
- Test multi-config generator (#22310)
- Build all dependencies in parallel (#22329)
- Remove unused dependency penlight (#22334)
- Build luajit in parallel (#22327)
- Set libtermkey project language to C (#22410)
- Remove pkgconfig-related code (#22422)
- Remove libfindmacros library (#22423)
- Cmake cleanup (#22251)
- Unset variables ending with "URL" if USE_EXISTING_SRC_DIR is ON
- Show build type specific compiler flags when using --version
- Fix unknown pragma warning with mingw (#22533)
- Consistently use the provided option paths
- Fix USE_EXISTING_SRC_DIR option
- Silence git describe error output
- Remove workaround for incorrectly packaged libluv
- Enable unit testing on release builds (#22554)
- Fix build warning when using gcc 4.9.2
- Explicitly add dependency include dir for header generation
- Sanitizers for gcc
- Set CMAKE_C_STANDARD to 99 for all dependencies
- Drop curl.exe on Windows
- Download wintools executables separately
- Cmake cleanup
- **MSVC**: Enable assertions on RelWithDebInfo build type (#22326)
- **Windows**: Fix redoing version generation (#21880)
- **Windows**: Make bundling nvim-qt optional (#21866)
- **Windows**: Allow building without custom md5sum
- **bump_deps.lua**: Run command -v in shell (#22030)
- **ci**: Let ASAN print tracebacks for more errors (SIGABORT, SIGILL)
- **cmake**: Add modelines to enable syntax highlighting
- **deps**: Restore support for USE_EXISTING_SRC_DIR (#20491)
- **deps**: Add build type for libuv (#20575)
- **deps**: Disable shared library for libvterm. (#20566)
- **deps**: Bump tree-sitter to v0.20.8 (#22663)
- **deps**: Bump luarocks to v3.9.2
- **deps**: Bump coxpcall to 1.17.0-1
- **deps**: Bump luacheck to 1.1.0-1
- **deps**: Bump mpack to 1.0.10
- **deps**: Bump lua parser to v0.0.14 (#20897)
- **deps**: Switch vim parser to maintained fork (#22896)
- **deps**: Bump vimdoc parser to v2.0.0 (#22870)
- **deps**: Set query parser to release (#22603)
- **deps**: Bump libvterm to v0.3.1
- **deps**: Bump msgpack-c to v6.0.0 (#22522)
- **deps**: Bump win32yank to v0.1.1 (#22700)
- **deps**: Bump actions/stale from 7 to 8
- **deps**: Switch to Launchpad for libvterm and libtermkey (#22811)
- **editorconfig**: Set indent_size to 4 for python files (#21135)
- **lint**: Remove clint.py rules for braces #20880
- **lint**: Add more shell scripts to lintsh
- **lintsh**: Double quote to prevent word splitting (#21571)
- **luarocks**: Update busted version to v2.1.1 (#22029)
- **nix**: Change the pkgs to final, add new version of libvterm (#20410)
- **nix**: Update nixpkgs
- **nix**: Clean up nix flake (#21565)
- **nix**: Remove pylint as it has been removed (#21572)
- **nix**: Fixed build (#22918)
- **vim-patch.sh**: Handle added/removed files properly
- **vim-patch.sh**: Checkout files with path for uncrustify (#20863)
- **windows**: Export extern symbols for use in FFI #22756
- **windows**: Specify Windows 8 as the minimum version (#22173)
- **windows**: Work around luarocks not finding its own md5sum
DOCUMENTATION
- Refer to vim.lsp.start() in LSP issue template #20422
- Fix incorrect :help tag (#20511)
- Added proper annotations to functions in shared.lua
- Fix typos
- Fix/remove invalid URLs #20647
- "supported platforms" matrix #19615
- Update vimdoc parser #20747
- ":che" is ":checkhealth" #20147
- .git-blame-ignore-revs (#20820)
- Swap CursorLineFold and CursorLineSign (#20875)
- Add language annotation to Nvim manual
- Add missing docs from some Vim patches (#21296)
- Dark/light color/accessibilty pass for generated html docs #21345
- Add links to extmarks and namespaces (#21378)
- Remove "How-to disable mouse" menu item #21394
- Add security policy (#17338)
- Fix order of numbers in syntax.txt (#21581)
- Clarify line about converse of lua-heredoc (#21592)
- Fix treesitter parsing errors
- Add 'statuscolumn' docstrings (#21717)
- Builtin TUI is no longer channel 0 (#21794)
- Treesitter.add_directive, add_predicate #21206
- Docs: use codeblocks in runtime/doc/options.txt (#21919)
- Clarify :runtime behavior without [where] again (#22003)
- Clarify "pipe" mode for sockconnect
- Reword news.txt to ensure a consistent style (#22215)
- Remove mentions of 'balloonexpr' #22049
- Remove the test badge from the README (#22350)
- Mention getmousepos() for click execute function label
- Naming conventions, guidelines
- Fix more treesitter parsing errors
- Use build/bin/nvim instead of nvim in gen_vimdoc (#22398)
- Fix vim.treesitter tags
- Lua2dox.lua debugging
- Module-level docstrings (@defgroup) #22498
- Add missing highlight groups for floats
- Add removed features in news.txt
- Fix g:terminal_color_x terminal colors #22746
- More details about vim.region (#21116)
- How to debug TUI using gdb/lldb #22771
- Add vim.treesitter.query.get_query() to deprecated.txt
- **README**: Add Kotlin as a language which can use the API (#21567)
- **README**: Fix CI status badge (#22308)
- **api**: Pattern is not expanded for autocommands (#20812)
- **api**: Fix treesitter parsing errors
- **api**: Tweak data arg for nvim_create_autocmd (#22008)
- **api**: Link to nvim_set_hl_ns from nvim_set_hl (#22678)
- **dev-style**: Remove rule about variable declarations (#20446)
- **dev-style**: Remove rules covered by uncrustify
- **diagnostic**: Number → integer (#22512)
- **docstrings**: Fix runtime type annotations
- **editorconfig**: Update news.txt
- **editorconfig**: Add editorconfig.txt
- **editorconfig**: Number → integer (#22514)
- **filetype**: Number → integer (#22516)
- **gen**: Support language annotation in docstrings
- **gitignore**: Correct oldtest path
- **help**: Consistent headers for local additions
- **highlight**: Fix type annotations (#22272)
- **html**: Render @see items as a list #22675
- **inspect**: Number → integer (#22511)
- **lsp**: Add formatting APIs to deprecated.txt (#20487)
- **lsp**: Update buf_notify and rpc.notify params types (#21753)
- **lsp**: Fix type annotation on convert_input_to_markdown_lines (#21772)
- **lsp**: Format arguments to start_client() (#21980)
- **lsp**: Update cmd_env description (#22438)
- **lsp**: Change type annotations from number → integer (#22510)
- **lsp**: Type annotation for lsp.client (#22509)
- **lsp**: More precise type annotations (#22621)
- **lsp**: Opt-out of default LSP "gq" #22615
- **lua**: Add clarifications for fs.find() and fs.normalize() (#21132)
- **lua**: Correct the tags for vim.opt_local and vim.opt_global (#21138)
- **lua**: Correct vim.spell.check example (#21311)
- **lua**: Add guide to using Lua in Neovim (#21137)
- **lua**: Add `vim.json` (#21538)
- **lua**: Fix treesitter parsing errors
- **lua**: Adjust some type annotations
- **lua**: Lua-guide: <Nop> is for rhs of vim.keymap.set(), not lhs (#21814)
- **lua**: Use luaref tag instead of www.lua.org #21813
- **lua**: Number → integer (#22517)
- **luvref**: Fix treesitter parsing errors
- **luvref**: Update to version bump
- **maintain**: CI strategy #20778
- **maintain**: Add note on updating luvref.txt
- **manual**: Fix treesitter parsing errors
- **news**: Add news.txt and link from README (#20426)
- **options**: Remove mentions of 'imactivatefunc' and 'imstatusfunc'
- **shell**: Mention "&" for piping with powershell #20459
- **support**: Update tested versions (#21126)
- **test**: Using cmake directly (without make) #22781
- **treesitter**: Fix predicate syntax (#21016)
- **treesitter**: Change links for `eq?` and `set!` to codeblocks (#21047)
- **treesitter**: Use full function names in tags (#21321)
- **treesitter**: Fix parse errors
- **treesitter**: Number → integer (#22513)
- **treesitter**: Add query injections
- **tutor**: Fix TODO line demo (#21965)
- **uri**: Number → integer (#22515)
- **usr**: Make usr_05.txt more coherent with Nvim changes (#22428)
- **usr_05**: Update sentence about Nvim default behavior of Q (#20817)
- **vim.fs**: Normalize Windows example was incorrect (#21966)
- **website**: Soft wrap code blocks #21644
REFACTOR
- Remove char_u type and replace with char, uint8_t, etc
- remove STRNCMP (#21208) and STRLCPY (#21235)
- Remove clint error suppression as all errors has been fixed#21782
- Explicitly convert HANDLE to intptr_t for _open_osfhandle()
- Clang-tidy fixes to silence clangd warning (#20683)
- Fix uncrustify lint errors
- Move do_mouse() and its helpers to mouse.c (#20895)
- Fix clang-tidy warnings
- Click definition functions #20923
- Remove stray emsg check after #20992 (#20996)
- Move tabline code to statusline.c (#21008)
- Convert drawline.c draw states to enum (#21067)
- Remove __STDC_ISO_10646__ check
- Deprecate 'secure' option
- Remove old TODO comments that aren't relevant anymore (#21144)
- Maybe suppress a PVS warning
- Rework parameter validation in vim.secure.trust() (#21223)
- Buffer_ensure_loaded()
- Move ex_retab() to indent.c
- Remove COMMA (#21260)
- Make sure getting a callback doesn't modify argument
- Rename mch_msg => os_msg
- Rename mch_get_acl => os_get_acl
- Eliminate os_unix.c #21621
- Extract code to open stdin for reading
- Eliminate bump-deps.sh using "nvim -l"
- Fix IWYU mapping file and use IWYU (#21802)
- Format with stylua (#21821)
- Remove E5500, adjust tests
- Fix sign conversion warning from gcc (#21833)
- Use uint8_t for blobs and ga_append() (#21916)
- Use flexible arrays instead of the length-of-one trick (#22072)
- Reduce scope of locals as per the style guide (#22206)
- Move init_default_autocmds to lua
- Rename show_tree => inspect_tree #22474
- Move ga_loaded to runtime.c (#22626)
- Do more in TRY_WRAP
- Add const and remove unnecessary casts (#22841)
- Use bool type for global variables (#22842)
- Rename local API alias from a to api
- Make error message definitions const
- Remove use of reserved c++ keywords
- **PVS**: Suppress false positive V547 in drawline.c (#21875)
- **PVS/V1048**: Remove unnecessary assignment (#21870)
- **PVS/V1048**: Remove redundant assignment (#21871)
- **PVS/V1048**: Remove duplicated assignments (#21873)
- **PVS/V581**: Merge identical if statements (#22390)
- **api**: Do not allocate temporaries for internal events
- **api**: VALIDATE macros #22187#22256#22262
- **build**: Remove unused stdlib function and include checks
- **build**: Graduate HAVE_LOCALE_H feature
- **build**: Graduate libtreesitter features which are 1+ years old
- **build**: Graduate msgpack-c FLOAT32 "feature" since forever
- **build**: Graduate unibilium VAR_FROM feature from 2017
- **build**: Graduate -Wvla, -fno-common and -Og "features"
- **build**: Make installation of runtime/ more effective
- **checkhealth**: Convert "nvim" check to Lua
- **clint**: Convert short to int16_t (#20815)
- **column**: Remove unused build_statuscol_str() arguments
- **completion**: Don't add and remove '^' for Lua (#22702)
- **diagnostic**: Remove deprecated function (#20423)
- **diagnostic**: DRY for loop #21521
- **diff.c**: Reduce scope of variables (#20781)
- **diff.c**: Break up ex_diffgetput()
- **diff.c**: Allocate hunks directly in ga_array
- **diff.c**: Factor out hunk extraction
- **diff.c**: Factor out hunk processing
- **diff.c**: Simplify diff_buf_idx()
- **diff.c**: Internal does not need diffstyle
- **diff.c**: Factor out diffblock deletion
- **diff.c**: Copy lines via memmove
- **drawline.c**: Leadcol/trailcol
- **drawline.c**: Move number column helpers function together
- **drawscreen.c**: Reduce scopes of locals (#20668)
- **eval**: Make get_lval() explicitly check for v:lua
- **eval.c**: Factor out get_number_tv() (#21893)
- **exit**: Pass error message to preserve_exit() (#22097)
- **extmarks**: Some minor internal API changes
- **f_has**: Remove wrong comment (#21561)
- **fileio.c**: Reduce scope of locals
- **fileio.c**: Refactor match_file_path()
- **fileio.c**: Refactor vim_rename()
- **fileio.c**: Refactor buf_write_bytes
- **fileio.c**: Refactor buf_write_bytes (2)
- **fileio.c**: Remove HAS_BW_FLAGS
- **fileio.c**: Factor out autocmd handling from buf_write()
- **fileio.c**: More bools
- **fileio.c**: Reduce scope of locals
- **fileio.c**: Do not use macros for error handling
- **fileio.c**: Factor out buf_write post autocmds
- **fileio.c**: Factor out file info calc
- **fileio.c**: Make unreadable expression readable
- **fileio.c**: Factor out backup creation
- **fileio.c**: Remove HAVE_ACL ifdefs
- **fileio.c**: Normalize ifdefs
- **fs**: Replace vim.fn/vim.env in vim.fs (#20379)
- **highlight**: Rename FloatBorderTitle #20988
- **highlight**: Reshape the HL_UNDER* bits into a 3-bit integer mask
- **highlight_group.c**: Reduce scope of locals
- **intro**: Avoid Coverity warning (#22000)
- **loader**: Use vim.fs
- **loader**: Remove BufWritePost autocmd
- **loader**: Add typing for package.loaders
- **loader**: Simplify tracking logic
- **loader**: Cache hash information
- **log**: Reduce compile time LOG_LEVEL granularity
- **lsp**: Remove deprecated lsp functions (#20421)
- **lsp**: Extract a _create_server method in lsp_spec
- **lsp**: Remove deprecated vim.lsp.buf_get_clients calls (#21337)
- **lsp**: Remove workaround for missing bit module (#22373)
- **lsp**: Remove deprecated code (#22389)
- **lsp**: Remove _resolve_capabilities_compat (#22628)
- **lsp**: Do not parse verbose output when overwriting options (#22810)
- **lua**: Move _G.arg init to nlua_init()
- **lua**: Get all marks instead of iterating over namespaces
- **lua2dox**: Format with stylua
- **main.c**: Remove unreachable use_builtin_ui conditions (#22338)
- **man**: Pass env directly to spawn() (#20591)
- **man**: Add type annotations
- **memory**: Simplify new alignment logic
- **option.c**: Reduce scope of locals
- **option.c**: Add get_varp_from and get_varp_scope_from
- **option.c**: De-nest set_option_value
- **option.c**: Use intermediate for options ref
- **option.c**: Add do_set_num
- **option.c**: Add do_set_bool
- **option.c**: Simplify do_set_string
- **option.c**: Factor out common skip check
- **option.c**: Factor out loop code from do_set()
- **option.c**: Remove goto
- **option.c**: Change nextchar to uint8_t
- **option.c**: Use skiptowhite_esc
- **option.c**: Factor out set op parsing
- **option.c**: Factor out option prefix parsing
- **option.c**: Factor out option name parsing
- **option.c**: Factor out opt_idx validation
- **option.c**: De-nest code in do_set_option
- **option.c**: Move bool prefix check
- **option.c**: Add do_set_option_value
- **option.c**: Factor out some nextchar checks
- **option.c**: Factor out string option special case handling
- **options**: Don't pass negative number to illegal_char() (#21999)
- **optionstr.c**: Reduce scope of locals
- **optionstr.c**: Break up did_set_string_option 1-52
- **optionstr.c**: Remove some simple did_set_* functions
- **optionstr.c**: Add did_set_string_option_for
- **optionstr.c**: Break up did_option_listflags
- **optionstr.c**: Remove some redundant parens
- **optionstr.c**: Break up did_set_expropt
- **optionstr.c**: Move handling of formatlistpat
- **optionstr.c**: Align comments (#22070)
- **params**: Open -s and -w script files after parsing commands
- **pty**: Remove old logic for inheriting termios from host terminal
- **redraw**: No type argument in update_screen()
- **redraw**: Various simplifications
- **redraw**: Make cursor position redraw use the "redraw later" pattern
- **runtime**: Use vim.version to compare versions #22550
- **runtime.c**: Factor out find_script_by_name() (#22620)
- **screen**: Screen.c delenda est
- **sleep**: Simplify rube goldberg implementation of :sleep
- **spell**: Use uint8_t for "byts" variables (#22519)
- **statusline**: Move statusline defs to statusline_defs.h
- **tag**: Remove return type from do_tag()
- **test**: Create an lsp-specific helpers.lua file
- **tests**: Lift retry() into assert_log()
- **tests**: Run unittests using main nvim binary in interpreter mode
- **tests**: Move lua-client into core and use it for functionaltests
- **treesitter**: Add vim.treesitter.get_node() (#22360)
- **treesitter**: Use string.format to create lines
- **treesitter**: Simplify some range functions
- **treesitter**: Delegate region calculation to treesitter (#22553)
- **treesitter**: Use byte ranges from treesitter (#22589)
- **treesitter**: Add Range type aliase for Range4|Range6
- **treesitter**: Delegate region calculation to treesitter (#22576)
- **treesitter**: Move inspect_tree impl
- **tui**: Use nvim_echo() for verbose terminfo
- **tui/input.c**: Remove unused multithreading code (#22342)
- **ui**: Statusbar invalidation to win_set_inner_size()
- **ui**: Devirtualize the ui layer
- **ui**: Cleanup 'redrawdebug', introduce "flush" mode
- **ui**: Don't reimplement redrawing in focus gained handling
- **ui**: Remove some superfluous ui_flush() calls
- **ui**: Ui_log() can now just be a function
- **uncrustify**: Move macros definitions to enable formatting
- **uncrustify**: Improved formatting rules
- **vim.gsplit**: Remove "keepsep"
- **vim.version**: Cleanup
- **vim.version**: Use lazy.nvim semver module
- **vim.version**: Use lazy.nvim semver module
- **win_close**: Remove "force", don't pass on "free_buf" (#21921)
- **win_line**: Rename attr to vi_attr (#21487)
- **win_line**: Move some variables into a struct (#22490)
- **window**: Remove aucmd_win check from one_window() (#21972)
- **window.c**: Reduce scope of locals (#20301)
- **windows**: Move os_icon_xx functions
TESTING
- Introduce skip() #21010
- Remove skip for 32-bit MSVC (#21030)
- Don't skip parser_spec on windows (#20294)
- Add a Lua test for swap file created before boot
- Fix failing tui_spec.lua tests (#21117)
- Use isCI to simplify CI detection (#21134)
- Simplify platform detection (#21020)
- Adding/removing winbar should not cause win_pos events (#21226)
- Use luv.os_uname for fast platform detection (#21157)
- Add more tests for float window bufpos (#21318)
- Convert another test in test_matchadd_conceal.vim to Lua (#21353)
- Remove unused variable (#21552)
- Add test cases for command line issues
- Add more tests for Unicode
- Avoid consecutive mouse input at different positions (#21781)
- Align Test_shell_options, Test_shellslash with Nvim default
- Avoid noise in NVIM_LOG_FILE
- Exepath() returns correct path with cmd.exe, powershell #21928
- Remove unused field ext_float (#22243)
- Make expect_unchanged() less confusing (#22255)
- Make {MATCH:} behave less unexpectedly in screen:expect()
- Don't search entire repo for files
- Move oldtests to test directory (#22536)
- Use a wider screen in the rightleft winhl test (#22641)
- Unskip working Windows tests (#22537)
- Re-bundle cat on windows (#21255)
- Windows not detected in msys shells #22671
- Use exec_capture() in more places (#22787)
- Fix flaky watchfiles tests (#22637)
- Replace lfs with luv and vim.fs
- Improve editor/fold_spec.lua and editor/put_spec.lua (#22916)
- **Windows**: Normalize paths for test summary
- **api**: Migrate screenchar() test in in window API to screen test
- **editorconfig**: Add editorconfig tests
- **exit_spec**: Make sure that autocommands are triggered (#22188)
- **fileio_spec**: Avoid expect_exit() without calling clear() (#21810)
- **float_spec**: Add missing sum_scroll_delta #22648
- **help**: Drop treesitter parse error to 0
- **highlight_spec**: Fix warning in Visual highlight test (#22719)
- **legacy/prompt_buffer_spec**: Align script with oldtest more (#22354)
- **lsp**: Call clear() before willSave tests (#21336)
- **lsp**: Add a screen:expect() between insert() and feed_command() (#21577)
- **lua/diagnostic_spec**: Remove unnecessary after_each()
- **lua/fs_spec**: Fix vim.fs.dir() test (#21503)
- **lua/ui_spec**: Fix Ctrl-C test flakiness (#21039)
- **old**: Test_lambda.vim garbagecollect() -> test_garbagecollect_now()
- **old**: Remove stray test42 files (#20966)
- **old**: Make Test_help_tagjump() test order match upstream
- **old**: Add missing lines from Vim patch 8.2.0522 (#21048)
- **old**: Make ":h local-additions" work properly in test_help.vim
- **old**: Skip Vim9 script with less divergence
- **old**: Change $TMPDIR from Xtest-tmpdir to X-test-tmpdir (#21346)
- **old**: Make test_signs.vim closer to upstream (#21479)
- **old**: Run some part of 'cpoptions' tests
- **old**: Make getting an unused PID work (#22529)
- **old**: Move memfile_test.c to test/old/ (#22567)
- **old**: Unskip working tests on Windows (#22650)
- **shada**: Fix shada syntax definitions test
- **statuscolumn**: Add more tests for wrapped lines (#21718)
- **statuscolumn**: %l should follow default wrap behavior (#21766)
- **statuscolumn_spec**: Remove unnecessary feed('lh')
- **statusline**: UI elements are not redrawn on K_EVENT unnecessarily
- **syn_attr_spec**: Add more information (#21912)
- **termxx_spec**: Fix TermClose bdelete test flakiness (#22463)
- **treesitter/parser_spec**: Correct time unit (#22471)
- **tui_spec**: Don't use nested terminal for resize at startup (#21583)
- **tui_spec**: Avoid race between nvim_paste and nvim_input (#21639)
- **tui_spec**: Improve cursor_address test (#21700)
- **tui_spec**: Doesn't use Unicode in cursor_address test (#21703)
- **tui_spec**: Make rapid resize test test what it wants to test (#21933)
- **tui_spec**: Don't expect exact screen in rapid resize test (#21935)
- **tui_spec**: Remove unnecessary arguments for remote UI
- **tui_spec**: Use RPC request to setup autocommands
- **ui**: Wait for another success with failure after success
- **undo_spec**: Add more tests for writing in Insert mode
- **unit**: Use file:close() properly (#21505)
- **vim.fs.normalize**: Enable test on Windows
According to [AppStream spec](https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-id-generic),
the <id> element should contain a reverse-DNS scheme:
{tld}.{vendor}.{product}
Since the flathub requires that, the flatpak build replaces `<id>nvim</id>` with
`<id>io.neovim.nvim</id>`. That results in ID mismatch between flatpak version
and version from distribution's repositories. Because of that, software stores
are displaying two different neovims, instead of one neovim with options to
download it either from flatpak or from distribution's repos. We can use the
`<provides><id>nvim</id></provides>`, for everyone who was expecting the id to
be `nvim`.
BREAKING CHANGES
- Remove 'insertmode' 'remap' and 'terse' options
- highlight: Rename attributes to match Vim (#19159)
- highlight: Error on invalid names and allow '.' and '@'
- terminal: Drop winpty, require Windows 10 #18253
- treesitter: Use @foo.bar style highlight groups
- treesitter: Do not merge queries by default (#20105)
FEATURES
- runtime: Enable filetype.lua by default (#19216)
- Add `undo!`
- Add "prerelease" to version dict
- Click support for 'statusline', 'winbar' #18650
- Add preview functionality to user commands
- allow cmdheight=0 (EXPERIMENTAL) #16251
- Stdpath('run'), /tmp/nvim.user/ #18993
- Add 'mousescroll' option (#12355)
- Allow :wincmd to accept a count (#19815)
- Multibuffer preview support for inccommand
- Man: Port to Lua (#19912)
- api: Ui options relevant for remote TUI
- api: Add `nvim_parse_cmd` And `nvim_cmd`
- api: Support handling stdin stream in remote ui
- api: Add `group_name` to `nvim_get_autocmds`
- api: Enable nvim_exec_autocmds to pass arbitrary data (#18613)
- api: Support pattern array for exec_autocmds
- api: Add `unsilent` to command APIs
- api: Add replace_keycodes to nvim_set_keymap (#19598)
- api: Add support for :horizontal modifier
- api: Add "move" to nvim_input_mouse
- api/ui: "ui_watched" option for ui-side extmarks
- build: Add_glob_target runs only on changed files #19070
- checkhealth: Check for slow shell #17829
- defaults: Session data in $XDG_STATE_HOME #15583
- defaults: Search selection by * and # in visual mode (#18538)
- defaults: Nnoremap & :&&<CR> #19365
- defaults: enable mouse by default (set mouse=nvi) #19290
- diagnostic: Pass diagnostics as data to DiagnosticChanged autocmd (#20173)
- docs: Gen_help_html.lua
- edit: Insert an unsimplified key using CTRL-SHIFT-V
- treesitter: Full support for spelling
- filetype: Convert more patterns to filetype.lua
- filetype: Remove side effects from vim.filetype.match (#18894)
- filetype: Expand environment variables in filetype patterns (#20145)
- fs: Add vim.fs functions: parents() dirname() basename() dir() find() normalize()
- highlight: Implement CurSearch highlight
- highlight: Support scoped @spam.eggs.baked_beans groups
- input: Delay all simplifications
- l10n: Turkish translations #19441
- l10n: Improve zh_CN translations (#19483)
- lsp: Remove capabilities sanitization (#17814)
- lsp: Show feedback on empty hover response (#18308)
- lsp: Options to filter and auto-apply code actions (#18221)
- lsp: Add vim.lsp.buf.format (#18193)
- lsp: Add logging level "OFF" (#18379)
- lsp: Add LspAttach and LspDetach autocommands
- lsp: Add filter to vim.lsp.get_active_clients()
- lsp: Option to reuse_win for jump actions (#18577)
- lsp: Add a start function (#18631)
- lsp: Send didChangeConfiguration after init (#18847)
- lsp: Defaults: tagfunc, omnifunc, formatexpr (#19003, #19677)
- lsp: Allow passing custom list handler to LSP functions that return lists (#19213)
- lsp: Provide feedback if server can't compute rename result (#19546)
- lsp: Add range option to code_action; deprecate range_code_action (#19551)
- lsp: Disable exit_timeout by default (#19672)
- lsp: Add tcp support
- lua: Vim.deprecate() #18320
- lua: Vim.cmd() with kwargs acts like nvim_cmd() #18523
- lua: Allow some vim script functions to run in fast callbacks
- lua: Measure require in --startuptime
- lua: Allow vim.cmd to be indexed (#19238)
- lua: Print source locations of lua callbacks (#19597)
- lua: Add vim.iconv (#18286)
- lua: Vim.ui_attach to get ui events from lua (EXPERIMENTAL)
- man.vim: List command flags in "gO" outline #17558
- mappings: Do not replace existing mapping for simplified form
- mappings: Allow special keys and modifiers in <Cmd> mapping
- mapset: Support restoring "replace_keycodes" and "desc"
- mapset: Support restoring Lua callback (#20024)
- marks: Restore viewport on jump #15831
- nvim_create_user_command: Pass structured modifiers to commands
- pum: Pretend 'mousemoveevent' is set when showing right-click menu
- server: Set $NVIM, unset $NVIM_LISTEN_ADDRESS #11009
- server: Instance "name", store pipes in stdpath(state)
- term: Add support for libvterm >= 0.2
- terminal: Implement <c-\><c-o> for terminal mode
- terminal: Recognize underdouble and undercurl
- terminfo: Bump built-in terminfo entries (#18570)
- treesitter: Allow customizing language symbol name
- treesitter: Add ability to retreive a tree/node given a range
- treesitter: Upstream node methods from nvim-treesitter
- treesitter: Include language in invalid query error (#14053)
- treesitter: Bundle Lua parser and queries
- treesitter: Add viml parser and queries
- treesitter: Add injections
- treesitter: Add vim.treesitter.start(), enable for Lua
- treesitter: Bundle :help parser and queries
- tui: Query terminal for CSI u support (#18181)
- tui: Recognize keypad keys when using kitty keyboard protocol
- tui: Try terminfo for [re]set_cursor_color OSC #19255
- tui: Allow grid and host to disagree on ambiguous-width chars (#19686)
- tui: Recognize sidescroll events (#19992)
- tui: Support 'mousemoveevent'
- ui: Add `'winbar'`
- ui: Clear message history explicitly with msg_history_clear event
- ui: Make right-click menu work properly with ext_multigrid
- ui: Allow to set the highlight namespace per window
- ui: Use msg_grid based implementation for cmdheight=0
- ui-ext: Make 'mousemoveevent' a ui_option
- eval: Make Lua Funcref work as method and in substitute() (#20217)
- eval: Input() support any type for "cancelreturn" in a dict (#19357)
BUG FIXES
- Show autocmd output when F is in shortmess (#18251)
- Has() should preserve v:shell_error #18280
- Suppress "is a directory" messages with shortmess 'F' (#18296)
- Display global statusline correctly with ext_messages
- Correct nlua_wait error message #18867
- Right-click in clickable statusline #19252
- Remote UI may get invalid 'pumblend' value #19379
- Assertion failure when requiring missing module in autocmd
- api: Nvim_eval_statusline should validate input #18347
- api: Check error after getting win/buf handle (#19052)
- api: Check for inclusive buffer line index out of bounds correctly (#19056)
- api: Change default value of 'pattern' in nvim_exec_autocmds (#19115)
- api: Do not switch win/buf if getting option in current win/buf (#19383)
- api: Make nvim_set_hl(ns=0, ...) redraw screen properly
- api: Nvim_set_hl bail out on invalid group name (#20021)
- api: Notify dict watchers on nvim_set_var and vim.g setter
- api/command: Fargs behavior when no arguments are passed (#19862)
- autocmds: Separate command from desc (#18617)
- buffer: Disable buffer-updates before removing from window #18933
- build: Missing definitions for sizeof macros #16393
- build: Only pass -municode if MINGW #19049
- build: Strip trailing newline from variable (#19084)
- build: Don't disable byte precompilation on debug builds
- build: Fails if git is missing #19366
- charclass: Make behavior with empty str match latest Vim (#19749)
- checkhealth: Skip vim.health #18816
- ci: Remove 2000ms blocking wait in many plugin/lsp_spec.lua tests
- cmd: Make :-tabmove work with modifiers (#18447)
- cmdheight=0: Various issues part3 #19816
- cmdline: Fix passing -1 as char
- cmdline: Trigger CmdlineEnter and ModeChanged earlier (#19474)
- cmdline: Do not trigger completion at wrong time (#19920)
- cmdline: Don't send invalid cursor with incsearch and cmdheight=0
- column: Move sign sentinel after inserting/deleting lines (#20400)
- completion: Remove wrong FUNC_ATTR_NONNULL_ALL (#19627)
- diagnostic: Use nvim_exec_autocmds to trigger DiagnosticChanged (#18188)
- diagnostic: Check for negative column value (#18868)
- diagnostic: Remove buf from cache on `BufWipeout` (#20099)
- diagnostic: Populate data key in DiagnosticChanged autocmd in reset (#20207)
- docs: Correct obsolete note about 'writedelay' in dev docs
- docs: Remove internal function from docs
- edit.c: Indentkeys double indent after "!" #12894
- eval: Check for v:lua when calling callback (#19855)
- eval/f_getmatches: Return empty list for invalid win argument (#18893)
- events: Make CursorHold behave as documented
- ex_cmds: Correct flags for :const (#19387)
- exceptions: Restore `did_throw` (#20000)
- exmode: Do not throttle messages when pressing enter to print line
- extmarks: Make virt_lines always start at 0 virtcol
- filetype: Fix and improve filetype patterns
- fillchars: Change fallback after setcellwidths()
- float: Make `screen*()` functions respect floating windows
- float: Fix glitch when making float window with border a split
- float: Fix mouse drag position if float window turned to a split
- folds: Fix fold regression with :move (#18685)
- folds: Fix fold remains when :delete makes buffer empty (#19673)
- ftdetect: Source plugins in autogroup (#18237)
- gen_vimdoc.py: Handle missing luajit
- getchar: Flush screen before doing a blocking wait
- handlers: More specific error messages (#16772)
- health: Correct shada file path #18603
- health: Handle non-existent log file #18610
- highlight: Use ctermbg/fg instead of bg/fg when use_rgb=false #18982
- highlight: Add missing 'nocombine' to nvim_get_hl apis (#19586)
- highlight: Set the window namespace when redrawing statusline
- hl: Set Normal hl group sg_attr value #18820
- hl: Return cterm fg/bg even if they match Normal #18981
- inccommand: Do not try to preview an ambiguous command (#18827)
- inccommand: Avoid crash if callback changes inccommand option (#18830)
- inccommand: Clear cmdpreview state if preview is not shown (#18923)
- inccommand: Skip split window if not enough room #18937
- inccommand: Never preview if parsing command failed (#18944)
- inccommand: Parse the command to check if it is previewable
- inccommand: Deal with unsynced undo (#20041)
- input: Allow Ctrl-C to interrupt a recursive mapping even if mapped (#18885)
- input: Fix macro recording with ALT and special key (#18917)
- input: Use correct grid when restoring cursor for <expr> mapping (#19047)
- input: Do no reinterpret mouse keys with ALT modifiers
- input: Use click number of last click for mouse drag (#20300)
- inspect: Escape identifiers that are lua keywords (#19898)
- keywordprg: Default to :help if set to empty string (#19983)
- l10n: Improve zh_CN and zh_TW translations (#19969)
- log: Back even again
- logging: Skip recursion, fix crash #18764
- logging: Make logmsg() thread-safe again
- logging: Try harder to resolve Nvim "name" #19016
- lsp: Unify progress message handling (#18040)
- lsp: Fix unnecessary buffers being added on empty diagnostics (#18275)
- lsp: Fix infinite loop in resolved_capabilities deprecation message (#18333)
- lsp: Add missing bufnr argument (#18382)
- lsp: Fix rename capability checks and multi client support (#18441)
- lsp: Detach spawned LSP server processes (#18477)
- lsp: Perform client side filtering of code actions (#18392)
- lsp: Only send diagnostics from current buffer in code_action() (#18639)
- lsp: Respect global syntax setting in open float preview (#15225)
- lsp: Include cancellable in progress message table (#18809)
- lsp: Adjust offset encoding in lsp.buf.rename() (#18829)
- lsp: Set buflisted before switching to buffer (#18854)
- lsp: Fix multi client handling in code action (#18869)
- lsp: Small bugs in snippet-parser #18998
- lsp: Pcall nvim_del_augroup_by_name (#19302)
- lsp: Abort pending changes after flush when debouncing (#19314)
- lsp: Don't attach a client in lsp.start() if there is none (#19328)
- lsp: Account for initializing servers in vim.lsp.start (#19329)
- lsp: Move augroup define to if statement (#19406)
- lsp: Set workspace.configuration capability (#19548)
- lsp: Send didOpen if name changes on write (#19583)
- lsp: Prevent unexpected position jumps (#19370)
- lsp: Avoid ^M character in hover window on Windows (#19640)
- lsp: Set end_col in formatexpr (#19676)
- lsp: Handle multiple clients with incremental sync (#19658)
- lsp: Fix some type annotations in lsp.rpc (#19714)
- lsp: Avoid pipe leaks if lsp cmd isn't executable (#19717)
- lsp: Handle nil client in onexit callback (#19722)
- lsp: Fix nil value error in get_group (#19735)
- lsp: Clean the diagnostic cache when buffer delete (#19449)
- lsp: When buffer detach remove buffer from client attached buffers (#20081)
- lsp: Schedule removal of client object (#20148)
- lsp: Support `false` result in handlers (#20252)
- lsp: Out of bounds error in lsp.util.apply_text_edits (#20137)
- lsp: Use correct function name in deprecated message (#20308)
- lsp: Create missing directory before creating file (#19835)
- lua: Don't mutate opts parameter of vim.keymap.del (#18227)
- lua: Stop pending highlight.on_yank timer, if any (#18824)
- lua: Highlight.on_yank can close timer in twice #18976
- lua: Clear got_int when calling vim.on_key() callback (#18979)
- lua: Don't leak memory on error
- lua: Double entries in :lua completion #19410
- lua: Make it possible to cancel vim.wait() with Ctrl-C (#19217)
- lua: Make ui_attach()/ui_detach() take effect immediately (#20037)
- lua: Make vim.str_utfindex and vim.str_byteindex handle NUL bytes
- lua: Free vim.ui_attach callback before lua close (#20205)
- lua: Fix architecture-dependent behavior in usercmd "reg" (#20384)
- mac: Use same $LANG fallback mechanism as Vim
- mac: Add CoreServices to flake.nix #18358
- man.vim: Q in "$MANPAGER mode" does not quit #18443
- maparg: Remove double allocation (#20033)
- mappings: Fix double-free when unmapping simplifiable Lua mapping
- mapset: Remove existing abbreviation of same lhs (#20320)
- mark: Set mark fnum from buffer (#19195)
- mark: Mark without a view restores at topline #19224
- mark: Fix unexpected cursor movements (#19253)
- mark: Give correct error message when mark is in another buffer (#19454)
- menu: Make :menu still print header when there are no menus
- messages: Add color when showing nvim_echo in :messages history
- messages: Do not crash on cmdheight=0 and g< redisplay
- messages: Validate msg_grid before silent! message with cmdheight=0
- mksession: Don't store floats in session #18635
- mouse: Click on global statusline with splits (#19390)
- mouse: Fix using uninitialized memory with K_MOUSEMOVE (#19480)
- mpack: Make sure a `bool` always is a `bool`
- normal: Fix segfault with bracket command jumping to a mark
- options: Properly free string options (#19510)
- options: Mark `winhighlight` as list style (#19477)
- packaging: Remove excess forward slash in Wix Patch (#18121)
- paste: Ignore mappings in Cmdline mode (#18114)
- path: Path_is_url returns false for "foo:/" #19797
- powershell: Filter ":!" commands with args #19268
- pum: Make right drag in anchor grid to select work in multigrid UI (#19382)
- query: Fix unnatural order for inherits in treesitter queries (#20298)
- redraw: Make sure :redraw! redraws command line
- redraw: Handle switching to a tabpage with larger p_ch value
- redraw: Avoid unnecessary redraws and glitches with floats+messages
- redraw: Make redrawdebug=nodelta handle all the cases
- rpc: Break nvim_error_event feedback loop between two nvim instances
- runtime/genvimvim: Omit s[ubstitute] from vimCommand #18480
- screen: Restart win_update() if a decor provider changes signcols (#18768)
- screen: Check for col instead of vcol when drawing fold (#19572)
- session: Respect sessionoptions=terminal #19497
- shared: Avoid indexing unindexable values in vim.tbl_get() (#18337)
- signs: Priority of extmark signs (#19718)
- source: Make changing 'shellslash' change expand() result
- source: Fix expand('<sfile>') no longer works for Lua
- spell: Make setting 'encoding' clear word list
- spell: Correct spell move behavior without "noplainbuffer" (#20386)
- startup: Nvim with --clean should not load user rplugins
- substitute: Subtract number of backslashes later
- tabpage: Check if ROWS_AVAIL changed for resize (#19620)
- terminal: Invalid pointer comparison #18453
- terminal: Do not trim whitespace that is actually in the terminal (#16423)
- terminal: Scrollback delete lines immediately #18832
- terminal: Coverity USE_AFTER_FREE #18978
- terminal: Crash if TermClose deletes own buffer #19222
- terminal: Avoid reading over the end of cell.chars (#19580)
- terminal: Skip aucmd_win when checking terminal size (#19668)
- terminal: Adopt altscreen test for libvterm 0.2 changes
- terminfo: Disable smglr for vtpcon and conemu (#18855)
- termopen: Avoid ambiguity in URI when CWD is root dir (#16988)
- tests: Fix some screen.lua warnings
- tests: Fix some issues with ui/inccommand_spec.lua causing slowness
- tests: Unreliable parser_spec #18911
- tests: Check for EOF on exit of nvim properly
- tests: Missing clear() #18927
- tests: Remove misleading $TEST_PATH segment #19050
- tests: Remove irrelevant usage of display-=msgsep
- tests: Use pending_c_parser when needed
- tests: Indicate in test logs when nvim exit times out
- tmpdir: Invalid tempname() if username has slashes #19323
- treesitter: Create new parser if language is not the same as cached parser (#18149)
- treesitter: Bump match limit up
- treesitter: Offset directive associates range with capture (#18276)
- treesitter: Correct region for string parser (#18794)
- treesitter: New iter if folded
- treesitter: Don't error when node argument of predicate is nil (#19355)
- treesitter: Free memory on removing parser (#19933)
- treesitter: More efficient node:root()
- treesitter: Make it get_captures_at_position
- treesitter: Do not link @error by default
- treesitter: Don't support legacy syntax in start()
- treesitter: Use the right loading order for base queries (#20117)
- treesitter: Prevent endless loop on self-inheritence
- treesitter: Return full metadata for get_captures_at_position (#20203)
- ts: Do not clobber spelloptions (#20095)
- tui: Update modifyOtherKeys reporting (#18158)
- tui: Disable extended keys before exiting alternate screen (#18318)
- tui: Piping nodejs to nvim breaks input handling #18932
- tui: Resize at startup #17795
- tui: Add fixups for hterm family #19078
- tui: Handle padding requirements for visual bell (#20238)
- ui: Require window-local value to show winbar on floating windows (#18773)
- ui: Do not call showmode() when setting window height (#18969)
- ui: Set redraw_cmdline when setting window height (#19630)
- ui: Don't allow decor provider with ns_id==0
- ui: Ui compositor does not correctly free event callbacks
- ui: Allow redrawing statusline when msgsep is used (#20337)
- ui: Redraw end of buffer if last line is modified (#20354)
- unittests: Coredump when running unit tests #18663
- usercmd: Also check for whitespace after escaped character (#19942)
- version.c: Mark N/A vim patches #18587
- vim.ui.input: Accept nil or empty "opts" #19109
- window: Close floats first when closing buffer in other tab (#20284)
- window: Fix equalization with cmdheight=0 (#20369)
- windows: Stdpath("state") => "nvim-data" #18546
- windows: Exepath, stdpath return wrong slashes #19111
- winhl: Do not crash when unsetting winhl in just opened window
- Make :undo! notify buffer update callbacks (#20344)
- eval: Make Vim functions return inner window width and height (#19743)
BUILD SYSTEM
- Bump Doxyfile to minimum required version 1.9.0 #18118
- Bump msgpack to 4.0.0
- Enable EXITFREE on Debug builds (#17783)
- Add formatting targets for c and lua files (#19488)
- clang-format: Align with project style #18192
- clint: Remove all python2-isms with pyupgrade
- clint: Remove "function size is too large" warning
- clint: Remove rules for includes, whitespace, tabs #18611
- cmake: Simplify and speed up the uninstall target
- cmake: Simplify def_cmd_target function
- cmake: Use glob_wrapper instead of file(GLOB in main CMakeLists
- cmake: Fix static `libintl` test on macOS
- deps: Bump LuaJIT, Luv and libuv
- deps: Support universal builds on macOS
- deps: Bump tree-sitter to v0.20.7 (#20067)
- deps: Bump tree-sitter parsers
- deps: Bump required libvterm to v0.3 (#20222)
- deps: Require libtermkey version 0.22
- deps: update neovim-qt, win32tools.zip
PERFORMANCE
- Only redraw for CurSearch when it is currently in use
- highlight: Allocate permanent names in an arena for fun and cache locality
- highlight: Use binary search to lookup RGB color names
- map: Visit only one hash bucket instead of all, like an actual hash table
- memory: Get rid of extraneous heap allocations
- memory: implement arena memory allocation with a shared freelist
- memory: Use an arena for RPC decoding and some API return values
- messages: Don't call ui_flush() per message line in various places
- treesitter: Use a reuse list for query cursors
- ui: Reduce allocations when encoding and decoding "redraw" events
- ui: Avoid ui_flush() work in headless mode
REFACTOR
- checkhealth: Rename to vim.health, move logic to Lua #18720
- Add pure attribute to pure functions
- Replace char_u variables and functions with char
- Enable -Wconversion warning for all Nvim source files
- Add warnings for deprecated functions (#18662)
- Change type of linenr_T from long to int32_t
- Use nvim_get/set_option_value for vim.{b,w}o
- Remove functions marked for deprecation in 0.8 (#19299)
- Rename function prefix mb to the more accurate utf_cp (#19590)
- Remove some unused includes
- Change remaining sourcing_name/sourcing_lnum to exestack
- Change FALSE/TRUE to false/true
- api: Use a hashy hash for looking up api method and event names
- api: Use a unpacker based on libmpack instead of msgpack-c
- api: restructure api/vim.c and api/private/helpers.c code in separate files
- api: Remove redundant fields of CmdParseInfo
- aucmd: Call define_autocmd() directly for default autocmds
- ci: Cleanup release.yml #19132
- cmd: Format do_one_cmd()
- cmd: Hoist out some code into functions
- cmd: Unify execute_cmd with do_one_cmd
- decor: Use decor levels properly
- drawline.c: Factor out utf8 multibyte check
- eval: Use Hashy McHashFace instead of gperf
- eval.c: Resolve all clint issues (#19774)
- eval/funcs.c: Resolve all clint errors
- events: Remove unnecessary fudging of updating_screen
- ex_cd: Add an early return to fix clint warning
- ex_docmd.c: Resolve most clint errors (#19775)
- filetype: Allow vim.filetype.match to accept buf and filename (#19114)
- highlight: Make hlattrs2dict always use pre-allocated dict
- log: Simplify log_path_init #18898
- log: Use msg_schedule_semsg #18950
- lsp: Remove redundant client cleanup (#18744)
- lsp: Make the use of local aliases more consistent
- lsp: Use autocmd api (#19407)
- lsp: Factor out read_loop function
- lsp: Encapsulate rpc uv handle
- lsp: Extract rpc client from rpc.start
- lua: Replace hard-coded gsub with vim.pesc() (#18407)
- lua: Reformat with stylua 0.14.0 (#19264)
- lua: Git-blame-ignore stylua update PR (#19273)
- lua: Replace vim.cmd use with API calls (#19283)
- map: Simplify free_all_mem handling
- map: Statically initialize maphash array
- map: Simplify add_map params
- normal: Convert function comments to doxygen format
- object: Get rid of redundant FIXED_TEMP_ARRAY
- ops: Doxygen docstrings #17743
- option: DRY get/set option value #19038
- plines: Use a struct for chartabsize state
- provider: Use list comprehension #19027
- regexp_nfa.c: Match where Vim calls fopen() (#18778)
- runtime: Convert dist#ft functions to lua (#18247)
- runtime: Convert more dist#ft functions to lua (#18430)
- runtime: Convert the remaining dist#ft functions to lua (#18623)
- runtime: Port remaining patterns from filetype.vim to filetype.lua (#18814)
- runtime: Refactor filetype.lua (#18813)
- runtime: Port scripts.vim to lua (#18710)
- setcellwidths: Use TV_LIST_ITEM_NEXT properly
- signs: Handle non-sign attrs separately (#19784)
- tests: Introduce testprg()
- treesitter: Get_{nodes,captures}_at_{position,cursor}
- typval: Change FC_CFUNC abstraction into FC_LUAREF
- ui: Simplify stdin handling
- uncrustify: Format all c code under /src/nvim/
- vim.opt: Remove del arg
- vim.opt: Unify vim.bo/wo building
- vim.opt: Optimize append/prepend/remove
- Format runtime with stylua
BREAKING CHANGES
* Support for Python 2 is dropped. For Python 3, the minimum supported version is 3.6. Legacy `:pythonx` commands are still available, and always uses the python 3 provider.
* api: Existing usages of `nvim_buf_set_text` that use negative line numbers will be off-by-one.
* highlight: signature of `vim.highlight.range` was changed.
* input: distinguish between some input keys which previously were synonyms. This will break some exiting mappings.
- `<cr>`, `<tab>` and `<esc>` are no longer considered equivalent to `<c-m>`, `<c-i>` and `<c-[`> respectively. In case the terminal or GUI supports distinguishing these keys, these can now be mapped separately. But even if the terminal only can send one code you might still need to change what variant is used in the config.
FEATURES
Core APIs:
* api: add support for lua function & description in keymap
* api: add api and lua autocmds
* api: nvim_clear_autocmd
* api: pass args table to autocommand callbacks
* api: remove Lua autocommand callbacks when they return true
* api: implement nvim_{add,del}_user_command
* api: implement nvim_buf_get_text
* api: add nvim_get_option_value
* highlight: ns=0 to set :highlight namespace
* highlight: support for blend in nvim_set_hl
* api: add strikethrough, nocombine to set_hl
* api: relax statusline fillchar width check
Lua:
* lua: add vim.keymap
* lua: add vim.spell
* lua: add proper support of luv threads
* lua: make :lua =expr print result of expr
* lua: handle lazy submodules in `:lua vim.` wildmenu completion
* lua: add notify_once()
* lua: add support for multiple optional types in vim.validate
* lua: show proper verbose output for lua configuration
* lua: more conversions between LuaRef and Vim Funcref
* lua: support converting nested Funcref back to LuaRef
* call __tostring on lua errors if possible before reporting to user
* filetype.lua
* filetype.lua: add support for files under .git
* filetype.lua: add support for patch files
* filetype.lua: add support for tmux.conf files
* filetype.lua: add support for txt files
* filetype.lua: Add typescript extension to filetype detection
* filetype.lua: fix .cc file not detected
* filetype.lua: fix .env file not detected
* filetype: convert patterns for mail buffers
* filetype: support scripts.vim with filetype.lua
UI and decorations:
* decorations: support signs
* extmarks: add strict option
* api: expose extmark more details
* api: expose extmark right_gravity and end_right_gravity
* use nvim_buf_set_extmark for vim.highlight
* statusline: support multibyte fillchar
* add support for global statusline
Treesitter:
* ui: allow conceal to be defined in decorations and tree-sitter queries
* tree-sitter: allow Atom-style capture fallbacks
* treesitter: add more default groups to highlight map
* treesitter: multiline match predicates
* treesitter: set allocator when possible
* ts: add support for multiline nodes in get_node_text
* ts: expose minimum language version to lua
* runtime: add query filetype
LSP and diagnostic:
* diagnostic: add "code" to the diagnostic structure
* diagnostic: allow retrieving current diagnostic config
* lsp,diagnostic: open folds in jump-related functions
* lsp: add buf_detach_client
* lsp: add handler for workspace/workspaceFolders
* lsp: dynamically generate list title in response_to_list
* lsp: enable default debounce of 150 ms
* lsp: skip or reduce debounce after idle
* lsp: use `vim.ui.select` for selecting lsp client
Initial work to support remote TUI (and ui client library):
* ui_client: connect to remote ui
* ui_client: implement event handlers
* ui_client: handle resize events
* ui_client: implement async paste handling
* ui_client: pass user input to remote server
* --headless: add on_print callback to stdioopen
* add autocommand event when search wraps around
* add vim.tbl_get
* autocmd: add Recording autocmds
* autocmd: populate v:event in RecordingLeave
* completion: support selecting item via API from Lua mapping
* eval/method: partially port v8.1.1993
* eval/method: partially port v8.1.1996
* eval/method: partially port v8.1.2004
* eval: partially port v8.2.0878
* eval: port emsg from v8.2.3284
* events: add DirChangedPre
* events: support SIGWINCH for Signal event
* hardcopy: check gui colours for highlights first
* highlight: support color names for cterm
* ignore nore on <Plug> maps
* input: delay some conversions to vgetc()
* input: enable <tab>/<c-i>, <cr>/<c-m>, <esc>/<c-[> pairs unconditionally
* keymap: add F38-F63 keys
* keymap: return nil from an expr keymap
* mappings: considering map description when filtering
* provider: remove support for python2 and python3.[3-5]
* remote: add basic --remote support
* runtime: import cleanadd.vim from Vim
* runtime: include Lua in C++ ftplugin
* runtime: new checkhealth filetype
* term: use vterm_output_set_callback()
* test: use nvim_exec in helpers.source()
* trigger ModeChanged for terminal modes
* tui: add error logging
* tui: add support for `CSI 4 : [2,4,5] m`
* tui: enable CSI u keys
* vim-patch.sh: support additional args for -s
Performance Improvements
* lsp: request only changed portions of the buffer in changetracking
* only redraw concealed line if cursor has moved horizontally
* pre-compile embedded Lua source into bytecode
* screen: reduce cursorline redrawing when jumping around
* treesitter: cache query parsing
* api: elide luaref copy when setting 'callback' in nvim_set_keymap
BUG FIXES
* --headless: do not block on press-enter prompts when no UI
* <Nop> not shown in :map commands
* add forkpty for SunOS variants
* add STRNLEN compatability macro
* anonymous sid not working
* api, lua: return NIL on failure to find converted function
* api/nvim_win_call: share common win_execute logic
* api: allow empty list for cterm in nvim_set_hl
* api: allow nvim_buf_set_extmark to accept end_row key
* api: convert blob to NUL-terminated API string
* api: correctly handle negative line numbers for nvim_buf_set_text
* api: correctly pass f-args for nvim_create_user_command
* api: delete all autocmds with the same ID
* api: force redefinition of user commands by default
* api: highlight attribute for underline
* api: improve autocmd error handling
* api: include event in get_autocmds
* api: make nil value in nvim_set_option_value clear local value
* api: nvim__set_hl_ns causes extra redraws
* api: nvim_win_set_cursor() redraw for cursorline and statusline
* api: re-route nvim_get_runtime_file errors
* api: use changedir_func() in nvim_set_current_dir()
* api: validate command names in nvim_add_user_command
* api: validate user_command name
* append test for checking zero width node range
* aucmd_win: always make aucmd_win the last window
* aucmd_win: ensure aucmd_win stays floating
* autocmd: clean up autocmds only when needed
* autocmd: restore autocmd showing behavior
* autoload variables not loaded with vim.g & nvim_get_var
* bounds check for underdot
* build: check for empty value of LUAC_PRG
* build: check that LuaJIT has required modules for compilation
* build: install luajit modules on windows
* channel: fix channel consistency
* check for interrupt in nvim_echo, write_msg and nlua_print
* checkhealth: make provider checkhealth output more consistent
* ci/backport: check for event_name == "pull_request_target"
* ci: provide necessary permissions for calling workflow
* clang/'Dead store': do not assign endcol
* close floating windows when calling win_close()
* completion: prevent K_LUA from closing pum
* completion: update submode message when selecting from API
* correct vertical dragging room calculation with global statusline
* coverity/175977: big parameter passed by value
* coverity/188749: nullify pointer to fix use-after-free
* coverity/340720: error if nvim_eval_statusline given invalid winid
* coverity: dead code and operands don't affect result
* decorations: do not put empty virt_text
* define NAME_MAX from _XOPEN_NAME_MAX
* diagnostic: allow setting arbitrary config values
* diagnostic: assert that diagnostics have line number and column
* diagnostic: clamp diagnostics on negative line numbers
* diagnostic: escape special chars in file names
* diagnostic: improve validation for list arguments
* diagnostic: make `open_float` respect global diagnostic options
* diagnostic: only set default handler config if unset
* diagnostic: resolve nil opts tables
* diagnostic: respect "if_many" source option for virtual text
* diagnostic: set effective buffer number for DiagnosticChanged autocmd
* diagnostic: set effective buffer number in autocmd (again)
* diagnostic: use botright copen for qflist
* diff: make algorithm work for vim.diff
* do not cast offset to char_u
* do not pass aucmd to the callback
* do not save K_EVENT as lastc in Insert mode
* docs: add bufnr and user_data to diagnostic-structure
* docs: spelling in new underlines docs
* don't include pty.h on SunOS
* don't use cfsetspeed, use i and o variants
* enable filetype detection and syntax highlighting with --clean
* eval/method: add missing method support for existing built-ins
* eval: v:lua support for `-` in module names
* event-loop: call vpeekc() directly first to check for character
* event-loop: check if executed register has ended
* event-loop: duplicate display updating logic in vgetorpeek()
* events: make v:event readonly in more events
* ex_normal: spam \n in Ex mode only if in Cmdline mode
* extmarks: fix signs
* extmarks: splice extmarks on accepting spell
* filetype.lua: always return a string in getline helper function
* filetype: expand tildes in filetype patterns
* filetype: fix foam pattern detection
* filetype: match negative priority patterns after extensions
* filetype: match on <afile> rather than <abuf>
* filetype: normalize slashes in file paths
* filetype: set default ft_ignore_pat in filetype.lua
* float: do not switch window before deleting last listed buffer
* float: don't always switch window when deleting last listed buffer
* float: handle buffer deletion with floating windows
* float: make laststatus=1 behave consistently with floating windows
* healthcheck: handle empty reports
* health: do not run external processes in a shell
* highlight: accept NONE as a color name
* highlight: allow globals to be cleared
* highlight: always update window highlight if highlight changed
* inccommand: do not change reg_prev_sub when previewing
* input: do not translate scroll keys into multiclicks
* input: fix clearing of reg_executing
* input: never escape CSI bytes
* input: put modifiers back into typeahead buffer when needed
* input: remove reinterpreted ALT/META chords from recorded macro
* keymap: don't coerce false to ''
* keywordprg: retain terminal buffer after K
* line continuation: set growsize to correct value
* lsp and diagnostic highlight priority
* lsp: always split text edits on \r, \r\n, and \n
* lsp: always use target bufnr in location handler
* lsp: avoid attaching to unloaded buffers
* lsp: avoid nil workspace/symbol query
* lsp: call config on_exit handler before context is cleared
* lsp: correct prefix when filterText is present
* lsp: correctly align start and end range to codepoints during incremental sync
* lsp: create lsp requests with position offsets considering client encoding
* lsp: ensure pending changes are flushed on skipped debounce
* lsp: explicitly pass bufnr in didSave handler
* lsp: fetch offset_encoding from client in references
* lsp: fix `nil`-index behavior for UTF-8 in `_str_*index_enc` methods
* lsp: fix applying multiple out-of-range TextEdits
* lsp: fix lookup of boolean values in workspace/configuration
* lsp: forward offset_encoding in rename handler
* lsp: forward offset_encoding to apply_text_edits
* lsp: handle insertion of previous line
* lsp: handle negative activeSignature in signatureHelp
* lsp: only send valid params in executeCommand
* lsp: pass offset_encoding in formatexpr()
* lsp: progress handlers should return vim.NIL on error
* lsp: resolve bufnr for get_lines
* lsp: resolve nil bufnr
* lsp: respect all of 'fixeol', 'eol', and 'binary' applying edits
* lsp: set tabSize from 'shiftwidth', not 'softtabstop'
* lsp: start incremental sync range at previous newline character
* lsp: strictly enforce passing offset encoding
* lsp: suppress ContentModified errors from UI
* lsp: use "text" filetype for plaintext
* lsp: use botright copen for all handlers
* lua: don't use nlua_error when exiting early
* lua: print multiple return values with =expr
* lua: restore priority of the preloader
* lua: stricter type check when calling API function
* make mode() return correct value in ex mode
* man.vim: fix search function on some systems
* man.vim: support calling :Man without a section again
* msgpack#strptime: use calendar.timegm to get seconds since epoch
* ops: str_to_reg passing NULL to memcpy
* options: disallow empty 'fdc' and 'scl'
* paste: avoid edges cases caused by empty chunk
* paste: deal with eol and eof in Visual mode
* paste: deal with trailing new line in chunk
* paste: don't move cursor past the end of pasted text in Normal mode
* paste: escape control characters in Cmdline mode
* paste: use getcmdtype() to determine whether in cmdline mode
* prompt: add missing changes from v8.1.0036
* pty_process_win/wait_eof_timer_cb: also check for proc->out.did_eof
* pum_redraw: use grid_puts_len() to truncate the text
* PVS/V1019: compound assignment expression is used inside condition
* PVS/V560: ignore false "conditional expression is always false"
* PVS/V583: the '?:' operator always returns one and the same value
* query.lua: check empty table for lines
* quickfix: avoid O(N^2) when filling from string typval
* remote: make compile again
* remote: report connection error, missing return values
* remote: report on missing wait commands, typecheck lua results
* remote: respect silent in error reporting
* remote: use STATIC_CSTR_AS_STRING
* resolve nil arguments to API functions
* respect os_proc_children rv of pid not found
* runtime: add missing release metadata
* runtime: add syntax file for query
* runtime: check markdownError before syn-clear
* screen: do not do syntax highlighting at filler or folded lines
* screen: do not draw filler lines post eof if already at last row
* screen: do not update syntax_last_parsed when drawing folded line
* screen: don't put empty sign text in line number column
* screenpos, float: add top and left border adjustment
* screen: truncate double-width character correctly
* screen: truncate when overwriting right half of a double-width char
* set nested before executing callback
* set RedrawingDisabled before entering aucmd_win
* signcol: always trigger a redraw
* signcol: handle edge case with maximum value
* signcol: update cursor when signcol changes
* skip libutil on SunOS
* substitute: properly check for empty command line
* syntax.c: correct hunk from Vim patch 8.0.0647
* syntax: remove trailing spaces in vim.vim
* tabpage: correct check for failure to close window
* termdebug: handle exiting during startup properly
* terminal: correctly forward mouse events
* terminal: fix resize crash with pending scrollback
* terminal: ignore left-release mouse action
* terminal: return early if there are no invalid rows
* terminal: use coladvance() to calculate buffer cursor position
* test: only use buffer completion in popupmenu timer test
* tests: update legacy tab switch test to be sane
* translation: po file for Russian
* translation: po file for Ukrainian
* ts: escape lang when loading parsers
* tui: avoid using uninitialized memory in kitty
* tui: correct CSI sequence
* tui: end streamed paste correctly when key buffer is empty
* tui: remove `ESC NUL` forced escape
* ui: close floating window on BufLeave event
* ui: inccomand performance degradation
* ui: make window resize commands manage cmdheight
* update last cursor on first CursorMoved
* uri: change scheme pattern to not include the comma character
* use normal! <C-L> in default <C-L> mapping
* vim-patch.sh: fix N/A files patterns
* win_close: count the window the be closed instead of curwin
* win_split_ins: do not fail when oldwin is not valid
BREAKING CHANGES
* 32-bit windows builds are no longer provided.
* **build deps**: use libuv 1.42.0 upstream for WIN32 (#15889) (f6c0a37), closes#15889
* removes Windows 7 support
* removes support for mouse and alternate buffers in TUI for Windows 8 and 8.1
* **lsp/diagnostic:** highlight groups and signs for LSP diagnostics renamed (e.g. `LspDiagnosticsDefaultWarning` to `DiagnosticWarn`) (a5bbb93)
* **diagnostic:** make DiagnosticChanged a first class autocmd (#16098) (150a592), closes#16098
* `au User LspDiagnosticsChanged` autocommands are not supported. Use the new first-class DiagnosticChanged event instead.
* **lua**: `register_keystroke_callback` => `on_key` (#15460) (69fe427)
* **note**: this breaking change was included in 0.5.1
FEATURES
* **:source, nvim_exec:** defer script item creation until s:var access (da9b0ab)
* **:source, nvim_exec:** support script-local variables (d4ed51e), closes#13143#11507
* **lua:** add trimempty optional parameter to vim.split (5fa26e2)
* **lua:** add vim.str_utf_{start,end} (#16129) (2230b57)
* **lua:** add vim.str_utf_pos function (d752cbc)
* **lsp:** aggregate code actions from all clients (#15121) (c36df20)
* **api:** add lua C bindings for xdiff (#14536) (3d3c0c6)
* **api:** evaluate statusline string #16020 (9086938)
* **api:** named marks set, get, delete #15346 (49fdc62)
* **api:** nvim_get_chan_info: include "argv" for jobs #15537 (0603eba), closes#15440
* **api:** win_viewport also sends line_count #15613 (086631c)
* **api:** support :terminal input callback in lua (9e41e82)
* **ci:** add backport PR action (#14766) (6cc456d)
* **decorations:** allow more than one stacked highlight in a virt_text (1495d36)
* **decorations:** support virtual lines (392c658) (8d7816c)
* **diagnostic:** move vim.lsp.diagnostic to vim.diagostic and support other sources (a5bbb93)
* **diagnostic:** add 'prefix' option to open_float (#16321) (3c74ba4)
* **diagnostic:** add option to include diagnostic source (d43151e)
* **diagnostic:** allow 'prefix' option to return highlight (cc48837)
* **diagnostic:** allow customized diagnostic messages (#15742) (d999c96)
* **diagnostic:** match(), tolist(), fromlist() #15704 (e61ea77)
* **diagnostic:** update jumplist on goto_next/prev (#15942) (b55944e)
* **diagnostic:** use `scope = 'line'` by default for `open_float()` (#16456) (217f9f8), closes#16453
* **diagnostic:** support severity_sort (32c0631)
* **checkhealth:** provide function for command line completion (8b43b07)
* **f_chansend:** support Blob data argument (7e9ea08)
* **job:** add parameter to close stdin (eb7f24b)
* **keywordprg:** use :terminal for external commands #15398 (a90513c), closes#2995#2761
* **lsp:** add 'focus' option to open_floating_preview (#16465) (fff8827)
* **lsp:** add a registry for client side code action commands (6c03601)
* **lsp:** add client command support to codelens (#15820) (19a77cd)
* **lsp:** add codeAction/resolve support (#15818) (ec4731d)
* **lsp:** add exit_timeout flag (#16070) (80456cf)
* **lsp:** add formatexpr (#16186) (52fa1d2)
* **lsp:** add lsp healthcheck (e268026)
* **lsp:** add per-client commands (#16101) (519d8de)
* **lsp:** add tagfunc (#16103) (f940e7a)
* **lsp:** add warning message for large log size (e6777a7)
* **lsp:** allow configuring zindex for floating windows (#15086) (c487a73)
* **lsp:** allow diagnostics to be disabled for a buffer (#15134) (1aeb945)
* **lsp:** allow root_dir to be nil (#15430) (ff0833c)
* **lsp:** highlight active parameter in signature help (#15018) (af26371)
* **lsp:** improve vim.lsp.util.apply_text_edits (#15561) (41cfba6)
* **lsp:** include original request params in handler ctx (187579f)
* **lsp:** jump to diagnostics by position (#14795) (ea39ff5)
* **lsp:** Make line diagnostics display prettier (e43dbfd)
* **lsp:** make list handlers configurable (#15199) (3e00d4f)
* **lsp:** support textDocument/prepareRename (#15514) (c1f573f)
* **lsp:** use uv_spawn to check if server executable (#16430) (1a60580)
* **lsp:** use vim.ui.select() in codelenses (#16004) (e7ea54a)
* **lsp:** utilize textEdit.range for startbyte in omnifunc (#15957) (e9d6f7c)
* **lua:** add lua-cjson as vendored dependency (8decc9f)
* **lua:** add vim.mpack for msgpack support in lua (eaf661d)
* **lua:** allow passing handles to vim.b/w/t (6c5e7bd)
* **lua:** convert binary string with NULs to Blob (de9df82)
* **lua:** document support of packages with v:lua syntax (9dd371b)
* **lua:** enable stack traces in error output (#16228) (03b805a)
* **lua:** expose lua-cjson as vim.json (30fed27)
* **lua:** make vim.mpack support vim.NIL and vim.empty_dict() (0f59666)
* **match:** allow hl group to be defined after :match command (fca52f5)
* **msgpack:** convert Blobs to BIN strings (af6f454)
* **health:** support lua healthchecks (9249dcd), closes#15632
* **shada:** restore Blob globals properly (ef729fb)
* **terminal:** TermClose: set exit code in v:event.status #15406 (50b30de), closes#4713
* **treesitter:** add next, prev sibling method (1400841)
* **treesitter:** allow to set highlight priority for queries (242608e)
* **ui:** add `opt.kind` to `vim.ui.select` (#15838) (7ae86c1)
* **ui:** add vim.ui.input and use in lsp rename (#15959) (16d4af6)
* **ui:** add vim.ui.select and use in code actions (#15771) (63fde08)
* **vim script:** support calling v:lua as a method (b2994e3)
CHANGES
* **defaults:** auto-create backup dir (4600193)
* **defaults:** inccommand=nosplit #15395 (7215d35)
* **defaults:** set undo points in <C-U> and <C-W> (#15400) (2cb8db3)
* **defaults:** limit syntax cost on CmdwinEnter #15401 (622a36b), closes#6289#6399
* **defaults:** map CTRL-L to search highlights, update diffs #15385 (0aa8128)
* **defaults:** map Y to y$ #13268 (5a111c1), closes#416#6289
* **defaults:** remove 'options' from viewoptions #15397 (3954537), closes#6289
* **defaults:** set hidden (f6c72b7)
* **defaults:** set nojoinspaces (d417e67)
* **defaults:** switchbuf=uselast #15394 (4ba7495)
* **runtime:** add packages as `"/pack/*/start/*"` patterns to &rtp (9df7e02)
* **startup:** load builtin plugins with --clean #15893 (c7a63f3), closes#15605
* **terminal:** set cursorlineopt=number in terminal mode (#15493) (c61a386)
* **window:** skip non-focusable floats for :windo (#15378) (e8631cb)
PERFORMANCE IMPROVEMENTS
* **api:** avoid spurious allocations when converting small objects (705e8f1)
* **highlight:** use a hashtable for highlight group names (bb4b4d7)
* **lua:** optimize vim.deep_equal #15236 (4b452d4)
* **lua:** don't use regexes inside lua require'mod' (ea2023f), closes#15147#15497
* **lsp:** improve json deserialization performance (#15854) (912a6e5)
* **map:** reduce double pointer indirection to single pointer indirection (9e651a9)
* **treesitter:** avoid string lookup of highlight name in hot loop (2460f0a)
FIXES
* **:source, nvim_exec:** handle Vimscript line continuations #14809 (6188926), closes#14807
* **:source:** copy curbuf lines to memory before sourcing #15111 (afdc9e6)
* allow str_utfindex second argument to be an explicit nil (#16448) (512ec46)
* **api:** fix crash after set_option_value_for() #15390 (8b0e6cc), closes#14097#13577
* **api:** fix nvim_buf_set_extmark (2338345)
* **autocmd:** fix conditions in block_autocmds, unblock_autocmds #15372 (29712ae), closes#6279
* **buffer_updates:** cleanup test behavior (54b2c68)
* **buffer_updates:** handle :delete of the very last line in buffer (8335e26)
* **buffer_updates:** handle :sort of already sorted buffer (ef687d3)
* **buffer_updates:** make `lockmarks` not affect extmarks and buffer updates. fixes#12861 (7d171b1)
* **bufupdates:** send correct updates for visual paste (1423146)
* **build:** add an env var to re-enable the colors (5087347)
* **build:** call find_package(Threads) before using its variables (f446ab3)
* **build:** export symbols on Windows (aa644b7)
* **build:** fix build failure in MinGW (0503e17)
* **build:** make vendored libmpack and libmpack-lua build properly (2a08aef)
* **channel:** throw error if sending to internal channel w/o terminal (3b89fee)
* **checkhealth:** duplicate checks if module name has "-" #15935 (a36c6e5)
* **checkhealth:** mitigate issues with duplicate healthchecks #15919 (acd5e83), closes#15259
* **ci:** disable broken test on openbsd on all CI due to resource constraints (a3e2636)
* **ci:** re-run GHA for ready_for_review events (#15377) (c6ef956)
* **decorations:** crash when :bdelete (extmark_free_all) after clear_namespace (cd353aa), closes#15212
* **defaults:** "syntax sync maxlines=1" on CmdwinEnter #15552 (5f8518b), closes#15401
* **defaults:** do not map Y in visual-mode #15387 (54726e8), closes#13268
* **diagnostic:** allow floats to be focusable (#16093) (427bac6)
* **diagnostic:** change default severity_sort order (938ed45)
* **diagnostic:** clamp line numbers in setqflist and setloclist (5b0d8f8)
* **diagnostic:** correctly handle folder level diagnostics (f87779a)
* **diagnostic:** deepcopy diagnostics before clamping line numbers (2abc799)
* **diagnostic:** do not focus floats in goto functions (#16433) (b5b025f)
* **diagnostic:** don't clamp line numbers in setqflist (0341c68)
* **diagnostic:** don't return nil when callers expect a table (#15765) (057606e)
* **diagnostic:** don't use nil col if missing from qflist (#16357) (5e46f64)
* **diagnostic:** error on invalid severity value (#15965) (d5dd0aa)
* **diagnostic:** fix navigation with diagnostics placed past end of line (34bb5fa)
* **diagnostic:** fix option resolution in open_float (#16229) (fd34784)
* **diagnostic:** fix wrong data type in setqflist() (3fd1450)
* **diagnostic:** get line count per buffer when clamping (c59f200)
* **diagnostic:** handle an unknown or missing client (#16242) (1fdbd29)
* **diagnostic:** handle diagnostics placed past the end of line (#16095) (a2994c8)
* **diagnostic:** make set() go through cache when calling show() (d93f47d)
* **diagnostic:** only update decorations for loaded buffers (#15715) (924e8e4)
* **diagnostic:** preserve fields from LSP diagnostics via user_data (#15735) (17b7968)
* **diagnostic:** remove useless highlight links (#15683) (c13242c), closes#15585
* disable clipboard when test registers (dd63d93)
* **docgen:** add tagfunc.lua (0746f00)
* **doc:** various fixes#15604 (4eb1ebb)
* **eval:** add the vimscript-1 feature to has() (18b32fc)
* **eval:** checking for a non-empty string is too strict (#15987) (1dbbaf8)
* **eval:** fix has('wsl') #16153 (16d06fa), closes#12642#16143
* **eval:** fixup for empty modifier in fnamemodify (#16368) (a7ad509), closes#16367
* **extmark:** fix missing virt_lines when using id param of set_extmark (995dbd2)
* **extmarks:** splice extmarks on nv_Undo #15920 (e069361)
* **fileio:** replace characters over INT_MAX with U+FFFD (#16354) (a2e5c2f), closes#11877
* **float:** fix potential heap corruption in win_redr_border (de670f3)
* **float:** redraw if w_border_adj changed (7ff1bc1)
* **heath/provider.vim:** using list as string #16007 (5365f24), closes#15988
* **highlight:** remove syncolor.vim, always include syntax colors (9afa0d2), closes#15176#12573#15205
* **inccommand:** ignore trailing commands only for *previewed* command #15638 (1f8c91b), closes#8796#7494
* include ci/ in exported tarball (d6f03aa), closes#15856
* **input:** never reinterpret unmapped ALT- chrods in Terminal mode (#16222) (5ce35ab)
* **input:** resolve isolated (non-ALT/META) mappings #13109 (c4857b6), closes#13042#13086#15869
* **jobwait:** always drain process event queues #15402 (3c081d0), closes#15349
* **lsp_spec:** tests depended on previous session (069d1de)
* **lsp:** accept file URIs without a hostname (a2c2a08)
* **lsp:** add done flag to messages returned in util.get_progress_messages() (#15985) (45fa70a)
* **lsp:** add placeholder cancel function (#16189) (4da0351)
* **lsp:** add textDocument/prepareRename to capability map (#15961) (fcc11d5), closes#15899
* **lsp:** adjust legacy show diagnostic functions to use correct scope (#16106) (dc6c9fe)
* **lsp:** allow diagnostic.clear to accept nil bufnr (#15137) (4ed2d4f)
* **lsp:** avoid duplicates in client attached buffers (#16099) (c5525f2)
* **lsp:** avoid serializing boolean as key (#15810) (96614f8)
* **lsp:** change rpc start notify level to warn (#16467) (04c7b55)
* **lsp:** change signature of buf_highlight_references (#16345) (eb3d591)
* **lsp:** correctly parse LSP snippets #15579 (516775e), closes#15522
* **lsp:** default to UTF-16 in make_position_params (2e3a474)
* **lsp:** do not index nil client in progress (#16262) (8f31b21)
* **lsp:** do not invoke handlers for unsupported methods (#15926) (d288daa)
* **lsp:** don't update active_clients on exit_timeout (#16192) (98f5782)
* **lsp:** enable additional capabilities (#15470) (5d63354)
* **lsp:** ensure buffers are re-attached on rename (#16266) (ee3a58d)
* **lsp:** Ensure users get feedback on references/symbols errors or empty results (256570a)
* **lsp:** expose ContentModified error code to callbacks (#15262) (3f09732)
* **lsp:** fix cursor row after textEdits (#16038) (bd2f61c)
* **lsp:** gracefully handle nil workspaceFolders (#16284) (0ecc58c)
* **lsp:** guard textDocument/codeAction command logic #15769 (433bda4)
* **lsp:** improve symbols_to_items performance (#16197) (5ad15c9)
* **lsp:** Include client name in handler error messages (#15227) (24f2b9e)
* **lsp:** pass bufnr for async formatting (#15084) (c31bc6e)
* **lsp:** persist diagnostic config for clients (bcc9ba5)
* **lsp:** prevent double <text> for cached plaintext markup (910967e)
* **lsp:** restore diagnostics extmarks on buffer changes (#15011) (77b33e4)
* **lsp:** rewrite incremental sync (#16252) (2ecf0a4)
* **lsp:** send buffer contents joined on fileformat-specific linebreak (#16334) (134a638)
* **lsp:** send textDocument/didChange for each buffer (#16431) (3451121)
* **lsp:** support duplicate params in signature help (#15032) (9132b76)
* **lsp:** update lsp-handler signature in call_hierarchy (#15738) (8164adc)
* **lsp:** update workspace/applyEdit handler signature (#15573) (3f526fe)
* **lua:** fix vim.deepcopy for metatables & cycled tables (#16435) (eb876a0)
* **lua:** preserve argument lists which are not lists (6896d22)
* **man.vim:** ensure buftype=nofile after :tag or :stag #15675 (29bc648), closes#15650
* **man.vim:** filetype=man is too eager #15488 (2548a9e), closes#15487#15487
* **mouse:** fix mouse drag positions on multigrid #12667 (0dcfd0e), closes#15091
* **mouse:** correct dragged position in composed layout (810da1a)
* **multigrid:** mouse events crash neovim (28ac6c0)
* **nvim_open_win:** crash if autocmds delete buffer/window #15549 (0c06da1), closes#15548
* **options:** using :set fillchars should clear local value (7528bce)
* prevent K_EVENT from stopping Select mode CTRL-O #15688 (5f144ef)
* **provider:** compare versions as number, not string (python 3.10 support) #15937 (e16adbf), closes#14586
* **screen:** make display_tick monotonic up to 2^64. fixes#16152 (9e88c9c)
* **screen:** missing search highlights when redrawing from timer #15380 (db695cc), closes#13074#14064
* **shared:** do not treat empty tables as list in deep extend (#15094) (526fc60)
* **sign:** reset auto sign column with minimum in float win minimal style (c8f57f6)
* **startup:** init.lua: set $MYVIMRC to absolute path #15748 (c76cddf)
* **termdebug:** replace mapset with nvim_set_keymap (#15699) (4d7dcbe)
* **termdebug:** replace term_getline with getbufline #15598 (11289ad)
* **terminal:** close without ! if the job is stopped (55defa1), closes#4683
* **terminal:** free terminal if close_buffer() closes a closed terminal (#16264) (14def4d)
* **test/dumplog:** tostring(rv) before formatting as string (ddaa0cc)
* **tests:** use isolated XDG_DATA_HOME in startup tests (8e663e2)
* **treesitter:** do not map hl_group when no mapping is set (f489d98)
* **treesitter:** run predicates more often in iter_matches (458f2aa)
* **tui:** extend smglr ignores to smglp and smgrp (#16239) (3ba800f)
* **tui:** remove obsolete $NVIM detection #15791 (4414584), closes#12937#11390
* **tutor:** formatting, layout #15098 (c52ec8f), closes#15088
* **ui:** use nowait for q mapping in floating window (#16427) (c132144)
* **v:lua:** fix emsg when calling v:lua directly (da9005a)
* **vim-patch.sh:** run nvim with -u NONE -n #16179 (97ae0ab)
* **vim.opt:** vimL map string values not trimmed (#14982) (4906156)
* **window:** win_close from other tabpage #15454 (90b2da1), closes#15313
* **windowing:** positioning of relative floats (9065730)
- Configuring the translation domain allows calculating and showing the translation states of each language
- OARS gives Neovim a nice ‘safe for children’ badge
- Releases allow displaying release info/update frequency