For notable changes, see runtime/doc/news.txt (or `:help news` in Nvim). Following is a list of fixes/features commits. BREAKING -------------------------------------------------------------------------------- -649dd00fe2remove deprecated functions -0370e4def0remove neovim qt -880f7d12feremove vimballs (#22402) -c48b1421afrename "playground" => "dev" #23919 -2f85bbe615rewrite TOhtml in lua -abe39f2b24api: change return type of nvim_win_text_height to Dict (#24365) -7180ef6901api: nvim_open_win: noautocmd blocks all autocmds #28192 -700cab0068events: trigger CursorMoved later on switching window (#23711) -e4a136f713ex_cmds: remove :behave -e5e0bda41blsp: add vim.lsp.status, client.progress and promote LspProgressUpdate (#23958) -5a363ccac8lsp: deprecate trim_empty_lines -5a2536de0clsp: move changetracking to separate file (#26577) -58618d208alsp: promote LspRequest to a full autocmd and enrich with additional data (#23694) -1b9ccd38a1lsp: rename vim.lsp.get_active_clients to get_clients (#24113) -eb1f0e8fcclsp: replace snippet parser by lpeg grammar -448907f65dlsp: vim.lsp.inlay_hint.get(), enable(), is_enabled() #25512 -7caf0eafd8lua: add stricter vim.tbl_islist() and rename old one to vim.tbl_isarray() (#16440) -747264320cmappings: remove #n as a notation for a function key (#17318) -f7da472257options: graduate shortmess+=f flag -c3d1d9445coptions: graduate some more shortmess flags -5df4fdf253options: make OptionSet `v:` values use typval -881d17a113options: remove compatible behaviours for vim 5.0 and earlier -e19cc9c9b7options: unify `set_option` and `set_string_option` -db590e96d5startup: "nvim -l" message does not end with newline #24215 -2ca076e45ftreesitter: incremental injection parsing -f5dc453109treesitter: new standard capture names -fc0ee871detreesitter: remove deprecated legacy injection format -6debb18523treesitter: remove duplicated diagnostic code (#24976) -18da6964ccvim.iter: remove vim.iter.map/filter/totable #26138 -9b028bd64fvim.iter: rename xxback() => rxx() #28503 -8d4a53fe6evim.json: remove global options, "null", "array_mt" #24070 -40ce857797vim.ui: change open() to return `result|nil, errmsg|nil` #28612 -e0d92b9cc2vim.ui: change open() to return pcall-like values #28502 FEATURES -------------------------------------------------------------------------------- -a66b0fdfaaNVIM_APPNAME supports relative paths #25233 -c0beb8173fadd .luarc.json (#24592) -14b7ffcf89add __call typing for vim.inspect() -ca7e488cfeadd link in issue template to minimal config template -4bf47222c9add vim.text module (#26069) -0ebc4de0ffallow opting in to builtin clipboard providers (#28083) -e8d3c4cccbgenerate types and docs for v variables -29fe883aa9ignore swapfile for running Nvim processes #25336 -28d1640dd6improve return type annotations for vim.api.* -199a990c9ereport "build" in vim.version() #23925 -e688793253tostring(vim.version()) -c559ab0ae6update unicode tables (#27317) -ecdb6465e2vim.version() returns a Version object -4b60267f82:source: source current ft=lua buffer as Lua code (#23802) -428edcde70api: add forward and back mouse buttons -037ea6e786api: add nvim__redraw for more granular redrawing -ca9f6f5694api: add nvim_tabpage_set_win (#27222) -db8fe63a93api: add nvim_win_text_height (#24236) -16513b3033api: allow floats to be opened in non-current tabpage (#28480) -6b4970f6e0api: allow open_win/win_set_buf in the cmdwin in some cases -5d921e28c1api: allow win_close in cmdwin to close wins except previous -472271199eapi: allow win_hide to close cmdwin or non-previous windows -6bba4becedapi: make nvim_open_win support non-floating windows (#25550) -b162adbb7capi: pass 0 to nvim_get_chan_info for current channel (#27321) -42bbc4fabcapi: support abbreviations in nvim_set_keymap -98a4ed0a11api: support getting abbreviations (#26868) -d3d7d763f3builtin: improve types -748bc4d22dclipboard: add OSC 52 clipboard support -db57df04b6clipboard: enable OSC 52 clipboard provider by default (#26064) -734848dc1acolorscheme: add semantic tokens modifiers to builtin color scheme -1e0996b572colorscheme: update treesitter groups -73de98256ccomment: add built-in commenting -ae4ca4edf8complete: support f flag for complete buffer part -01c51a4913completion: support completing more string options -ae3685798ddecoration: allow conceal_char to be a composing char -30a5c28c87decoration_provider: log errors as error messages -9711370c26defaults: add :Inspect to right-click menu (#28181) -2613ba5000defaults: enable 'termguicolors' by default when supported by terminal -513fc46195defaults: improve :grep defaults #28545 -c26dc1f77cdefaults: map Q and @x to repeat in Visual mode (#26495) -8758c6fb87defaults: set g:netrw_use_errorwindow = 0 #24179 -1d81d7a268defaults: treat "•" as a list item prefix #24623 -20b38677c2defaults: use ripgrep (rg) for 'grepprg' if available -61063653b0defaults: visual CTRL-R for LSP mappings #28537 -4ee656e4f3diagnostic: add `vim.diagnostic.count()` (#26807) -73034611c2diagnostic: add default mappings for diagnostics (#16230) -fc6d713dd8diagnostic: add support for many namespaces filtering in GetOpts (#28045) -5ed9916a28diagnostic: enable(…, opts) -e780177506diagnostic: filter diagnostics by specific severities (#24736) -b13e63db1ddiagnostic: goto functions jump to highest severity (#28490) -26765e8461diagnostic: is_enabled, enable(…, enable:boolean) -9cb7e00b97diagnostic: provide more control over virtual text display (#24724) -ee41153a94diagnostic: revert default behaviour of goto_next/prev() -07b60efd80diagnostic: specify diagnostic virtual text prefix as a function -a3b3978474diagnostics: support numhl and linehl for diagnostic signs -0381f5af5bdiff: grouping optimization for linematch algorithm -42333ea98ddocs: generate builtin.txt (#24493) -9beb40a4dbdocs: replace lua2dox.lua -1d4a5cd185eval: exists() function supports checking v:lua functions (#26485) -4a1ad676ceex_cmds: no error on :lua with {range} and {code} (#27290) -c2433589dcex_cmds: ranged :lua #27167 -b04286a187extmark: support proper multiline ranges -1c032ad703extmark: window scoped extmark -68cb4a7405extmarks: add "undo_restore" flag to opt out of undo-restoring -4e6f559b8cextmarks: add 'invalidate' property to extmarks -c249058758extmarks: add sign name to extmark "details" array -bbd5c6363cextmarks: add virt_text_repeat_linebreak flag (#26625) -15e77a56b7extmarks: subpriorities (relative to declaration order) (#27131) -f0884f21faextmarks: support hl_mode "combine" for inline virt_text (#24099) -372aa2eb3dfloat: add fclose command -35570e4a11float: implement footer -4200a0f167float: support toggle show float window -1233ac467dfold: transparent foldtext -71530cc972folds: support virtual text format for 'foldtext' (#25209) -38b9c322c9fs: add vim.fs.root (#28477) -e3e6fadfd8fs: expose join_paths as `vim.fs.joinpath` (#23685) -bc67cf3ccdgen_help_html: add anchors to help tags #25112 -b0cf9c5feegen_help_html: ignore pi_netrw.txt errors -81d8fce8f9gen_help_html: non-default vimdoc.so parser -da09f9b551gen_lsp.lua: protocol.Methods #24504 -f41496ce74gen_lsp.lua: sort by name, handle failure #24504 -3692fd4c87gen_lsp.lua: validate CLI args #26514 -2ff2785c39health: checkhealth buffer can show in a split window (#26714) -4382d2ed56health: fold successful healthchecks #22866 -d1bc6fca71health: list attached buffers in LSP report #23561 -2877672d70health: make :checkhealth support more split modifiers (#26731) -ddda5e0a48help: hide filename of "gO" outline using conceal #27547 -e72c0cd920highlight: Allow hyphens (-) in highlight group names (#24714) -986bf7e78dhighlight: add `FloatFooter` highlight group -574519d9d6highlight: tweak default color scheme -64a14026d7highlight: update default color scheme -a79694a08eissue_template: instruct not to include a package manager -69ffbb76c2iter: add `Iter.take` (#26525) -cebc00603el10n: update Turkish translations #24246 -fec51229c4l10n: update Ukrainian translations (#24882) -996dd36c77lsp: add actionable advice to lsp client quit error msg (#24510) -4ff3217bbdlsp: add fswatch watchfunc backend -643546b82blsp: add handlers for inlay hints (#23736) -317c80f460lsp: add method filter to get_active_clients (#24319) -6888607415lsp: add more LSP defaults (#28500) -0fe86f7e24lsp: add opts paramater to vim.lsp.codelens.refresh -131a1ee82dlsp: add original LSP Location as item's user_data in locations_to_items (#23743) -f1775da07flsp: add snippet API (#25301) -db0ec84fb4lsp: add type annotations for lsp.util.locations_to_items (#26694) -f190f758aclsp: add vim.lsp.buf.subtypes(), vim.lsp.buf.supertypes() (#28388) -451bc50d40lsp: deprecate severity_limit -e9b85acfbblsp: enable workspace/didChangeWatchedFiles by default (#23190) -4a09c178a1lsp: fallback to code-action command on resolve failure (#25464) -2f22ed6a00lsp: handle multiple clients in omnifunc (#24381) -63b3408551lsp: implement textDocument/diagnostic (#24128) -5e3cf9fb4blsp: improve control over placement of floating windows (#24494) -15641f38cflsp: include positionEncodings in default client capabilities -ddd92a70d2lsp: initial support for dynamic capabilities (#23681) -ca5de9306clsp: inlay hints #23984 -350d818564lsp: inlay_hint.is_enabled({filter}) #28523 -33e1a8cd70lsp: map K to hover by default #24331 -97bea3163alsp: more annotations -37079fca58lsp: move inlay_hint() to vim.lsp (#24130) -12c2c16acflsp: opt-in to dynamicRegistration for inlay hints (#24102) -a49924a318lsp: remove notify from vim.lsp.buf_detach_client (#25140) -8149bd089elsp: report fswatch errors -fb54e6980elsp: set client offset_encoding if server supports positionEncoding -96e19533f6lsp: set kind in select call for codelens #23889 -9af3559643lsp: set workDoneToken in initialize request (#28182) -f736b075d3lsp: snippet parsing using lpeg -134b9ec483lsp: soft deprecate vim.lsp.for_each_buffer_client (#24104) -63f9c2da9alsp: support completion itemDefaults -3f788e73b3lsp: support connect via named pipes/unix domain sockets (#26032) -7e36c8e972lsp: support for choice snippet nodes -5c40f3e86alsp: support vim.lsp.ListOpts.loclist in location_handler() -abd2352bd8lsp: update LSP protocol 3.18 typings to date (#28730) -cfd4a9dfaflsp: use treesitter for stylize markdown -d5063f4b29lsp: vim.lsp.inlay_hint.enable(nil) applies to all buffers #28543 -c0952e62fdlua: add `vim.system()` -9248dd77aclua: add hl priority opts on yank (#23509) -6425869771lua: add meta file for vim submodules (#24525) -3734519e3blua: add noref to deepcopy -7c661207cclua: add ringbuffer (#22894) -877d04d0fblua: add vim.func._memoize -ab1edecfb7lua: add vim.iter (#23029) -d675bd01b1lua: allow vim.F.if_nil to take multiple arguments (#22903) -c379d72c49lua: allow vim.wo to be double indexed (#20288) -e52c25b761lua: deprecate vim.tbl_add_reverse_lookup -f1dfe32bf5lua: enable(enable:boolean, filter:table) #28374 -5b40a1c09dlua: implement Iter:join() (#26416) -c01e624b07lua: more specific error messages for vim.api type checking -e1ff2c51calua: pass keys before mapping to vim.on_key() callback (#28098) -2db719f6c2lua: rename vim.loop -> vim.uv (#22846) -6c0812d92elua: specific error messages for type checking `opts` params -fd089c8e50lua: typing for vim.fn.* (#24473) -302d3cfb96lua: use callable table as iterator in vim.iter (#23957) -51c754b62elua: use keyset type information -8e5c48b08dlua: vim.fs.normalize() resolves ".", ".." #28203 -7e70ca0b48lua: vim.keycode (#22960) -9e86f473e0lua: vim.region accepts getpos() arg (#22635) -4d04feb662lua: vim.tbl_contains supports general tables and predicates (#23040) -48d533272elua-types: types for vim.api.* (#24523) -25e7299707man: allow opening pages in current window (#27861) -08db61b19bman: respect 'wrapmargin' when wrapping man pages (#24091) -f9944a78bcmeta: add types for vim.lpeg -deb6fd6704msgpack-rpc: show actual request id in error message -01fe6b9e6amsgpack_rpc: support out-of-order responses on `msgpack-rpc` -619407eb54nvim_open_term: convert LF => CRLF (#26384) -e98decf9a6quickfix: support -q - to read 'errorfile' from stdin (#27303) -7b0123dd6aremote: avoid --remote-ui infinite loop (#24465) -cca6c4c698rpc: allow empty string key in msgpack => Vim conversion -d0d4160dd1runtime: highlight hl groups in syntax.txt (#25050) -5f4895200ascripts: add lsp_types.lua (#23750) -4e6096a67fserver: allow embed with listen (#25709) -170c890dcashortmess: "q" flag fully hides recording message (#27415) -d3582e102bstatuscolumn: re-evaluate for every screen line (#25885) -224f303ee5stdlib: add vim.base64 module (#25843) -fa131de9adtabline: middle mouse button now closes tab (#27522) -c855eee919term: enable reflow by default (#21124) -cd1b14f027termdebug: improve `:Evaluate` floating window (#26621) -cffdf102d4terminal: allow :terminal to take modifiers (#15427) -0c89854da1terminal: close shell terminals automatically -7589336120terminal: respond to OSC background and foreground request (#17197) -beca827212terminal: trigger TermRequest autocommand events (#22159) -c6ec7fa8d7treesitter: add 'injection.self' and 'injection.parent' -6cfca21bactreesitter: add `@injection.filename` -5d8ab32f38treesitter: add a query editor (#24703) -cb0a1a10b2treesitter: add bash parser and queries -bb15fa0356treesitter: add folding for `InspectTree` (#27518) -9ce1623837treesitter: add foldtext with treesitter highlighting (#25391) -31c4ed26bctreesitter: add injection language fallback (#24659) -28f54a7878treesitter: add lang parameter to the query editor (#25181) -88c8803aa1treesitter: add python parser and queries -c194acbfc4treesitter: add query_linter from nvim-treesitter/playground (#22784) -af040c3a07treesitter: add support for setting query depths -11844dde81treesitter: bundle markdown parser and queries (#22481) -5e6240ffc2treesitter: handle quantified fold captures -f69658bc35treesitter: highlight Lua files by default (#26824) -988b472d90treesitter: highlight help files by default (#26347) -845d5b8b64treesitter: improve query error message -189fb62032treesitter: improved logging (#23638) -c0b99bb1detreesitter: show root nodes in :InspectTree (#26944) -cb46f6e467treesitter: support URLs (#27132) -ff6092b4eetreesitter: update Bash parser and queries to v0.21.0 -8dda630ae9treesitter: update C parser and queries to v0.21.0 -3836eeb901treesitter: update C queries from upstream -aca4ad430btreesitter: update Lua parser and queries to v0.1.0 -5e875ae8d0treesitter: update Markdown parsers and queries to v0.2.1 -8a3385dde7treesitter: update Python parser and queries to v0.21.0 -20dcbaaaf8treesitter: update Vim parser and queries to v0.4.0 -987dff6713treesitter: update Vimdoc parser and queries to v2.4.0 -1384bebd5atreesitter: update query parser to v0.2.0 -668f16bac7treesitter: upstream query omnifunc from playground (#23394) -a478bf936btreesitter: use 0-based indexing to show ranges in `:InspectTree` -ac8ed77afbtui: add 'termsync' option (#25871) -4ee9e58056tui: query extended underline support using DECRQSS (#28052) -b4b7ca2d54tui: support DCS responses in TermResponse event (#26061) -622ae2f53etui: support Super and Meta modifiers (#24357) -a142670360tui: support undercurl in WezTerm (#28037) -56627ca242tui: use TermResponse event for OSC responses (#25868) -32b49448b2tutor: add Japanese tutor #27268 -9c2270b834types: add `test/.luarc.json` -d3a8e9217fui: add chdir UI event (#27093) -6ea6b3fee2ui: add support for OSC 8 hyperlinks (#27109) -b72931e704ui: allow non-zero 'cmdheight' with ext_messages -2615ed879eui: allow to get the highlight namespace -e38027ef69ui: completeopt support popup like vim -2e4e12756aui: indicate margins for the area used by win_viewport -efa9b299a7ui: inline virtual text -dacd34364fui-ext: make 'mousehide' into proper ui_option (#25532) -43ded8d358version: unverbose ":version", ":verbose version" #24195 -0a598c13b1vim.deprecate: only issue warning if neovim version is high enough -a767c046f4vim.iter: add Iter:flatten (#26786) -af6e6ccf3dvim.ui: vim.ui.open, "gx" without netrw -fa4b02fa67vim.version: add `vim.version.le` and `vim.version.ge` -27a566f3f8vimdoc: support Markdown code blocks (#25127) FIXES -------------------------------------------------------------------------------- -f5573fba3dRemove nested for_each_tree in TSTreeView (#26328) -ae28ef327eadjust error message for error in UI event callback (#28200) -ebe489d8f0allow multiline message for echoerr (#25380) -592bc831ceavoid ui_grid_cursor_goto when drawing window separators -d6483793e1buffer overrun in lmpack_session_receive -3bbb0aa399checkhealth warning even if init.lua exists #25306 -5cb906e91ccorrect versions in deprecation warnings -118fd8367cdeduplicate gen_cflags -eb4676c67fdisallow removing extmarks in on_lines callbacks (#23219) -6e9b204afbdoc errors -77d3526a3dexplain that user should run nvim with -V1 to see more information -fd791db0ecfix ASAN errors on clang 17 (#25469) -bb38c066a9fix compiler warning from clang -478273a423fix iter_matches call in query linter (#27496) -bb7324292cflush UI state before blocking in vim.wait (#25938) -44d4ae448dfunction was renamed (#23772) -1dd700a8d9gf fails on "foo/bar.txt:1:2" on Windows -6e703f778fhandle argv not present in nvim_get_chan_info -56dc8b9212heap-buffer-overflow in file_name_in_line -74b2f6c3d9ignore non-existent properties during header generation -f5a09f1b03invoke changed_bytes when rewriting <Tab> char #25125 -b8273c9a33lua annotations -69d49727d7luacheck -4ce3159e24missing case in setxattr error handling (#26176) -41fb98d6famove fswatch linux check inside of vim.schedule (#27824) -ba58c6f8a4only attempt to close timer if not already closing (#26047) -b400b947f3prevent child processes from inheriting ui channel file descriptors -99b8a343e1quick update, squash later -83b51b36aaraise TS min version -a090d43d61splitting of big UI messages -2424c3e696support UNC paths in vim.fs.normalize -43e76cc346tostring(vim.version()) fails if build is NIL #24097 -8c7a8be274transposed xcalloc arguments (#28695) -35f453f65dtype warnings in shared.lua -f112ac73bdunreliable "checkhealth completions" test -b32b5b2711use BEL to terminate OSC 11 request (#26335) -d95e3a4c9cuse no_ff instead of ffdos as condition -a1bec02c1euse snprintf instead of sprintf -ca887b80a9version-range < and <= #23539 -c1ee187f82vim.loop in luv threads (#23924) -fe4583127fvim.validate() order is not deterministic #28377 -be8b15200dwindows timeouts have exit code 1 -1f8fb7c000:let: fix error when applying operator to boolean option (#24030) -5a3752889cNVIM_APPNAME: show error message if $NVIM_APPNAME is invalid -c4ad15ae32PVS/V009: add top-level message -128e194f64PVS/V1001: variable is assigned but is not used -1bbbca267dPVS/V547: expression is always true/false -592e4472daPVS/V564: the '|' operator is applied to bool type value -30d311ebcfPVS/V592: expression is enclosed by parentheses twice -3ecd45ded0api: allow negative column arguments for nvim_buf_set_text (#23501) -3ac952d4e2api: avoid assertion when autocmd group id is 0 (#23210) -b2a8a93147api: avoid immediate TextChanged with nvim_create_buf (#25492) -ef7ae66eefapi: avoid integer truncation -b1e24f240bapi: avoid open_win UAF if target buf deleted by autocmds -0a81ec14a4api: better topline adjustments in nvim_buf_set_lines -c18f3cfcdbapi: crash after nvim_win_set_config title/footer validation error (#26606) -aa4e47f704api: disallow some more functions during textlock -22d9338afcapi: disallow win_set_buf from changing cmdwin's old curbuf (#24745) -da979ae04bapi: do not re-apply win_config.style when missing -344906a08fapi: do not update grid position in nvim_win_set_cursor (#28235) -22205f36a6api: don't change title when setting buffer in a window (#23492) -711a2f5ff6api: don't leak memory with nvim_win_get_ns (#27570) -1cf51a07a6api: don't set coladd of mark (#26648) -5fd1bac65eapi: don't use stl 'fillchar' for "use_statuscol_lnum" (#27501) -a3751f5de2api: dont change curwin for nvim_win_set_height -1ff4562502api: dont change curwin for nvim_win_set_width -59fed8bb64api: extmark highlight groups not always included in details (#23179) -9b9030ff2capi: fix inconsistent behavior of topline touched in recent refactor -fc2a56fe61api: fix set_lines viewport adjustment, but this time good -b7763d7f6bapi: get virtual text with multiple hl properly (#25307) -b3be7b7413api: handle NUL in nvim_err_write() and nvim_out_write() (#25354) -132bbd1cbdapi: handle clearing out last line of non-current buffer -d942c2b943api: handle win_split_ins failure properly -5cfdaaaeacapi: ignore 'autochdir' when renaming other buf (#28376) -2fc2343728api: ignore 'autochdir' when setting buf in other win (#28371) -7367838359api: limit depth of nvim_cmd (#27225) -0da27e9bdeapi: load buffer first on nvim_buf_set_lines (#25823) -4e5c633ed4api: make getting explicit empty hl in virtual text work (#28697) -d05d63a18fapi: make nvim_get_hl not return non-existing groups -a70eae57bdapi: make open_win block only enter/leave events if !enter && !noautocmd -5d58136cccapi: make open_win/win_set_config check if splitting allowed -4ec8fd43bfapi: make width/height for split by nvim_open_win work (#28341) -b1577d371aapi: make win_set_config with "win" for splits need "split/vertical" -0330dd9e69api: mark nvim__complete_set as experimental #28579 -d22172f36bapi: more intuitive cursor updates in nvim_buf_set_text -b051b131f5api: nvim_buf_get_offset in a new buffer with zero or one lines -e0453d7f57api: nvim_cmd{cmd="win_getid"} parsed as :winsize #24181 -6091df6b7aapi: nvim_create_buf assert fails if autocmds set &swapfile -d5c23d72a5api: nvim_create_buf leaks memory if buffer is loaded early -b7708eac24api: nvim_get_hl should return default flag -a741c7fd04api: nvim_parse_cmd error message in pcall() #23297 -e55a502ed4api: open_win fire Buf* events when !enter && !noautocmd if entered early -a873f33993api: open_win fire BufWinEnter for other buffer when !enter && !noautocmd -e7c262f555api: patch some cmdwin/textlock holes -a9968912b7api: redundant error when using `nvim_cmd` (#24010) -dbcba26bf1api: revert unintended change of optional bool params -b25753381capi: set script context when using nvim_set_hl (#28123) -d3ea9a04bcapi: update "w_scwidth" in nvim_eval_statusline() -c971f538abapi: update grid cursor in nvim_win_set_cursor() -130cb4815aapi: use a conditional stack for nvim_cmd (#26341) -cf9f002f31api: use correct buffer for "range" in nvim__redraw (#28614) -77118d0da8api: use text_locked() to check textlock -bcb70eeac4api: win_set_config autocmds crash when moving win to other tabpage -233649bc75api: win_set_config fires unnecessary autocmds -b52d15853eapi: win_set_config set tp_curwin of win moved from other tabpage -54022a2946api: win_set_config update statuslines after removing splits -a9cd8467cbapi: wrong nvim_buf_set_extmark error for invalid hl_mode -4d3a38ac07api, lua: handle setting v: variables properly (#25325) -92760a7f42api, lua: make blank lines in a message work properly (#24244) -08fc1ebbaaapi/buffer: fix handling of viewport of non-current buffer -24e3ee9d07api/options: validate buf and win -139e6f68f9autocmd: API functions accept garbage after event name #25523 -02d00cf3eebackup: E1509 when writing extended attr to symlink (#28014) -746a153bc1base64: only check padding if leftover index is set (#25854) -533e01a75bbase64: properly handle embedded NULLs when decoding (#28349) -095bd8d0f8buffer: do not filter help buffer -e5d9b15044buffer_updates: correct buffer updates when splitting empty line -11865dbe39build: better deps for doc -ffaf74f147build: distinguish vim.mpack from global require'mpack' -f9416470b1build: include FindPackageHandleStandardArgs -ade42d531bbuild: teach cmake about vvars -da7178cbbfbuiltin: fix incorrect optional fields for fn.sign_define -6fa0f303d7builtin: parameter mismatch between winsaveview and winrestview -3159a2c28fchange: update fold after on_bytes (#26364) -342c7da4bdchannel: use os_write() instead of fwrite() for stderr (#26689) -cd6458123fcharset: fix wrong display of 0xffff (#24158) -603f3b36a4checkhealth: error in node.js check #28348 -b0978fca6bcheckhealth: fix crash due to incorrect argument type -7f94a032e1checkhealth: shell_error and cpanm module -bfdec5b0e7clang: null pointer dereference in parse_msgpack #25389 -1027ccac6dclangd: check size of array before applying qsort on it -cdd8017469clangd: set block pointer to null in case map is empty -6851b265baclipboard: don't pass --foreground to wl-copy (#25481) -c3de6524a5clipboard: ignore exit caused by signal #23378 -3128cff6b1clipboard: increase OSC 52 wait timeout (#25936) -46ceefb52bclipboard: make getreg() accurate for clipboard registers (#26740) -d2983dcdb1clipboard: make osc52 work with PUC Lua (#26014) -e51e524175cmake: restore previously undocumented workround, now documented -3688735c2bcmdline: don't redraw 'tabline' in Ex mode (#24123) -c72d877c33cmdline: wrong 'incsearch' highlighting after :redraw (#27947) -bc67bbe446codelens: add buffer and line checks before displaying codelens (#23887) -2b1a6e7597colorscheme: add missing LSP groups -0c850add3ecolorscheme: default statusline groups usability #26921 -8b23653695colorscheme: link LSP semantic tokens to treesitter groups -62e0e0349ccolorscheme: try .lua files in 'rtp' before .vim files in 'pp' (#23727) -eca72def1fcolorscheme: typo -d4bd6b1eaacolorscheme: use explicit normal foreground in syntax groups -3c724fe1f3column: 'statuscolumn' not drawn after virt_lines with "n" in 'cpo' (#22967) -cdc028e97dcolumn: add truncated width during estimation for 'statuscolumn' -e89071522ccolumn: always set b_signcols.max -c126a3756acolumn: apply numhl signs when 'signcolumn' is "no" (#26167) -2ded2e75f4column: avoid exceeding configured 'signcolumn' width -b50fdcba4acolumn: clear "b_signcols" before moving saved marks -13d50c3b13column: clear "b_signcols" when marktree is cleared -ec74538044column: correct width after truncated 'statuscolumn' error (#26737) -2bdef6dd2acolumn: don't overflow sign column with extmark signs (#23854) -bab4bcdefbcolumn: don't reset 'statuscolumn' width after it has been drawn -c509f4907bcolumn: fill 'statuscolumn' clickdefs with evaluated width (#26891) -25e62697c3column: fix wrong cursor with 'statuscolumn' and cpo+=n (#24268) -dbf6be296dcolumn: full redraw with 'stc, 'rnu' and inserted lines (#27712) -7d0a23973bcolumn: handle unprintable chars in 'statuscolumn' (#24198) -0db6946b39column: handle w_redr_statuscol at end filler lines (#27365) -97122eaa1ccolumn: ignore empty signcols range (#28177) -967c7abde3column: keep track of number of lines with number of signs -f871fee8b6column: pass kFalse when initializing "b_signcols.count" -44d4f03573column: rebuild status column when sign column is invalid -c6864b0d14column: redraw 'statuscolumn' on wrapped lines with 'relativenumber' -35cec0de4acolumn: redraw and update signcols for paired extmark -d88814ef68column: remove sign from line it was previously on with undo -df399ea0d2column: reset decor state before starting from top -5a4e0b837fcolumn: use a single path for sign sorting (#27431) -a878e02d5dcolumn: use maxwidth to allocate/fill 'statuscolumn' click defs #24190 -783b0aba41completion: check that healthcheck name is string (#28458) -fbeef0d4efcompletion: don't add backslashes to runtime pattern (#24296) -cdc8bacc79completion: filter results with complete+=f (#26029) -af8500af64completion: improve popup window position (#26739) -d1b2a5cf5fcompletion: make sure the buffer name is valid (#25975) -e9b9a86cd5context: don't crash on invalid arg to nvim_get_context (#25977) -fdaf6bc557context: don't leak memory on multiple invalid objects (#25979) -55be4a4e26coverity: dead code #25562 -6d698c86d0coverity: unhandled retval for marktree_itr_get_overlap() #26518 -6f49ed58c3coverity/348240: memory leak in put_view() -9d48266bedcoverity/471380: null dereference in get_local_additions() -ae48d965d7coverity/477623,477624: guard null pointer dereference in kv_concat_len (#27022) -2b0acacb3cdecor: allow adding providers during redraw -5ca330859cdecor: check decor kind before accessing union field (#27205) -60d320dea3decoration_provider: don't leak memory on error (#24410) -65738202f8decorations: better approximation of botline #24794 -2accf24805decorations: crash with revised mark with changed decoration flags -a0e9ef09d7decorations: do not apply sign highlight id as range attr id -fba17d5b88decorations: fix imbalanced sign count -444f37fe51decorations: incompletely displayed line should also get decorations -dc48a98f9adecorations: validate botline for on_win -328a237351defaults: auto-close terminal for &shell with args (#28276) -5aa1ba3efedefaults: background detection in tmux (#26557) -5e98439f6ddefaults: diagnostic mappings descriptions #28646 -ccb5a76e5adefaults: don't use nvim_feedkeys in default mappings (#24520) -85cb0b0ddcdefaults: make terminal autoclose not block other events (#27581) -aa1d0ac095defaults: only repeat macro for each selected line if linewise (#28289) -eef2aedff6defaults: remove tmux background detection passthrough (#27571) -5b45efbee6defaults: set 'fsync' #26034 -8df3742378defaults: use augroup for default autocommands (#26933) -a8e4ee2f2bdefaults: validate 'channel' before responding to OSC request (#27594) -6318edadc3defaults: visual hash (#) on text with "?" -abd380e28ddefaults: visual mode star (*,#) is fragile -b9a0e762f1defaults: visual star (*) on text with "?" -9b4b23493ddefaults: wait until VimEnter to set background (#26284) -72e3d8c3f9deps: bump luv to 1.48.0-2 -87db6d894adeps: make sure --force-config takes effect -7aad4643f9deps: remove stray conflict marker -8a6716682edeps: restore functionality of USE_EXISTING_SRC_DIR -d4dc884012deps: restore functionality of USE_EXISTING_SRC_DIR -d272143318diagnostic: always return copies of diagnostic items (#25010) -29d5ff6ac4diagnostic: check for sign namespace instead of sign group -3d8f0cb695diagnostic: check if delete failed in `qf_fill_buffer()` (#25932) -89ffdebd20diagnostic: fix typing on field |diagnostic-severity| -83635e4e3ddiagnostic: get border from config (#28531) -96f59e1b99diagnostic: invalid col number compare in next_diagnostic (#28397) -ad76b050ebdiagnostic: open_float on multi-line diagnostics #28301 -37011bc45ediagnostic: rename buffer → bufnr in type annotation (#23042) -50284d07b6diagnostic: typing -a4fc3bb0e6diagnostic: vim.diagnostic.get(…,{lnum=…}) on multi-line diagnostic #28273 -add1b10b79diagnostic: virtual_text prefix function should have index and total (#25801) -35f475d0a5diagnostics: if buffer not loaded, skip handlers that set extmark (#25628) -5a25dcc5a4diff: filler lines for hunks bigger than linematch limit (#24676) -2f9ee9b6cfdoc: improve doc generation of types using lpeg -c4417ae70cdoc: prevent doxygen confusion -67f5332344docs: clean up non-docstring comments for vimdoc gen -ae7020c667docs: fix TSNode incorrect signatures -ab65a98adbdocs: ignore_invalid #24174 -f40df63bdcdocs: make lines not overflow in vim docs -0a90e4b05adocs: match DocSearch style with site theme -0d149bb186docs: the runtimepath is not the runtime path -957d05d16bdocs: too much whitespace around <pre> blocks #24151 -d931b829e9docs: vimdoc syntax errors -036da0d079docs: vimdoc syntax errors -17c59e417fdocs: vimdoc syntax errors -34b57508a7drawline: check filler_todo in place of removed draw_state (#27889) -455bca1ba8drawline: combine extmark highligh with area hl correctly -3299797150drawline: consider position in linebuf for foldcolumn (#26803) -889f81c65fdrawline: don't invoke on_line for filler line (#28219) -2b9d3869f8drawline: don't use temporary "v" variable when not needed (#26777) -06694203e5drawline: fix missing Visual hl on double-width fold char (#24308) -d5488633f6drawline: initialize linebuf_attr to 0 instead of -1 (#27840) -e9280a68f7drawline: initialize variable -2819718873drawline: initialize variable -36941942d6drawline: inline virt_text hl_mode inside syntax/extmark hl (#24273) -37b73cf14bdrawline: make cursorlineopt=screenline work with resized grid -be1d09c427drawline: missing NUL termination when drawing TAB (#27307) -5b31447811drawline: update prev_ptr after getting syntax attrs (#27072) -14839c5d18edit: backspace adds extra spaces for inline virtual text (#28005) -267e90f31dedit: don't go to Terminal mode when stopping Insert mode (#27033) -b2e8c0df20edit: fix K_EVENT interfering with 'digraph' (#24258) -143a178332editorconfig: add missing root validation (#23462) -cbbda3bcd7editorconfig: check that buffer is valid (#23922) -abb8c2c453editorconfig: do not set 'endofline' -df2f5e3912editorconfig: highlight properties with dashes (#24407) -dc45fb4655editorconfig: only warn once on errors -cdbc3e3f3eeditorconfig: syntax error regression -bf0c69e504eval: correct failure return value for readfile/blob (#27722) -5b312cd5f6eval: make has('pythonx') work properly (#27739) -0e4086b741eval: prevent double-free in garbage collection (#22990) -12d123959feval: properly support checking v:lua function in exists() (#27124) -b8c34efe33eval: skip over v:lua properly (#27517) -ad2fad9a3bevent-loop: flush UI when no input is available (#25728) -6725565258event-loop: process input before events (#27358) -58a1ef8e6aevents: avoid unnecessary CursorMoved (#24675) -bf9e92c81cevents: check for WinResized/WinScrolled in terminal mode (#27226) -dd24ea8195events: don't expand non-file as file name -774a32e5feevents: null dereference in autocmd functions -a8cfdf43bcevents: trigger VimResume on next UI request (#24426) -a114a21effex_getln: initialize pointer with NULL -9e7c4fe579exception: remember whether message is multiline (#25351) -4a098b97e5excmd: append original command to error message -75d9c413d4excmd: make :def unknown rather than unimplemented (#23150) -f1dd75c2afexitfree: don't use ex commands to close windows in free_all_mem() -79a558277bextmark: fix crash when stepping out from internal node -a78fd18ed9extmark: fix cursor position with both left and right gravity inline text -320e9c1c21extmark: only invalidate unpaired marks on deleted rows -8e97edb93fextmark: restore extmarks when completing original text -2d33a766a1extmarks: `U` changed_bytes after extmark_splice (#26501) -23c21e7630extmarks: account for rightleft when drawing virt text (#25262) -d54156ed08extmarks: blending space shouldn't overwrite wide char (#26960) -54225bdb02extmarks: crash with sign after many marks -65b1fd00a7extmarks: do not remove decor from invalid old marks -437d35dbf7extmarks: do not remove invalid marks from decor upon deletion -a05bbc60eaextmarks: don't position overlay virt_text halfway a char (#24027) -4dd43e31dbextmarks: don't show virt lines for end mark (#23792) -dfa8b582a6extmarks: draw TAB in virt_text properly with 'rl' (#25381) -a6e4793bafextmarks: draw virt_text below diff filler lines properly (#25170) -958cc22836extmarks: empty inline virt_text interfering with DiffText (#24101) -0534ad8ca5extmarks: empty inline virt_text interfering with Visual highlight -31a51acdc3extmarks: fix heap buffer overflow caused by inline virtual text (#23851) -9c41a81decextmarks: fix virt_text_hide off-by-one hiding (#23795) -a6dd67f5b6extmarks: fix virt_text_hide with 'nowrap' and multibyte (#23757) -818d7f6dafextmarks: fix win_col virt_text drawn on wrong screen line (#25264) -c4df2f08b6extmarks: fix wrong highlight after "combine" virt_text (#24281) -b65cd7ff1aextmarks: fix wrong virt_text position after wrapped TAB (#25168) -4c7cec4e29extmarks: handle inline virt_text with empty chunk (#24005) -ee3d4f6b90extmarks: handle overwriting right half of wide char (#26951) -f4f1ce1d16extmarks: hide inline virt_text properly with 'smoothscroll' (#24106) -34a786bc49extmarks: inline virt_text support multiple hl groups (#25303) -5a6c7c805bextmarks: make empty "conceal" respect &conceallevel = 1 (#24785) -510e1f131bextmarks: make right_align and win_col work on wrapped line (#23759) -215244f749extmarks: missing "spell" and "conceal" in details (#27116) -35e50d79c6extmarks: overlay virt_text position after 'showbreak' (#25175) -a0790558c3extmarks: priority order of inline and non-inline virt_text (#27532) -b52bd8a2deextmarks: properly handle virt_text on next screen line (#25166) -a376d979bdextmarks: redraw line on adding/removing conceal (#27463) -2d9e063a63extmarks: redraw pre-undo position (#27437) -2137edbd4fextmarks: redraw properly with scoped inline virt_text (#27569) -1cc358aed6extmarks: restore old position before revalidating -0818d65528extmarks: skip virt_text if it is out of window (#25658) -19d63563e1extmarks: splice earlier when opening new line (#28108) -362df0f793extmarks: wrong display when changing text with virt_lines (#24879) -d5a85d737af_wait: flush UI before blocking (#25962) -81f67b79e8file_search: path with spaces in finddir() and findfile() (#25493) -a69c720639fileio: fix off-by-one in rename_with_tmp (#27780) -c6c21db82bfiletype: add typing and dry (#24573) -020d1f626afiletype: call on_detect before setting buffer filetype -fdf5013e21filetype: correctly detect bash-fc-{id} files as "sh" -d6f406db45filetype: don't use fnamemodify() with :e for extension (#27976) -670c7609c8filetype: make sure buffer is valid before call nvim_buf_call (#24922) -af38b46a25filetype: return on_detect function when matching by file contents -2955c921cefiletype: use unexpanded file name (#27931) -e32af31ee8flake: clang-tools moved to nativeBuildInputs (#26955) -fd08fd3de3float: add fixd option -884470124dfloat: allow floating window in cmdline area -9ecb43b637float: apply 'winblend' to title/footer highlight (#25999) -898371fc9ffloat: don't relative flaot win itself -fcdfbb4303float: fix some other crashes with :unhide or :all (#25328) -3ea124a8d9float: improve error message when reconfig failed (#25076) -c5abf487f1float: make "fixed" work with relative=win (#25243) -03e8b5fc91float: make bufpos work properly with resized parent grid -437ed3cee2float: trigger winnew event when float window create -f5953edbacfloat: update position of anchored windows first (#25133) -9de157bce4float: win_get_bordertext_col returning negative column number (#25752) -5f18dd3013float: wrong position when bufpos is set -0e01e81552folds: allow overlay virtual text on folded line (#23892) -ee986ee044folds: combined Folded and Visual highlights (#23752) -ded01a819afolds: don't show search or match highlighting on fold (#24084) -811140e276folds: fix missing virt_lines above when fold is hidden (#24274) -678548a2b4folds: show Folded highlight in Visual selection (#23741) -58f9486144folds: update folds in Insert mode with fdm=indent (#24402) -38e38d1b40fs: allow backslash characters in unix paths -8a7e3353ebfs: make `normalize()` work with '/' path (#24047) -ae5095cac9fs: use generics for better typing -e4da418ba8fs.lua: normalize slash truncation (#23753) -06fcf71bd0fswatch: --latency is locale dependent -502a7a0558ftplugin: respect runtimepath ordering -03a2c5b772ftplugin: source Lua files after Vimscript files per directory (#23801) -be5cf33836gen_help_html: type warnings, spell_ignore_files #27254 -6c35fb421egen_lsp.lua: improve type name, and fix wrong type inheritance -214b125132gen_lsp.lua: no notifications in lsp.Methods #24530 -765729a145gen_vimdoc: INCLUDE_DEPRECATED not generating docs for deprecateds -ccf328172bgen_vimfn_types: don't include tag before signature's line (#24492) -86c9d8b53cgen_vimvim: correctly add aliases to vimAutoEvent (#23429) -240c41e1afgenvimvim: add special abbreviations of :delete (#23172) -51ea753747genvimvim: generate prefixed boolean options properly (#27487) -9f32deba56grid: add start column when getting char on line (#25627) -4ed1c2a8afgrid: don't draw beyond max column (#26172) -9c202b9392grid: handle clearing half a double-width char (#27023) -6a486c44e6gx: move to to _init_default_mappings #24420 -67b2ed1004gx: visual selection, expand env vars -e39b6d0c52health: "attempt to concatenate nil" -7ffe450173health: check for _host_prog variables properly (#23014) -50cd5ed360health: check more "old" files -f6dcc464f2health: check unmatching python_glob as empty table (#28215) -6818ba271chealth: clients may not support watchfiles #28710 -03a021f378health: combine python and virtualenv healthchecks (#23004) -c67efe3a9chealth: correctly expand and resolve PYENV_ROOT (#26953) -88eb0ad149health: fix tmux RGB capability detection (#26886) -cde4892b49health: fix typo in function name -63a17322ddhealth: improve python executable check error handling (#26954) -ba88fd886ahealth: malformed call to warn() #26217 -8c6f97bef8health: properly use the value of $PYENV_VERSION (#23109) -c8ebb04e92health: replace healthFoo with DiagnosticFoo (#23475) -843c1bed95health: stop job properly on timeout (#23877) -96d0c709b6healthcheck: expand vimrc variable (#28379) -4229bbe514helptags: make multibyte help tags work properly (#23975) -7b6d041baeheredoc: allow missing end marker for scripts -a2f17e97echighlight: add `FloatFooter` to 'highlight_defs.h' (#25577) -837f268093highlight: add `Nvim{Light,Dark}Gray{1,2,3,4}` colors -8afb3a49c0highlight: add create param in nvim_get_hl -f8ea49cfe1highlight: add force in nvim_set_hl -4ce0ada0d4highlight: add missing g: prefix for colors_name (#22952) -03ca36d1f8highlight: apply 'winblend' to NormalNC (#23555) -6c3e170e56highlight: apply 'winblend' to float border (#25981) -d4872377fehighlight: attr set all when normal attr changed -dcaf207336highlight: combine ColorColumn with low-priority CursorLine (#23017) -66925f14dehighlight: consistently spell "Goldenrod" -5183651773highlight: correct hi command output -ca7dd33fa7highlight: don't show CursorColumn on current line (#27848) -59289fb987highlight: make CurSearch work properly with 'winhl' (#24448) -b11a8c1b5dhighlight: remove unnecessary assignment to char_attr for 'spell' (#23713) -9a2c98087bhighlight: update `IncSearch` to link to `CurSearch` -ab92575753highlight: winhl receive wrong argument -b60a2ab4cbinccommand: block errors when parsing command line again (#24374) -bc5b0da84einccommand: don't crash with "split" and 'n' flag -382ea4d402inccommand: don't preview in Ex mode (#26587) -c1c2a1b5ddinccommand: don't save information of a buffer twice (#24501) -ef44e59729inccommand: don't set an invalid 'undolevels' value (#24575) -ba9f86a9ceinccommand: improve preview buffer number handling (#27087) -643bea31b8inccommand: restrict cmdpreview undo calls (#24289) -1dba570e63inccommand: save and restore '[ and '] marks (#26442) -35ffe58ea4inccommand: update topline after moving cursor (#27341) -a14c780918input: set termkey buffer size to read stream capacity -b61575ba70intro: clear intro if new buffer is shown in focused float -9530a23016intro: link showing intro to state at start -0570a19c8aintro: make intro explicitly stateful -d1a30221fcintro: redrawing intro exposing pseudo-randomness -21360523cdintro: still show intro message with floating window -6b96122453iter: add tag to packed table -2ee8ace217iter: make pipeline termination conditions consistent (#24614) -9489406879iter: remove special case totable for map-like tables -57ccd82417job-control: fix use after free (#25223) -1c71c32b29job-control: make jobwait() flush UI after hiding cursor (#25927) -e057b38e70json: allow objects with empty keys #25564 -af6537bc66jumplist: Ctrl+o, Ctrl+i weird behavior when deleting buffers #25461 -017ff93b02keycodes: recognize <t_xx> as a key (#24700) -6709f7f8f1keycodes: simplify S- properly when D- is present (#27316) -4447cefa48l10n: update Japanese translations (#27856) -7d17ab5b6fl10n: update Ukrainian translations (#26819) -908843df61languagetree: apply `resolve_lang` to `metadata['injection.language']` -e353c869celanguagetree: don't treat unparsed nodes as occupying full range -6b5f44817elanguagetree: remove double recursion in LanguageTree:parse -f5530bf566linematch: initialize array -766f4978d6lint: lint warnings #24226 -5465adcbablint: use tbl_contains -0804034c07loader: cache path ambiguity #24491 -89135cff03loader: remove cyclic dependency on vim.fs (when --luamod-dev) -66c66d8db8loader: reset hashes when running the loader -ec80e4cb4dlog: increase size of buffer for nvim instance name -4d0f4c3de9lsp: E403 if doc contains multiple codeblocks #24458 -20c331915flsp: SignatureHelp docstring is not escaped #16702 -01691c5447lsp: abort callHierarchy on no result (#28102) -9abced6ad9lsp: account for border height in max floating popup height (#25539) -3e016fa8d4lsp: actually send diagnostic-tags back to the server -37d8e50459lsp: add "silent" option to vim.lsp.start (#28478) -2e1f5055aclsp: add assertion for explicit bufnr in apply_text_edits (#27614) -542c910a1dlsp: add missing LSP semantic token highlight links -be5e361154lsp: add param assert in client_is_stopped (#23857) -ac0e8323dclsp: add parentheses to generated union array types (#27560) -0fcbda5987lsp: add snippet regression test (#27618) -e42fdaad21lsp: add spacing for inlay hints separately #24079 -48bcc7b971lsp: advertise workspace.didChangeConfiguration capability (#26028) -c07dceba33lsp: allow Lua pattern chars in code action filter (#24041) -3bf887f6e0lsp: always return boolean in lsp.buf_client_attach (#24077) -966eb8e0b3lsp: announce publishDiagnostics.dataSupport (#24442) -39fc340276lsp: avoid assertion when `client_hints` do not exist (#28461) -47dbda97d2lsp: buffer messages until connected to server (#28507) -adbe7f3683lsp: call `on_list()` even for single location (#25830) -15983cf2c6lsp: cancel session when leaving snippet region (#25762) -816b56f878lsp: cancel watchers when closing a client -9b8a075539lsp: change `silent` in lsp.start.Opts to optional (#28524) -d3e0352574lsp: check if inlay hints are enabled for a buffer before disabling (#24074) -fa9a85ae46lsp: clean up duplicate and unused meta type annotations -8bd6f7c20blsp: clear codelens on LspDetach (#24903) -97c0a52416lsp: correct deprecation message #28403 -aa62898ae3lsp: correct the error message's cmd on spawning (#27632) -77a9f3395blsp: create codelens request parameters for each buffer (#27699) -9281edb334lsp: create per client params in lsp.buf.code_action -39cc38a87blsp: defer writing error msgs (#27688) -1b679ac192lsp: define LspInlayHint highlight group #24073 -dc8c086c7elsp: directly rename the existing buffers when renaming (#27690) -c1a95d9653lsp: disable didChangeWatchedFiles on Linux -2fde6295dflsp: display initialization errors (#25409) -94127cb5dflsp: do not add extra indentation -cc87dda31alsp: do not assume client capability exists in watchfiles check (#24550) -0fe0cf5adalsp: do not cancel snippet when selecting placeholder (#25835) -073035a030lsp: don't register didChangeWatchedFiles when capability not set (#23689) -5eee633c97lsp: don't start additional client if attach failed (#28744) -21fa19f3e8lsp: don't use hl_mode = combine for inlay hints #24276 -96b94f8d77lsp: duplicate on_detach, on_reload callbacks #24067 -b95b6ed975lsp: empty commands should not be considered executable (#28216) -c3c673cdeclsp: enable() does not activate inlay hints on open buffers #28629 -b2c26a875blsp: ensure buffer is not attached more than once -fa0a25dcb3lsp: error in reset_timer on second detach #24117 -72e64a1afelsp: extra "." when completing with tsserver #24646 -031088fc0alsp: filetype matching to documentSelector in dynamic capabilities (#25425) -d191bdf9d5lsp: fix attempt to call non existent function (#24212) -dd3fa64573lsp: fix dynamic registration of code actions (#23826) -ce4ea638c7lsp: fix incorrect typing and doc for `vim.lsp.rpc` -f487e5af01lsp: fix infinite loop on vim.lsp.tagfunc -74bd4aba57lsp: fix multi client handling workspace_folder methods (#18839) -5e5f5174e3lsp: fix off-by-one error for omnifunc word boundary -ba6761eafelsp: fix omnicomplete in middle of the line (#25787) -075a72d5fflsp: fix relative patterns for `workspace/didChangeWatchedFiles` (#23548) -840e1864c2lsp: handle NUL bytes in popup text (#25612) -345bd91db2lsp: handle absence of a trailing newline #25194 -0e9a33572dlsp: handle adjacent snippet tabstops -853f647da6lsp: handle reverse lookup in capabilities -91f67fabe6lsp: handle stale bufnr on LspRequest autocmd trigger (#24013) -849d82b80blsp: handle stale bufnr on LspRequest autocmd trigger (#27981) -2eecb1b85dlsp: highlight active parameter in signature help #25663 -e55e80d51clsp: inlay hints: "Failed to delete autocmd" when closing buffer #24469 -7968322e7alsp: inlay_hint nil reference error #24202 -ba8f19ebb6lsp: lint warnings, default offset_encoding #24046 -3304449946lsp: log unknown diagnostic tags instead of showing a warning (#25705) -251ca45ac9lsp: markdown code fence should allow space before info string #24364 -add7e106d5lsp: noisy warning about offset_encodings #24441 -c235959fd9lsp: only disable inlay hints / diagnostics if no other clients are connected (#24535) -1dacf2eceelsp: prevent code-lens refresh from becoming a permanent no-op (#28228) -597ecf7516lsp: re-add client.commands and mark private -94a904b453lsp: reapplying already-applied hints #24114 -4ecc71f6fclsp: reduce diagnostics and add more types (#23948) -bc7f86209dlsp: redundant vim.snippet.jumpable #28560 -ee156ca60elsp: refactor escaping snippet text (#25611) -2ecba65b4blsp: remove unknown LSP protocol property (#24345) -7311958e12lsp: remove unnecessary file load/write when renaming (#27621) -e14e750998lsp: rename LspProgress data.result => data.params #28632 -f0e61e6d92lsp: rename fails on missing parent directory #27291 -b413f5d048lsp: rename undofile when renaming (#27684) -d09957e0a0lsp: rename: load and list new buffer if attached to window (#27408) -7668f89d5blsp: replace @private with @nodoc for public client functions (#24415) -52823616bclsp: replace bug-prone ternary operation #28627 -5282d3299clsp: restore marks after apply_text_edits() #14630 -cf5f1492d7lsp: revert change to buf.clear_references() #24238 -917172dd96lsp: semantic token defer loading -3be2536ca0lsp: send back diagnostic tags to the server -a37d568082lsp: send empty "added" list when removing workspace folder #24440 -3c6d971e54lsp: set extra info only when it has a value (#23868) -5785c32f11lsp: set fallback client name properly -370232dbeflsp: track snippet deletion -ca26ec3438lsp: use only utf-16 in default client positionEncodings (#23903) -b302da9ad2lsp: use percentage format on lsp.status (#23971) -2c8f36a3b0lsp: use plain loop for non-list-like table of protocol values -8addd27504lsp: when renaming directory, check path prefix of buffer names (#27603) -597355deaelsp: wrong iterator in registerCapability handler (#24971) -b2d471ab33lua: allow nil values in serialized Lua arrays (#26329) -68f12e7fcblua: annotate that TSNode functions can return nil (#24621) -4ffc20c951lua: avoid internal error when :luado deletes lines (#27262) -3198038224lua: correct return value for on_key with no arguments (#25911) -84bbe4b0calua: disallow vim.wait() in fast contexts -22eb2ba183lua: do not schedule events if Nvim is exiting -7d279a09e0lua: handle array with holes in luaeval() (#26630) -c43c745a14lua: improve annotations for stricter luals diagnostics (#24609) -2f779b94e7lua: inspect_pos respect bufnr when get syntax info (#23098) -e2e63bd045lua: make highlight.on_yank use win-local highlight (#27349) -b40170f7a3lua: memory leak when using invalid syntax with exists() (#26530) -4ab9c5fa46lua: not using global value in vim.opt_global (#25196) -20ec4c776alua: only disable vim.schedule() when closing main loop (#26090) -f150b62423lua: only free luarefs when returning from API (#28373) -0190771713lua: remove uri fragment from file paths (#27647) -5aa14e1231lua: return after assert returns assert message (#27064) -5331d5772flua: show error message when failing to set variable (#25321) -1294e221a2lua: vim.fn.has('nvim-0.10') in fast context, used by vim.deprecate -37c58226a8lua: vim.fs typing (#24608) -5db076c7cclua: vim.region on linewise selection #25467 -622b1ae38alua: vim.split may trim inner empty items -a7df0415ablua2dox: filter out the entire `---@alias` block -32e69bd397luarc.json: ignore test directory to save memory -6f936c9d85man: make :Man with a range work (#25922) -59aadf33efman: pass modifiers also to :tag (#27878) -a9b4dc9614man: set the nested flag for the BufReadCmd autocommand (#26285) -c8d1d8b254man.lua: don't continue on command error (#23009) -a4c4b39d55man.lua: hardwrapped manpage is not resized #25646 -209ed16f57man.lua: return support of all sections -3a7c30dc93man.vim: q quits after jump to different tag in MANPAGER modified (#28495) -3c667d3e0fmappings: fix mapset() not replacing map with backslash (#26719) -0451391ec5mark: properly init mark views (#22996) -d432bba4e4marks: handle switching buffer properly (#25763) -62306a29admarktree: correct qsort usage -585549625dmarktree: off-by-one error in `marktree_move` -34be915f6bmarktree: preserve ordering in `marktree_move` -b97d5038f1marktree: some marks counted twice when checking for overlap -ad5a155b1fmbyte: fix bugs in utf_cp_*_off() functions -b028233991memline: more curbuf stuff -91ef26decemessages: :map output with ext_messages (#26126) -eabf9de1dcmessages: allow more prompt in headless mode with UI (#27905) -60fb8a6a8bmessages: avoid crash with :intro and ch=0 (#28343) -61a0aa6c51messages: avoid passing negative length to strnlen() (#28753) -ca258db156messages: clear new lines when increasing 'cmdheight' (#27421) -c9f47fca8bmessages: ensure msg_grid is at top at more prompt (#23584) -2f17ef1fc4messages: use "Vimscript" instead of "VimL" #24111 -55dbf5c379messages: validate msg_grid before using msg_grid_pos (#26189) -4db77017fbmeta: add nil return types to lpeg functions -5198a2555dmeta: cleanup lpeg operators -dae6770b76meta: include vim.json -d31f7648ecmkspell: prevent Unicode character overflow (#23760) -a8a93e517fmouse: avoid dragging after click label popupmenu callback (#26187) -6a2a37b1e1mouse: avoid dragging when clicking next to popupmenu (#26201) -091eb4c8c7mouse: click after eol with conceal and virtual text (#27897) -2b475cb5ccmouse: click on 'statuscolumn' with 'rightleft' (#25090) -e25cf47ad3mouse: click on empty line with 'foldcolumn' -84a4319545mouse: cmdline click registered as statuscolumn (#23163) -bf52fb7193mouse: copy the line before syntax matching (#24320) -5fb4c397a1mouse: drag vsep of window with 'statuscolumn' (#24462) -dc394b9641mouse: fix popup menu position check with winbar (#23456) -7c1921e9d6mouse: fix popup_setpos position check with ext_multigrid (#23436) -a3fba5cafcmouse: handle folded lines with virt_lines attached to line above (#23912) -64aa0f7d0bmove: check for filler lines properly (#28307) -366d0c7887move: check the correct buffer (#25698) -780509aedfmove: fix using the wrong window (#28312) -60d1e3e471msgpack: store grid line event as a value -c52dfb6e84normal: don't check conceal when pressing 'r' (#27892) -088cdf69e3normal: make "g$" work properly with resized grid -a1ded1b113oldtest: always use a 64-bit int for swapfile block number -92c59c39c3ops.c: remove duplicate u_save_cursor() -9d01385c6coptions: `'modified'` showing incorrect value for scratch buffers -c3e176f6e2options: correct condition for calling did_set_option() (#25026) -9af03bcd47options: do not change inccommand during preview (#25462) -796df966f3options: don't update curswant for 'winhl' or 'winbl' (#27515) -d956bc6379options: setting 'scroll' with resized grid (#26628) -c8a27bae3foptions: use a union for def_val (#27169) -804c828e68optionstr.c: incorrect use of curbuf/curwin -a9df0c5ce6osc52: do not use 'vim.iter' (#27218) -5d75d9aef2osc52: enable OSC 52 by default in tmux sessions (#26072) -86c2213b5eosc52: use `p` for primary selection instead of `s` (#26076) -1045659097osc52: use nvim_chan_send() to stderr for copying (#26690) -e3bd04f2afpager: handle consecutive newlines properly (#27913) -1e7e9ee91fpath: accept special characters on Windows (#25424) -f064e72b9bpath: check return value of append_path() (#28309) -f5eabaa940path: restore space separation in 'path' (#25571) -908f247c22plines: count 'showbreak' for virtual text at eol -a0cbf1d8d5plines: cursor position with 'showbreak' and resized grid (#28067) -317038e7cbplines: don't return very large height on very long line (#24260) -7955c90621plines: folded lines with virt_lines attached to line above -35c3275b48plines: handle inline virtual text after last char (#24241) -cbadb39d16plines.c: initialize cts_max_head_vcol (#24855) -fc14928719printf: make positional %zd and %zu work (#24722) -d0b3c87219process: avoid potential data race on exit (#27769) -3e569d440bprocess: close handles and timer in pty_process_close() (#27760) -268066e014process: start pty process eof timer on main thread (#27625) -49983387ffprompt: emit change event for prompt newline (#28260) -7bd6bd1ef7provider: cannot detect python3.12 #25316 -61ecb3e16cprovider/pythonx: import the correct module (#25342) -540941ef83pum: don't position too far with resized parent grid (#23442) -f186224dfcpum: fix missing rightmost column with 'rightleft' (#23445) -8bc973c6f5pum: fix missing scrollbar with 'rightleft' (#23448) -a7550a20e0pum: handle right-click menu repositioning with multigrid (#26975) -fbaa278773pum: make :popup position correctly with float border -a3dfe1bc89pum: position properly with ext_multigrid (#23336) -c1331a65ddpum: show right-click menu above cmdline area (#23298) -dd0e77d48aquery_error: multiline bug -5ac2e47accredo: make redo of Lua mappings in op-pending mode work (#23566) -60f69014a8redraw: multibyte characters are wrapped at the end of a line (#23696) -cb34d0ddd0redraw: overwrite double-width char with virt_text properly (#23708) -d184933cdcredraw: update Visual selection properly with splits (#27343) -54044e6dcerelease.sh: ze version is too big -cce9460524remote: make --remote-expr print to stdout (#23980) -bde59e8147remote: restore previous --remote-expr output formatting (#23988) -468292dcb7rpc: "grid_line" event parsing crashes (#25581) -4d4092ac9erpc: assertion failure due to invalid msgpack input -8921d56053rpc: do not crash when no input is consumed -c422722b2erpc: fix hang with channel closed while waiting for response -adb2258345rplugin: dont create data dir if it's a broken symlink #25726 -65dd3c1180ruler: show ruler of curwin with no statusline in cmdline -f5231d61a5runtime: add commentstring for C# ftplugin (#23039) -3387dc4a46runtime: add commentstring for D ftplugin (#25362) -615b48aca6runtime: add more Nvim-only highlight groups to Vim syntax -aee6f08ce1runtime: do not allow breakcheck inside runtime path calculation -df297e3c2bruntime: don't set gx mapping if already mapped (#24262) -9176b5e10aruntime: respect 'fileignorecase' when sourcing (#24344) -dbb840da01runtime: respect 'rtp' order for all runtime files (#24335) -70a0049296runtime: source c ftplugins in correct order (#27377) -d431a4d410runtime: source old color scheme in bundled color schemes (#26641) -3ab6f60dc8runtime: update 'vim' color scheme to use new tree-sitter groups -67fba9affaruntime/tutor: don't try to close fold when there is none (#24953) -ee56daebb6shada: update deleted marks (#24936) -517dfdf0fcshada: update marks when using delmarks! (#24978) -4d52b0cf67showcmd: clear the rest properly (#28420) -fcd9905291sign: avoid deleting from sign map while looping over it (#27158) -a84b454ebesign: do not error when defining sign without attributes (#26106) -a5ade3c63dsnippet: correct indent with newline -4625394a76snippet: do not add extra indent on newlines (#28538) -a1bdf2852dsnippet: remove misleading comment about TM_FILENAME_BASE (#26465) -8c044f0862spell: always accept ':' as filename char in 'spellfile' (#27172) -a803bff89cspell: extmark with spell=false should disable spell (#23400) -eceb2dffcespell: splice extmarks on :spellrepall (#23929) -aa65bd478astartup: "nvim -l foo.lua" may not set arg0 #24161 -628f6cce80startup: don't truncate when printing with -l (#24216) -c0fa721adestartup: make recovery mode work without --headless (#24477) -8e739af064startup: multiprocess startuptime #26790 -8f10362cdcstartup: only send one default_colors_set event during startup -559c4cfd52startup: run embedded Nvim with real path (#24282) -b21d960119startup: set full_screen when in ex_mode -9637b7dae4startup: stop TUI properly when quitting at swap dialog (#25337) -d7359a8742startup: trigger UIEnter for the correct channel (#25860) -01e273c340statuscolumn: don't update clicks if current width is 0 (#24459) -afd0c648a8statuscolumn: force full redraw when signcolumn is invalid (#24859) -dc6c11394bstatuscolumn: update number hl for each screen line (#25277) -a4b2400804statusline: also allow right click when 'mousemodel' is "popup*" (#23258) -4ecf6fdfd8statusline: bail out properly on negative row (#23535) -70da793c5estatusline: corrupted screen with minwid sign item in 'statuscolumn' (#23823) -d7bb19e013statusline: fill for double-width char after moving items (#24207) -54f5602038statusline: fix uninitialized variable and possible overflow -9f15a18fa5statusline: missing offset when showing 'keymap' (#27270) -7b973c71eastatusline: redraw when VIsual_mode changes (#23933) -dbc0fa9bd6stdpath: remove duplicate directories (#26653) -1907abb4c2stream: do not close handle if it is already closing (#26537) -9dd48f7832substitute: properly check if preview is needed (#23809) -9753cda591syntax: use correct diagnostic group for checkhealth (#23538) -400b7842a9termcap: escape escapes in passthrough sequence (#26301) -e527842211termcap: only call callback for requested capabilities (#26546) -ffeb31c2f9termcap: set 'nested' on TermResponse autocommand -b7831c7f99termcap: use tmux passthrough sequence when running in tmux (#26281) -e6d3f87dfdtermdebug: handle partial lines passed to callback (#22950) -c413b42c45termdebug: prompt mode breaks with &splitbelow set -8aad4b8425termdebug: send SIGINT when interrupting prompt mode -af78060b18termdebug: trim suffixed "\r" in CommOutput -684e93054bterminal: assign channel to terminal earlier (#25771) -82b1a389baterminal: avoid Insert mode in Terminal buffer (#25820) -99288ecc77terminal: block input when there is pending TermRequest (#27589) -f2ce31d3dcterminal: call validate_cursor() before screen update (#24425) -e09adfdcffterminal: check if mouse on statusline/tabline/winbar/vsep (#26892) -e115732465terminal: check terminal size at end of screen update (#25480) -120c4ec855terminal: disable reflow again -c881092ffeterminal: don't lose focus on <MouseMove> (#25845) -16a416cb3cterminal: don't pass incomplete UTF-8 sequence to libvterm (#27922) -d0d132fbd0terminal: don't send unknown special keys to terminal (#24378) -74776dfb2aterminal: fix duplicate recording with mouse click (#28103) -21d466c1b9terminal: forward horizontal mouse scrolling (#24552) -d401b33314terminal: handle horizontal scrolling in another window (#24828) -5e78fd7784terminal: ignore $VIM and $VIMRUNTIME in pty jobs -0a7fda6fa0terminal: include modifiers when forwarding mouse (#24549) -d4c2fc6ff6terminal: keep focus when scrolling number column of another window (#25848) -5ca6c9e046terminal: make backslashes in 'shell' work on Windows -aba954b662terminal: never propagate $COLORTERM from outer env (#26440) -b74262a336terminal: send Shift-Home Shift-End Ctrl-Home Ctrl-End (#24418) -0fd8eb8aaeterminal: set $COLORTERM unconditionally in :terminal (#24763) -fa17a5ab49terminal: use terminal buffer for TermRequest autocommand (#26974) -5999214c24termkey: accept BEL (0x07) as OSC terminator -ce2f770aaatermkey: do not sign extend mode value -50f5864dd2termkey: include IO header on Windows -52e6059415test: call separate_arguments() correctly to honor $BUSTED_ARGS (#26905) -c5528e7fd8test: clean up inline virtual text tests a little -380b634ac9test: fix "indeterminism" warnings in UI tests -f4c97da262test: fix strings_spec.lua for AArch64 -477458f7bftest: more tests for marktree -d8e330bcectest: remove test/compat.lua -a7bbda121dtest: typing -8861ad83fdtest/tui_spec: pass the expected NULL-sentinel to execl() -f859d16aeatests: set SHELL=sh #24941 -3d44340ceatests: use more global highlight definitions -e9bfbe99cdtextformat: remove unnecessary changed_bytes() (#26027) -255e547e18timer: allow timer_info() to get info about current timer -a8131aee9etohtml: replace hex escape with digit escape (#27728) -0246f1a897tohtml: set filetype of generated HTML to `html` -ccc0980f86treesitter: Use the correct replacement args for #gsub! directive (#23015) -71d9b7d15ctreesitter: _trees may not be list-like -a4743487b7treesitter: `language.add` - only register parser if it exists -4a8bf24ac6treesitter: adjust indentation in inspector highlights (#26302) -ef64e225f6treesitter: allow foldexpr without highlights (#23672) -6a264e0897treesitter: allow optional directive captures (#28664) -cf612c64b0treesitter: allow passing lang to vim.treesitter.get_node() now correctly takes opts.lang (#26360) -32849d5667treesitter: avoid # of nil in _query_linter -3fd7449d5atreesitter: check that buf is loaded in autocommands (#25679) -e7f50f43c8treesitter: clip end row early -6b19170d44treesitter: correctly calculate bytes for text sources (#23655) -bd5008de07treesitter: correctly handle query quantifiers (#24738) -fba18a3b62treesitter: do not calc folds on unloaded buffers -c30ebb17f6treesitter: document more standard highlight groups -040369e1e4treesitter: don't forcefully open folds -72ed99319dtreesitter: don't invalidate parser when discovering injections -4607807f9ftreesitter: don't update fold if tree is unchanged -26b5405d18treesitter: enforce lowercase language names (#28546) -3a8265266etreesitter: escape "\" in :InspectTree #28613 -369f58797dtreesitter: escape quotes in :InspectTree view #24582 -6e45567b49treesitter: fix TSNode:tree() double free (#24796) -50a03c0e99treesitter: fix another TSNode:tree() double free -7c6f9690f7treesitter: fix indexing in foldexpr -01b91deec7treesitter: fix parens stacking in inspector display (#26304) -f40a109716treesitter: fix trim predicate -1f551e068ftreesitter: fixup for InspectTree -26cc946226treesitter: foldexpr tweaks -e85e7fc7bctreesitter: handle empty region when logging (#24173) -12faaf40f4treesitter: highlight injections properly -6f75facb9dtreesitter: improve vim.treesitter.foldexpr -6c8387067dtreesitter: inspect-tree remember opts on buf change -8179d68dc1treesitter: logger memory leak -b6e339eb90treesitter: make InspectTree correctly handle nested injections (#26085) -3af59a415ctreesitter: make Visual hl work consistently with foldtext (#25484) -c7e7f1d4b4treesitter: make foldexpr work without highlighting (#24167) -0211f889b9treesitter: make sure injections don't return empty ranges (#24595) -0df681a91dtreesitter: make tests for memoize more robust -7fa292c52dtreesitter: outdated highlight due to tree with outdated region -617d1b28d6treesitter: prefix treesitter types with vim -90a12d4a16treesitter: prepare highlight states for [s, ]s -7e5ce42977treesitter: properly combine injection.combined regions -19a793545ftreesitter: redraw added/removed injections properly (#23287) -7a76fb8547treesitter: remove more double recursion -e124672ce9treesitter: reset cursor max_start_depth -7d97150084treesitter: return correct match table in iter_captures() -3b29b39e6dtreesitter: revert to using iter_captures in highlighter -315c711700treesitter: set cursor position when opening inspector -48085e40bbtreesitter: stop() should treat 0 as current buffer #24450 -32dc484ec9treesitter: support subfiletypes in get_lang (#23605) -b6fdde5224treesitter: text alignment in checkhealth vim.treesitter -0f85aeb478treesitter: treecursor regression -26143d7a5ctreesitter: update @markup default links -9ff59517cbtreesitter: update c queries -c44d819ae1treesitter: update folds in all relevant windows (#24230) -ffb340bf63treesitter: update folds only once on InsertLeave -edf9a897f0treesitter: update highlights for query (#23699) -b697c0cd4ftreesitter: update lua parser and queries (#24148) -ad95b36985treesitter: update markdown parser and queries (#24429) -39a0e6bf3ctreesitter: update parsers and queries -3d4eb9d544treesitter: update queries -c97de026e3treesitter: update vimdoc and vimscript queries -dc7ccd6bcatreesitter: use 0 as initial value for computing maximum (#27837) -7bc5ee7f93treesitter: use proper query syntax for inspector (#26274) -00e6651880treesitter: use tree range instead of tree root node range -8c9dab3e0dtreesitter: use vim.highlight.priorities instead of hardcoded 100 (#24052) -674f2513d4treesitter: validate language alias for injections -2bf3e82676treesitter: validate window before updating preview highlights -ab2811746etreesitter playground: fix the wrong range of a node displayed i… (#23209) -f85aa2e67ftreesitter.c: improve comments on fenv usage -c5b9fb2f25treesitter.foldexpr: check for all insert submodes -b3bda2f043tui: `space_buf` overflow when clearing screen (#27352) -cb2b5e2780tui: disable DECRQM and DECRQSS queries for Terminal.app (#28453) -405bad5e08tui: do not toggle cursor visibility when flushing the buffer (#26055) -b76cc974b9tui: don't forget to update cursor visibility (#26523) -911f3d9623tui: don't overwrite an assertion faliure message on exit -168e69ae01tui: don't set cursor color when there is none (#28236) -5a08b5be3ctui: don't set tty background if &bg was set before VimEnter (#23701) -00b7428b3btui: don't use DECRQSS in screen or tmux (#28086) -846714ca3etui: don't use tui->params[] for 'termsync' (#26565) -197827321atui: grid_clear properly clears the screen -884a83049btui: grow termkey's internal buffer for large escape sequences (#26309) -ad867fee26tui: handle cursor visibility properly (#26091) -fd50185492tui: initialize clear attrs with current terminal background -c26b39a9aatui: make :cquit work properly with remote TUI (#25313) -3ae62c4706tui: make disabling title restore old title from stack (#23585) -4c31a1b807tui: make setcellwidths() work for non-ambiwidth chars (#28322) -4f235e3caftui: position cursor at bottom-left before stopping (#23369) -0f1b511f23tui: redraw on SIGWINCH even if size didn't change -8e69716953tui: restore title before exiting alternate screen (#23776) -999e167a52tui: start flush earlier (#26463) -367e52cc79tui: use buflen to calculate remaining buffer size (#26942) -3198598e69tui: use uv_timer_t instead of TimeWatcher for input (#26435) -0ce065a332tui: v:argv does not report the original argv[0] #24015 -bc6fc0123dtutor: Tutor steps don't work on Windows #25251 -bf5703042btutor: don't use concealed text in expected lines #24316 -e34c23b701tutor: set a value for ":syntax iskeyword" (#27833) -04232a19cctype: remove incorrect arguments from vim.rpc* -21152f7905types: add more annotations to eval.lua -b7d5b55f74types: add some return/parameter type annotations (#24867) -e6947bb1e8types: make filetype.add parameters optional -191cca2566types: move type annotation for `IterMod` -813dd36b72types: rename win_get_config return type to win_config -b3342171d5typing: vim.fn.execute -1355861b92typval: don't treat v:null as truthy (#23281) -0592fd5e17ui: "resize -1" with cmdheight=0 #24758 -ab1c2220f0ui: activating all ext capabilities without remote UI #28555 -5b111a8f00ui: adjust 'smoothscroll' for inner dimensions -389f5ca39dui: adjust the cursor when inserting virtual text -046c9a83f7ui: always use stl/stlnc fillchars when drawing statusline (#25267) -0c86828ac5ui: avoid ambiguity about chunk that clears part of line (#24982) -e778e01161ui: avoid recursiveness and invalid memory access #28578 -0ce3910868ui: cursor pos with left gravity inline virt_text at eol (#24329) -91a4938edfui: data corruption in remote_ui_raw_line -1de82e16c1ui: delay win_viewport until screen update #24182 -a916523574ui: doesn't trigger au event when enter is false -b5a38530baui: don't force 'cmdheight' to zero with ext_messages -fdc8e966a9ui: don't send empty grid_line with redrawdebug=compositor (#23899) -13f55750e9ui: empty line before the next message after :silent command -d41b8d4758ui: ext_cmdline should not move cursor to curwin -a38d7f9984ui: fix cursor position with multiple inline virtual text -e0707d3529ui: fix edge case around flushing -75f350aac6ui: fix incorrect highlighting when virtual text next to match -332b70d2edui: fix incorrect highlighting when virtual text wraps with number -0c7fa3bdccui: fix multi-byte characters highlight in virtual text -a37c990483ui: fix overflowing nowrap virtual text not displaying if tab follows -5d7afb2e9fui: fix tabs not being spaced properly after virtual text with no wrap -34d862942cui: fix virtual text not displaying when two overlapping inlines (nowrap) -c5bf838f8aui: fix visual and search highlighting interfering with virtual text -1936285d98ui: fixes incorrect rendering when virtual text is not visable and nowrap -64e8a3c4d1ui: handle virtual text with multiple hl in more cases (#25304) -981acc2922ui: propagate line wrapping state on grid_line events -b8c1b36061ui: set 'cmdheight' to zero for all open tabpages -a8522f02e9ui: startup intro message should be visible with ext_multigrid -1cd7824dd6ui: trigger TabNewEntered after split new tab -7626f431d8ui: update ext_ui widgets when attaching non-remote UI -128091a256ui: wrong cursor position with left gravity inline virt text at eol -a9418ef8cfui: wrong display with 0-width inline virt_text at eol (#24854) -e8b3ed74bcui-ext: "scroll_delta" handle topfill and skipcol (#24249) -43d66c0ebbui-ext: send title to newly-attached UI -519b9929e9ui.open: some URLs fail on Windows -4d654472e6ui_client: check return code of dup() -633bf61d3bui_client: check return value of channel_job_start (#27729) -71ad771ea4ui_compositor: only reset skipstart at first column (#24776) -840749d6c9undo: fix crash caused by checking undolevels in wrong buffer -c0a29931e2unhide: close floating windows first (#25318) -9afbfb4d64unittests: ignore __s128 and __u128 types in ffi -9e79f7433eusercmd: Fix buffer overflow in uc_list() (#23225) -9802de9334userfunc: fix possible out of bound access -5a8fe0769cvim.deprecate: show deprecation warning in devel versions as well -ca6dbf3558vim.iter: use correct cmp function when truncating tail in `take` (#27998) -e15991c811vim.json: properly treat luanil options as booleans (#28622) -fec5e3ab24vim.region: handle multibyte inclusive selection properly (#26129) -2afb04758cvim.system: close check handle (#24270) -9b7cf4f0bevim.system: don't process non-fast events during wait() (#27300) -a44521f46evim.system: let on_exit handle cleanup after kill -6d5f12efd2vim.system: make timeout work properly -57adf8c6e0vim.ui: open() may wait indefinitely #28325 -e644e7ce0bvim.ui.open: return (don't show) error message -fd085d9082vim.ui.open: try wslview before explorer.exe #28424 -5e4a5f1aaavim.ui.open: use explorer.exe instead of wslview #26947 -6cc76011cawatchfiles: skip Created events when poll starts (#23139) -9bd4a28079window: :close crash if WinClosed from float closes window (#27794) -731e7f51eewindow: :close crash with autocmd, floats and tabpage (#27793) -33dfb5a383window: :close may cause Nvim to quit with autocmd and float -2cbfa4b9afwindow: don't go to unfocusable float when closing (#28455) -a47be0b2d9window: prevent win_size_restore from changing cmdheight -4bfc7802f0windows: set stdout to binary mode for --api-info PERFORMANCE -------------------------------------------------------------------------------- -a9c551e5e3cache breakindent/showbreak width in win_lbr_chartabsize -b5653984e5don't decode utf8 character multiple times in getvcol() -cca8a78ea2improve utf_char2cells() performance (#27353) -2f2f12122fremove loop for computing last position in getvcol() -32a4c9f4f9remove redundant strlen in skipwhite (#26177) -cdf848a314reuse fast character size calculation algorithm from getvcol() -2289ca273ccolumn: avoid counting when max signs are removed from a range -4a34da82c1column: keep track of number of lines that hold up the 'signcolumn' -f4001d27efcolumn: only invalidate lines affected by added sign -7f084770c2diagnostic: avoid table copies to filter by severity (#28491) -1cb6040554events: store autocommands in flat vectors (#23256) -9af2be292dextmarks: add metadata for efficient filtering of special decorations -929e1b7f1cextmarks: avoid unnecessary invalidations for virt_text (#27435) -19fb573ad9extmarks: avoid unnecessary marktree traversal with folds (#24306) -d44ed3a885extmarks: better track whether namespace has extmarks (#28615) -ef94fb69c6extmarks: don't handle inline virt_text if there is none (#24322) -8bb67d64e2fs: normalize path only once in fs.dir -40db569014iter: make ListIter.totable more efficient (#23714) -ef1801cc7citer: reduce number of table allocations -dcdefd0428loader: use a quicker version of vim.fs.normalize -648f777931lsp: load buffer contents once when processing semantic tokens responses (#23484) -2f4792943alsp: only joinpath for dirs in watchdirs -edf05b005flsp: process semantic tokens response in a coroutine that yields every 5ms (#23375) -79a5b89d66lsp: reduce polling handles for workspace/didChangeWatchedFiles (#23500) -4d3a04279dlsp: remove grouping logic from lsp.status (#24096) -de28a0f84clsp: replace file polling on linux with per dir watcher (#26108) -7e97c773e3lsp: use async fs_stat for file watching on linux (#26123) -cdd87222c8lua: avoid spairs in vim.validate happy path -c5af5c0b9alua: faster vim.deprecate() #28470 -c5990f2cdcos/env: os_getenv() allocation when there is no env var set -18e62c1bdbredraw: only redraw Visual area when cursor has moved (#27340) -94085cfce8redraw: reduce redraw with undo and extmarks or 'spell' (#27442) -516b173780rtp: reduce rtp scans (#24191) -0e11bf0e1asubstitute: don't reallocate new_start every time (#24997) -4fd852b8cbtreesitter: cache fold query (#24222) -07080f67fetreesitter: do not scan past given line for predicate match -c0cb1e8e94treesitter: filter out trees outside the visible range early -2b6c9bbe7ftreesitter: incremental foldupdate -3ba930844ctreesitter: insert/remove items efficiently (#23443) -a76b689b47ui-ext: approximate scroll_delta when scrolling too much (#24234) -0d1bc795f8ui_client: skip some initialization not necessary for ui client -14a5813c20vim.fs.normalize: use iterator BUILD -------------------------------------------------------------------------------- -c1ff216668actually export symbols on mac -664f2749e6add "ci" configure preset to reduce verbosity -1094d0c0dbadd CMAKE_C_FLAGS to --version output -1290121722add CMakePresets for deps build to reduce verbosity -ce6075f82aadd check to clint to prevent non-defs header includes -624de849deadd function add_target -82bb7bbc48add luajit runtime files when installing (#23514) -831d662ac6add sub-targets to the doc target -1bf29a0ae1add system lua include dir for lpeg -4cc69f45b4add ubsan default options -4880385809adjust clang-tidy warning exclusion logic -b80a8e2c16adjust how find order is prioritized -d561830a52align .clang-format rules with uncrustify config -c18d7941efallow sccache as compiler cache -cd097ab8ccallow using system rocks -54d357dce0bump lpeg to 1.1.0 (#25016) -7840760776bump minimum cmake version to 3.13 -7a5effb0f9bump required minimum libvterm version to 0.3.3 -2835b0daadbump uncrustify to version 0.77 -77c0d5415bbump uncrustify to version 0.78.1 -87a45ad9b9bump uncrustify to version 0.79.0 (#28756) -1798a4b5e9bump uncrustify version -826b95203abundle uncrustify -37bc73e9bcchange dependency URLs to cache variables -1086016477cmake cleanup -404fdb0f36cmake fixes -f8310beeedcreate BINARY_LIB_DIR directory before adding parser -9909668111create a text file for specifying dependency information -5a7280ba68create helper function for simplifying luarocks installation -f936a962d0create separate targets for nvim with and without runtime files -bcaff309b6disable UnusedIncludes from clangd -7a80e169c5disable all compiler warnings from dependencies -8fdc84d0aadisable conversion warnings for GCC -310fb2efc3disable conversion warnings for older GCC versions -a1c2da56ecdo not use GIT_REPOSITORY for local dependencies -da2130934bdon't allow Xcode as generator -543e0256c1don't define FUNC_ATTR_* as empty in headers (#26317) -24b60b0f71don't format deleted files -c2e47e7becdon't print installed files locally -f30844008bdownload busted from own neovim/deps repository -5abba97d77download dependencies with unreliable mirrors from deps repo -71384129f7download libiconv and gettext from `deps` repository -801ac2accbdrop diff.exe from windows builds -f0eb3ca916eliminate semicolons from --version string -397b92e02denable ASAN for MSVC -40139738ebenable IWYU on mac -25cfe3fd43enable formatting during rebase -517f0cc634enable lintlua for scripts/ dir #26391 -45fe4d11adenable lintlua for src/ dir #26395 -59d117ec99enable lintlua for test/ dir -c3836e40a2enable lintlua for test/unit/ dir #26396 -03c3f7887denforce PREFER_LUA -7cb29a572bensure `make clean` doesn't remove source files -0a3645a723find system luv on ubuntu -5bb17958c5fix "make iwyu" not working (#24873) -12ccea5967fix --luamod-dev not working properly (#24519) -75b80516d5fix link error for `_BitScanForward64` (#28173) -3f188bc533fix parser installation location -4fb1739e6ffix uncrustify -896b400bfffix universal mac builds -01e4a70d66improve git-cliff CHANGELOG output -ef92b5a994include all dependency directories when generating headers -187ae67735introduce variable DEPS_IGNORE_SHA for skipping dependency hash check -30a0299bc6make dependency URL variables non-cached (#23577) -b4da4783f9make genappimage.sh work with existing CMAKE_INSTALL_PREFIX -9f9cef1b56make lpeg an imported library -c1a05f6112make the vimdoc generation depend on the nvim target (#25876) -8b8e607284move luarocks and rocks installation to main build -d1bb9bffd5remove BUSTED_PRG dead code (#23340) -8206954a67remove LOG_DEBUG option -c48f94d1f3remove LOG_LIST_ACTIONS option and related code -353a4be7e8remove PVS -88366641adremove USE_BUNDLED_BUSTED option -ca243f06ddremove `lintdoc` from `lint` target -675522af18remove clint checks and style text covered by uncrustify -8be24fed8fremove config-specific find_package search for libuv -c40872acbdremove duplicate include directories in --version output -ebb10d6248remove functionaltest-lua target -8ae39eb584remove git requirement -9f8f287c61remove luarocks -339011f59cremove uninstall target -c8fd82b26dreorder compiler option setting -78239f0bbcreorganize cmake files -55793bcfa1revert accidental permission changes (#23319) -f31f260f0crework --version generation -a827003e30rework IWYU mapping files -e5d7003b02rework formatting to use add_glob_target -1997ef134aset char to always be signed -a75ef40f4cset deps default build type to Release (#27495) -a1550dbf0asilence new clang-tidy warnings -383018dbb8simplify policy-setting for dependencies -4788abf2dastop installing parser.h from treesitter -26033eee1dsuppress bugprone-reserved-identifier warnings -34509bbea3sync IWYU and clint to ignore the same headers (#26228) -0a8e66898dupdate builtin terminfo (#27272) -a388c852c4update libtermkey commit -706f871014update uncrustify to 0.76 -f4136c9d42use -O3 optimization for release builds -2c1e8f7e96use `GIT_REPOSITORY` for local URLs -e0d97d264fuse built nvim artifact to generate eval files (#25875) -3d3717de4euse libvterm commit with generated *.inc files -4f526b9fd8use neovim/libtermkey instead of neovim/deps for libtermkey -8405649f92use neovim/libvterm instead of neovim/deps for libvterm -2a57613b9buse stylua with add_glob_target -ae3eed53d6various build improvements -c8667c8756various cmake fixes -5cefec7349various cmake fixes -bec2ebebdavarious cmake fixes -c50951a4d0various fixes -4c91194611various fixes -bf0be0f63evarious improvements -404043e74cvendor libtermkey -e38a053692IWYU: export generated headers -71141e8cf5IWYU: fix headers for arabic.h -8b428ca8b7IWYU: fix includes for func_attr.h -f4aedbae4cIWYU: fix includes for undo_defs.h -17d81ac2abIWYU: map everything in the C99 specification -c2a5105e88IWYU: remove arabic_defs.h (#26235) -38a20dd89fIWYU: replace most private mappings with pragmas (#26247) -09541d514dIWYU: replace public-to-public mappings with pragmas (#26237) -39771b2238Makefile: add nvim to oldtest phony target -6823fdb20bPVS: exclude build directory -5d387c3388ci: ensure correct headers are used on macOS -dcb11c1091clint: don't allow INIT() in non-header files (#27407) -c98ef2d7c6clint: fix deprecation and linter warnings -7e2387f41bclint: more precise check for "defs" headers (#26236) -cf8b2c0e74iwyu: add a few more _defs.h mappings (#25435) -5f03a1eaablint: remove unnecessary clint.py rules -eecddd2416lint: use stylua without add_glob_target -25e51d393alua: vendor coxpcall -4dc86477b6luarc.json: disable luadoc-miss-see-name #24108 -fd9ac5aa8emakefile: remove a phony target uninstall (#24349) -978962f9a0release.sh: regenerate docs after changing NVIM_API_PRERELEASE (#28229) -9ca81b0259release.sh: set VIMRUNTIME when regenerating docs (#28765) -4399c4932drelease.sh: use git cliff, drop old script -d0ae529861scripts: allow a git ref for lsp_types #24377 -bfb81e1a85snap: remove obsolete snapcraft.yaml -981301d11fterminfo: include user capabilities in comments (#28066) -6801befcc5uninstall: don't build if installation manifest not found -345dcba629windows: set longPathAware in manifest #28389
Tests
Tests are broadly divided into unit tests (test/unit), functional tests (test/functional), and old tests (test/old/testdir/).
- Unit testing is achieved by compiling the tests as a shared library which is loaded and called by LuaJit FFI.
- Functional tests are driven by RPC, so they do not require LuaJit (as opposed to Lua).
You can learn the key concepts of Lua in 15 minutes. Use any existing test as a template to start writing new tests.
Tests are run by /cmake/RunTests.cmake file, using busted (a Lua test-runner).
For some failures, .nvimlog (or $NVIM_LOG_FILE) may provide insight.
Depending on the presence of binaries (e.g., xclip) some tests will be
ignored. You must compile with libintl to prevent E319: The command is not available in this version errors.
Layout
/test/benchmark: benchmarks/test/functional: functional tests/test/unit: unit tests/test/old/testdir: old tests (from Vim)/test/config: contains*.infiles which are transformed into*.luafiles usingconfigure_fileCMake command: this is for accessing CMake variables in lua tests./test/includes: include-files for use by luajitffi.cdefC definitions parser: normally used to make macros not accessible via this mechanism accessible the other way./test/*/preload.lua: modules preloaded by busted--helperoption/test/**/testutil.lua: common utility functions in the context of the test runner/test/**/testnvim.lua: common utility functions in the context of the test session (RPC channel to the Nvim child process created by clear() for each test)/test/*/**/*_spec.lua: actual tests. Files that do not end with_spec.luaare libraries like/test/**/testutil.lua, except that they have some common topic.
Running tests
Executing Tests
To run all tests (except "old" tests):
make test
To run only unit tests:
make unittest
To run only functional tests:
make functionaltest
Legacy tests
To run all legacy Vim tests:
make oldtest
To run a single legacy test file you can use either:
make oldtest TEST_FILE=test_syntax.vim
or:
make test/old/testdir/test_syntax.vim
- Specify only the test file name, not the full path.
Debugging tests
-
Each test gets a test id which looks like "T123". This also appears in the log file. Child processes spawned from a test appear in the logs with the parent name followed by "/c". Example:
DBG 2022-06-15T18:37:45.226 T57.58016.0 UI: flush DBG 2022-06-15T18:37:45.226 T57.58016.0 inbuf_poll:442: blocking... events_enabled=0 events_pending=0 DBG 2022-06-15T18:37:45.227 T57.58016.0/c UI: stop INF 2022-06-15T18:37:45.227 T57.58016.0/c os_exit:595: Nvim exit: 0 DBG 2022-06-15T18:37:45.229 T57.58016.0 read_cb:118: closing Stream (0x7fd5d700ea18): EOF (end of file) INF 2022-06-15T18:37:45.229 T57.58016.0 on_process_exit:400: exited: pid=58017 status=0 stoptime=0 -
You can set
$GDBto run functional tests under gdbserver:GDB=1 TEST_FILE=test/functional/api/buffer_spec.lua TEST_FILTER='nvim_buf_set_text works$' make functionaltestRead more about filtering tests.
Then, in another terminal:
gdb -ex 'target remote localhost:7777' build/bin/nvimIf
$VALGRINDis also set it will pass--vgdb=yesto valgrind instead of starting gdbserver directly.See
nvim_argvin https://github.com/neovim/neovim/blob/master/test/functional/testnvim.lua. -
Hanging tests can happen due to unexpected "press-enter" prompts. The default screen width is 50 columns. Commands that try to print lines longer than 50 columns in the command-line, e.g.
:edit very...long...path, will trigger the prompt. Try using a shorter path, or:silent edit. -
If you can't figure out what is going on, try to visualize the screen. Put this at the beginning of your test:
local Screen = require('test.functional.ui.screen') local screen = Screen.new() screen:attach()Then put
screen:snapshot_util()anywhere in your test. See the comments intest/functional/ui/screen.luafor more info.
Filtering Tests
Filter by name
Tests can be filtered by setting a pattern of test name to TEST_FILTER or TEST_FILTER_OUT.
it('foo api',function()
...
end)
it('bar api',function()
...
end)
To run only test with filter name:
TEST_FILTER='foo.*api' make functionaltest
To run all tests except ones matching a filter:
TEST_FILTER_OUT='foo.*api' make functionaltest
Filter by file
To run a specific unit test:
TEST_FILE=test/unit/foo.lua make unittest
or
cmake -E env "TEST_FILE=test/unit/foo.lua" cmake --build build --target unittest
To run a specific functional test:
TEST_FILE=test/functional/foo.lua make functionaltest
or
cmake -E env "TEST_FILE=test/functional/foo.lua" cmake --build build --target functionaltest
To repeat a test:
BUSTED_ARGS="--repeat=100 --no-keep-going" TEST_FILE=test/functional/foo_spec.lua make functionaltest
or
cmake -E env "TEST_FILE=test/functional/foo_spec.lua" cmake -E env BUSTED_ARGS="--repeat=100 --no-keep-going" cmake --build build --target functionaltest
Filter by tag
Tests can be "tagged" by adding # before a token in the test description.
it('#foo bar baz', function()
...
end)
it('#foo another test', function()
...
end)
To run only the tagged tests:
TEST_TAG=foo make functionaltest
NOTE:
TEST_FILEis not a pattern string likeTEST_TAGorTEST_FILTER. The given value toTEST_FILEmust be a path to an existing file.- Both
TEST_TAGandTEST_FILTERfilter tests by the string descriptions found init()anddescribe().
Writing tests
Guidelines
- Luajit needs to know about type and constant declarations used in function
prototypes. The
testutil.lua
file automatically parses
types.h, so types used in the tested functions could be moved to it to avoid having to rewrite the declarations in the test files.#defineconstants must be rewrittenconstorenumso they can be "visible" to the tests.
- Use pending() to skip tests
(example).
Do not silently skip the test with
if-else. If a functional test depends on some external factor (e.g. the existence ofmd5sumon$PATH), and you can't mock or fake the dependency, then skip the test viapending()if the external factor is missing. This ensures that the total test-count (success + fail + error + pending) is the same in all environments.- Note:
pending()is ignored if it is missing an argument, unless it is contained in anit()block. Provide empty function argument if thepending()call is outsideit()(example).
- Note:
- Really long
source([=[...]=])blocks may break Vim's Lua syntax highlighting. Try:syntax sync fromstartto fix it.
Where tests go
Tests in /test/unit and /test/functional are divided into groups
by the semantic component they are testing.
- Unit tests
(test/unit) should
match 1-to-1 with the structure of
src/nvim/, because they are testing functions directly. E.g. unit-tests forsrc/nvim/undo.cshould live intest/unit/undo_spec.lua. - Functional tests
(test/functional)
are higher-level (plugins and user input) than unit tests; they are organized
by concept.
- Try to find an existing
test/functional/*/*_spec.luagroup that makes sense, before creating a new one.
- Try to find an existing
Lint
make lint (and make lualint) runs luacheck
on the test code.
If a luacheck warning must be ignored, specify the warning code. Example:
-- luacheck: ignore 621
http://luacheck.readthedocs.io/en/stable/warnings.html
Ignore the smallest applicable scope (e.g. inside a function, not at the top of the file).
Configuration
Test behaviour is affected by environment variables. Currently supported (Functional, Unit, Benchmarks) (when Defined; when set to 1; when defined, treated as Integer; when defined, treated as String; when defined, treated as Number; !must be defined to function properly):
-
BUSTED_ARGS(F) (U): arguments forwarded tobusted. -
CC(U) (S): specifies which C compiler to use to preprocess files. Currently only compilers with gcc-compatible arguments are supported. -
GDB(F) (D): makes nvim instances to be run undergdbserver. It will be accessible onlocalhost:7777: usegdb build/bin/nvim, typetarget remote :7777inside. -
GDBSERVER_PORT(F) (I): overrides port used forGDB. -
LOG_DIR(FU) (S!): specifies where to seek for valgrind and ASAN log files. -
VALGRIND(F) (D): makes nvim instances to be run undervalgrind. Log files are namedvalgrind-%p.login this case. Note that non-empty valgrind log may fail tests. Valgrind arguments may be seen in/test/functional/testnvim.lua. May be used in conjunction withGDB. -
VALGRIND_LOG(F) (S): overrides valgrind log file name used forVALGRIND. -
TEST_COLORS(F) (U) (D): enable pretty colors in test runner. Set to true by default. -
TEST_SKIP_FRAGILE(F) (D): makes test suite skip some fragile tests. -
TEST_TIMEOUT(FU) (I): specifies maximum time, in seconds, before the test suite run is killed -
NVIM_LUA_NOTRACK(F) (D): disable reference counting of Lua objects -
NVIM_PRG(F) (S): path to Nvim executable (default:build/bin/nvim). -
NVIM_TEST_MAIN_CDEFS(U) (1): makesffi.cdefrun in main process. This raises a possibility of bugs due to conflicts in header definitions, despite the counters, but greatly speeds up unit tests by not requiringffi.cdefto do parsing of big strings with C definitions. -
NVIM_TEST_PRINT_I(U) (1): makescimportprint preprocessed, but not yet filtered throughformatcheaders. Used to debugformatc. Printing is done with the line numbers. -
NVIM_TEST_PRINT_CDEF(U) (1): makescimportprint final lines which will be then passed toffi.cdef. Used to debug errorsffi.cdefhappens to throw sometimes. -
NVIM_TEST_PRINT_SYSCALLS(U) (1): makes it print to stderr when syscall wrappers are called and what they returned. Used to debug code which makes unit tests be executed in separate processes. -
NVIM_TEST_RUN_FAILING_TESTS(U) (1): makesitprun tests which are known to fail (marked by setting third argument totrue). -
NVIM_TEST_CORE_*(FU) (S): a set of environment variables which specify where to search for core files. Are supposed to be defined all at once. -
NVIM_TEST_CORE_GLOB_DIRECTORY(FU) (S): directory where core files are located. May be.. This directory is then recursively searched for core files. Note: this variable must be defined for any of the following to have any effect. -
NVIM_TEST_CORE_GLOB_RE(FU) (S): regular expression which must be matched by core files. E.g./core[^/]*$. May be absent, in which case any file is considered to be matched. -
NVIM_TEST_CORE_EXC_RE(FU) (S): regular expression which excludes certain directories from searching for core files inside. E.g. use^/%.deps$to not search inside/.deps. If absent, nothing is excluded. -
NVIM_TEST_CORE_DB_CMD(FU) (S): command to get backtrace out of the debugger. E.g.gdb -n -batch -ex "thread apply all bt full" "$_NVIM_TEST_APP" -c "$_NVIM_TEST_CORE". Defaults to the example command. This debug command may use environment variables_NVIM_TEST_APP(path to application which is being debugged: normally either nvim or luajit) and_NVIM_TEST_CORE(core file to get backtrace from). -
NVIM_TEST_CORE_RANDOM_SKIP(FU) (D): makescheck_coresnot check cores after approximately 90% of the tests. Should be used when finding cores is too hard for some reason. Normally (on OS X or whenNVIM_TEST_CORE_GLOB_DIRECTORYis defined and this variable is not) cores are checked for after each test. -
NVIM_TEST_RUN_TESTTEST(U) (1): allows runningtest/unit/testtest_spec.luaused to check how testing infrastructure works. -
NVIM_TEST_TRACE_LEVEL(U) (N): specifies unit tests tracing level:0disables tracing (the fastest, but you get no data if tests crash and there no core dump was generated),1leaves only C function calls and returns in the trace (faster than recording everything),2records all function calls, returns and executed Lua source lines.
-
NVIM_TEST_TRACE_ON_ERROR(U) (1): makes unit tests yield trace on error in addition to regular error message. -
NVIM_TEST_MAXTRACE(U) (N): specifies maximum number of trace lines to keep. Default is 1024.