neovim/runtime/doc/diagnostic.txt
Justin M. Keyes 27fb62988e NVIM v0.10.0
For notable changes, see runtime/doc/news.txt (or `:help news` in Nvim).
Following is a list of fixes/features commits.

BREAKING
--------------------------------------------------------------------------------
- 649dd00fe2 remove deprecated functions
- 0370e4def0 remove neovim qt
- 880f7d12fe remove vimballs (#22402)
- c48b1421af rename "playground" => "dev" #23919
- 2f85bbe615 rewrite TOhtml in lua
- abe39f2b24 api: change return type of nvim_win_text_height to Dict (#24365)
- 7180ef6901 api: nvim_open_win: noautocmd blocks all autocmds #28192
- 700cab0068 events: trigger CursorMoved later on switching window (#23711)
- e4a136f713 ex_cmds: remove :behave
- e5e0bda41b lsp: add vim.lsp.status, client.progress and promote LspProgressUpdate (#23958)
- 5a363ccac8 lsp: deprecate trim_empty_lines
- 5a2536de0c lsp: move changetracking to separate file (#26577)
- 58618d208a lsp: promote LspRequest to a full autocmd and enrich with additional data (#23694)
- 1b9ccd38a1 lsp: rename vim.lsp.get_active_clients to get_clients (#24113)
- eb1f0e8fcc lsp: replace snippet parser by lpeg grammar
- 448907f65d lsp: vim.lsp.inlay_hint.get(), enable(), is_enabled() #25512
- 7caf0eafd8 lua: add stricter vim.tbl_islist() and rename old one to vim.tbl_isarray() (#16440)
- 747264320c mappings: remove #n as a notation for a function key (#17318)
- f7da472257 options: graduate shortmess+=f flag
- c3d1d9445c options: graduate some more shortmess flags
- 5df4fdf253 options: make OptionSet `v:` values use typval
- 881d17a113 options: remove compatible behaviours for vim 5.0 and earlier
- e19cc9c9b7 options: unify `set_option` and `set_string_option`
- db590e96d5 startup: "nvim -l" message does not end with newline #24215
- 2ca076e45f treesitter: incremental injection parsing
- f5dc453109 treesitter: new standard capture names
- fc0ee871de treesitter: remove deprecated legacy injection format
- 6debb18523 treesitter: remove duplicated diagnostic code (#24976)
- 18da6964cc vim.iter: remove vim.iter.map/filter/totable #26138
- 9b028bd64f vim.iter: rename xxback() => rxx() #28503
- 8d4a53fe6e vim.json: remove global options, "null", "array_mt" #24070
- 40ce857797 vim.ui: change open() to return `result|nil, errmsg|nil` #28612
- e0d92b9cc2 vim.ui: change open() to return pcall-like values #28502

FEATURES
--------------------------------------------------------------------------------
- a66b0fdfaa NVIM_APPNAME supports relative paths #25233
- c0beb8173f add .luarc.json (#24592)
- 14b7ffcf89 add __call typing for vim.inspect()
- ca7e488cfe add link in issue template to minimal config template
- 4bf47222c9 add vim.text module (#26069)
- 0ebc4de0ff allow opting in to builtin clipboard providers (#28083)
- e8d3c4cccb generate types and docs for v variables
- 29fe883aa9 ignore swapfile for running Nvim processes #25336
- 28d1640dd6 improve return type annotations for vim.api.*
- 199a990c9e report "build" in vim.version() #23925
- e688793253 tostring(vim.version())
- c559ab0ae6 update unicode tables (#27317)
- ecdb6465e2 vim.version() returns a Version object
- 4b60267f82 :source: source current ft=lua buffer as Lua code (#23802)
- 428edcde70 api: add forward and back mouse buttons
- 037ea6e786 api: add nvim__redraw for more granular redrawing
- ca9f6f5694 api: add nvim_tabpage_set_win (#27222)
- db8fe63a93 api: add nvim_win_text_height (#24236)
- 16513b3033 api: allow floats to be opened in non-current tabpage (#28480)
- 6b4970f6e0 api: allow open_win/win_set_buf in the cmdwin in some cases
- 5d921e28c1 api: allow win_close in cmdwin to close wins except previous
- 472271199e api: allow win_hide to close cmdwin or non-previous windows
- 6bba4beced api: make nvim_open_win support non-floating windows (#25550)
- b162adbb7c api: pass 0 to nvim_get_chan_info for current channel (#27321)
- 42bbc4fabc api: support abbreviations in nvim_set_keymap
- 98a4ed0a11 api: support getting abbreviations (#26868)
- d3d7d763f3 builtin: improve types
- 748bc4d22d clipboard: add OSC 52 clipboard support
- db57df04b6 clipboard: enable OSC 52 clipboard provider by default (#26064)
- 734848dc1a colorscheme: add semantic tokens modifiers to builtin color scheme
- 1e0996b572 colorscheme: update treesitter groups
- 73de98256c comment: add built-in commenting
- ae4ca4edf8 complete: support f flag for complete buffer part
- 01c51a4913 completion: support completing more string options
- ae3685798d decoration: allow conceal_char to be a composing char
- 30a5c28c87 decoration_provider: log errors as error messages
- 9711370c26 defaults: add :Inspect to right-click menu (#28181)
- 2613ba5000 defaults: enable 'termguicolors' by default when supported by terminal
- 513fc46195 defaults: improve :grep defaults #28545
- c26dc1f77c defaults: map Q and @x to repeat in Visual mode (#26495)
- 8758c6fb87 defaults: set g:netrw_use_errorwindow = 0 #24179
- 1d81d7a268 defaults: treat "•" as a list item prefix #24623
- 20b38677c2 defaults: use ripgrep (rg) for 'grepprg' if available
- 61063653b0 defaults: visual CTRL-R for LSP mappings #28537
- 4ee656e4f3 diagnostic: add `vim.diagnostic.count()` (#26807)
- 73034611c2 diagnostic: add default mappings for diagnostics (#16230)
- fc6d713dd8 diagnostic: add support for many namespaces filtering in GetOpts (#28045)
- 5ed9916a28 diagnostic: enable(…, opts)
- e780177506 diagnostic: filter diagnostics by specific severities (#24736)
- b13e63db1d diagnostic: goto functions jump to highest severity (#28490)
- 26765e8461 diagnostic: is_enabled, enable(…, enable:boolean)
- 9cb7e00b97 diagnostic: provide more control over virtual text display (#24724)
- ee41153a94 diagnostic: revert default behaviour of goto_next/prev()
- 07b60efd80 diagnostic: specify diagnostic virtual text prefix as a function
- a3b3978474 diagnostics: support numhl and linehl for diagnostic signs
- 0381f5af5b diff: grouping optimization for linematch algorithm
- 42333ea98d docs: generate builtin.txt (#24493)
- 9beb40a4db docs: replace lua2dox.lua
- 1d4a5cd185 eval: exists() function supports checking v:lua functions (#26485)
- 4a1ad676ce ex_cmds: no error on :lua with {range} and {code} (#27290)
- c2433589dc ex_cmds: ranged :lua #27167
- b04286a187 extmark: support proper multiline ranges
- 1c032ad703 extmark: window scoped extmark
- 68cb4a7405 extmarks: add "undo_restore" flag to opt out of undo-restoring
- 4e6f559b8c extmarks: add 'invalidate' property to extmarks
- c249058758 extmarks: add sign name to extmark "details" array
- bbd5c6363c extmarks: add virt_text_repeat_linebreak flag (#26625)
- 15e77a56b7 extmarks: subpriorities (relative to declaration order) (#27131)
- f0884f21fa extmarks: support hl_mode "combine" for inline virt_text (#24099)
- 372aa2eb3d float: add fclose command
- 35570e4a11 float: implement footer
- 4200a0f167 float: support toggle show float window
- 1233ac467d fold: transparent foldtext
- 71530cc972 folds: support virtual text format for 'foldtext' (#25209)
- 38b9c322c9 fs: add vim.fs.root (#28477)
- e3e6fadfd8 fs: expose join_paths as `vim.fs.joinpath` (#23685)
- bc67cf3ccd gen_help_html: add anchors to help tags #25112
- b0cf9c5fee gen_help_html: ignore pi_netrw.txt errors
- 81d8fce8f9 gen_help_html: non-default vimdoc.so parser
- da09f9b551 gen_lsp.lua: protocol.Methods #24504
- f41496ce74 gen_lsp.lua: sort by name, handle failure #24504
- 3692fd4c87 gen_lsp.lua: validate CLI args #26514
- 2ff2785c39 health: checkhealth buffer can show in a split window (#26714)
- 4382d2ed56 health: fold successful healthchecks #22866
- d1bc6fca71 health: list attached buffers in LSP report #23561
- 2877672d70 health: make :checkhealth support more split modifiers (#26731)
- ddda5e0a48 help: hide filename of "gO" outline using conceal #27547
- e72c0cd920 highlight: Allow hyphens (-) in highlight group names (#24714)
- 986bf7e78d highlight: add `FloatFooter` highlight group
- 574519d9d6 highlight: tweak default color scheme
- 64a14026d7 highlight: update default color scheme
- a79694a08e issue_template: instruct not to include a package manager
- 69ffbb76c2 iter: add `Iter.take` (#26525)
- cebc00603e l10n: update Turkish translations #24246
- fec51229c4 l10n: update Ukrainian translations (#24882)
- 996dd36c77 lsp: add actionable advice to lsp client quit error msg (#24510)
- 4ff3217bbd lsp: add fswatch watchfunc backend
- 643546b82b lsp: add handlers for inlay hints (#23736)
- 317c80f460 lsp: add method filter to get_active_clients (#24319)
- 6888607415 lsp: add more LSP defaults (#28500)
- 0fe86f7e24 lsp: add opts paramater to vim.lsp.codelens.refresh
- 131a1ee82d lsp: add original LSP Location as item's user_data in locations_to_items (#23743)
- f1775da07f lsp: add snippet API (#25301)
- db0ec84fb4 lsp: add type annotations for lsp.util.locations_to_items (#26694)
- f190f758ac lsp: add vim.lsp.buf.subtypes(), vim.lsp.buf.supertypes() (#28388)
- 451bc50d40 lsp: deprecate severity_limit
- e9b85acfbb lsp: enable workspace/didChangeWatchedFiles by default (#23190)
- 4a09c178a1 lsp: fallback to code-action command on resolve failure (#25464)
- 2f22ed6a00 lsp: handle multiple clients in omnifunc (#24381)
- 63b3408551 lsp: implement textDocument/diagnostic (#24128)
- 5e3cf9fb4b lsp: improve control over placement of floating windows (#24494)
- 15641f38cf lsp: include positionEncodings in default client capabilities
- ddd92a70d2 lsp: initial support for dynamic capabilities (#23681)
- ca5de9306c lsp: inlay hints #23984
- 350d818564 lsp: inlay_hint.is_enabled({filter}) #28523
- 33e1a8cd70 lsp: map K to hover by default #24331
- 97bea3163a lsp: more annotations
- 37079fca58 lsp: move inlay_hint() to vim.lsp (#24130)
- 12c2c16acf lsp: opt-in to dynamicRegistration for inlay hints (#24102)
- a49924a318 lsp: remove notify from vim.lsp.buf_detach_client (#25140)
- 8149bd089e lsp: report fswatch errors
- fb54e6980e lsp: set client offset_encoding if server supports positionEncoding
- 96e19533f6 lsp: set kind in select call for codelens #23889
- 9af3559643 lsp: set workDoneToken in initialize request (#28182)
- f736b075d3 lsp: snippet parsing using lpeg
- 134b9ec483 lsp: soft deprecate vim.lsp.for_each_buffer_client (#24104)
- 63f9c2da9a lsp: support completion itemDefaults
- 3f788e73b3 lsp: support connect via named pipes/unix domain sockets (#26032)
- 7e36c8e972 lsp: support for choice snippet nodes
- 5c40f3e86a lsp: support vim.lsp.ListOpts.loclist in location_handler()
- abd2352bd8 lsp: update LSP protocol 3.18 typings to date (#28730)
- cfd4a9dfaf lsp: use treesitter for stylize markdown
- d5063f4b29 lsp: vim.lsp.inlay_hint.enable(nil) applies to all buffers #28543
- c0952e62fd lua: add `vim.system()`
- 9248dd77ac lua: add hl priority opts on yank (#23509)
- 6425869771 lua: add meta file for vim submodules (#24525)
- 3734519e3b lua: add noref to deepcopy
- 7c661207cc lua: add ringbuffer (#22894)
- 877d04d0fb lua: add vim.func._memoize
- ab1edecfb7 lua: add vim.iter (#23029)
- d675bd01b1 lua: allow vim.F.if_nil to take multiple arguments (#22903)
- c379d72c49 lua: allow vim.wo to be double indexed (#20288)
- e52c25b761 lua: deprecate vim.tbl_add_reverse_lookup
- f1dfe32bf5 lua: enable(enable:boolean, filter:table) #28374
- 5b40a1c09d lua: implement Iter:join() (#26416)
- c01e624b07 lua: more specific error messages for vim.api type checking
- e1ff2c51ca lua: pass keys before mapping to vim.on_key() callback (#28098)
- 2db719f6c2 lua: rename vim.loop -> vim.uv (#22846)
- 6c0812d92e lua: specific error messages for type checking `opts` params
- fd089c8e50 lua: typing for vim.fn.* (#24473)
- 302d3cfb96 lua: use callable table as iterator in vim.iter (#23957)
- 51c754b62e lua: use keyset type information
- 8e5c48b08d lua: vim.fs.normalize() resolves ".", ".." #28203
- 7e70ca0b48 lua: vim.keycode (#22960)
- 9e86f473e0 lua: vim.region accepts getpos() arg (#22635)
- 4d04feb662 lua: vim.tbl_contains supports general tables and predicates (#23040)
- 48d533272e lua-types: types for vim.api.* (#24523)
- 25e7299707 man: allow opening pages in current window (#27861)
- 08db61b19b man: respect 'wrapmargin' when wrapping man pages (#24091)
- f9944a78bc meta: add types for vim.lpeg
- deb6fd6704 msgpack-rpc: show actual request id in error message
- 01fe6b9e6a msgpack_rpc: support out-of-order responses on `msgpack-rpc`
- 619407eb54 nvim_open_term: convert LF => CRLF (#26384)
- e98decf9a6 quickfix: support -q - to read 'errorfile' from stdin (#27303)
- 7b0123dd6a remote: avoid --remote-ui infinite loop (#24465)
- cca6c4c698 rpc: allow empty string key in msgpack => Vim conversion
- d0d4160dd1 runtime: highlight hl groups in syntax.txt (#25050)
- 5f4895200a scripts: add lsp_types.lua (#23750)
- 4e6096a67f server: allow embed with listen (#25709)
- 170c890dca shortmess: "q" flag fully hides recording message (#27415)
- d3582e102b statuscolumn: re-evaluate for every screen line (#25885)
- 224f303ee5 stdlib: add vim.base64 module (#25843)
- fa131de9ad tabline: middle mouse button now closes tab (#27522)
- c855eee919 term: enable reflow by default (#21124)
- cd1b14f027 termdebug: improve `:Evaluate` floating window (#26621)
- cffdf102d4 terminal: allow :terminal to take modifiers (#15427)
- 0c89854da1 terminal: close shell terminals automatically
- 7589336120 terminal: respond to OSC background and foreground request (#17197)
- beca827212 terminal: trigger TermRequest autocommand events (#22159)
- c6ec7fa8d7 treesitter: add 'injection.self' and 'injection.parent'
- 6cfca21bac treesitter: add `@injection.filename`
- 5d8ab32f38 treesitter: add a query editor (#24703)
- cb0a1a10b2 treesitter: add bash parser and queries
- bb15fa0356 treesitter: add folding for `InspectTree` (#27518)
- 9ce1623837 treesitter: add foldtext with treesitter highlighting (#25391)
- 31c4ed26bc treesitter: add injection language fallback (#24659)
- 28f54a7878 treesitter: add lang parameter to the query editor (#25181)
- 88c8803aa1 treesitter: add python parser and queries
- c194acbfc4 treesitter: add query_linter from nvim-treesitter/playground (#22784)
- af040c3a07 treesitter: add support for setting query depths
- 11844dde81 treesitter: bundle markdown parser and queries (#22481)
- 5e6240ffc2 treesitter: handle quantified fold captures
- f69658bc35 treesitter: highlight Lua files by default (#26824)
- 988b472d90 treesitter: highlight help files by default (#26347)
- 845d5b8b64 treesitter: improve query error message
- 189fb62032 treesitter: improved logging (#23638)
- c0b99bb1de treesitter: show root nodes in :InspectTree (#26944)
- cb46f6e467 treesitter: support URLs (#27132)
- ff6092b4ee treesitter: update Bash parser and queries to v0.21.0
- 8dda630ae9 treesitter: update C parser and queries to v0.21.0
- 3836eeb901 treesitter: update C queries from upstream
- aca4ad430b treesitter: update Lua parser and queries to v0.1.0
- 5e875ae8d0 treesitter: update Markdown parsers and queries to v0.2.1
- 8a3385dde7 treesitter: update Python parser and queries to v0.21.0
- 20dcbaaaf8 treesitter: update Vim parser and queries to v0.4.0
- 987dff6713 treesitter: update Vimdoc parser and queries to v2.4.0
- 1384bebd5a treesitter: update query parser to v0.2.0
- 668f16bac7 treesitter: upstream query omnifunc from playground (#23394)
- a478bf936b treesitter: use 0-based indexing to show ranges in `:InspectTree`
- ac8ed77afb tui: add 'termsync' option (#25871)
- 4ee9e58056 tui: query extended underline support using DECRQSS (#28052)
- b4b7ca2d54 tui: support DCS responses in TermResponse event (#26061)
- 622ae2f53e tui: support Super and Meta modifiers (#24357)
- a142670360 tui: support undercurl in WezTerm (#28037)
- 56627ca242 tui: use TermResponse event for OSC responses (#25868)
- 32b49448b2 tutor: add Japanese tutor #27268
- 9c2270b834 types: add `test/.luarc.json`
- d3a8e9217f ui: add chdir UI event (#27093)
- 6ea6b3fee2 ui: add support for OSC 8 hyperlinks (#27109)
- b72931e704 ui: allow non-zero 'cmdheight' with ext_messages
- 2615ed879e ui: allow to get the highlight namespace
- e38027ef69 ui: completeopt support popup like vim
- 2e4e12756a ui: indicate margins for the area used by win_viewport
- efa9b299a7 ui: inline virtual text
- dacd34364f ui-ext: make 'mousehide' into proper ui_option (#25532)
- 43ded8d358 version: unverbose ":version", ":verbose version" #24195
- 0a598c13b1 vim.deprecate: only issue warning if neovim version is high enough
- a767c046f4 vim.iter: add Iter:flatten  (#26786)
- af6e6ccf3d vim.ui: vim.ui.open, "gx" without netrw
- fa4b02fa67 vim.version: add `vim.version.le` and `vim.version.ge`
- 27a566f3f8 vimdoc: support Markdown code blocks (#25127)

FIXES
--------------------------------------------------------------------------------
- f5573fba3d Remove nested for_each_tree in TSTreeView (#26328)
- ae28ef327e adjust error message for error in UI event callback (#28200)
- ebe489d8f0 allow multiline message for echoerr (#25380)
- 592bc831ce avoid ui_grid_cursor_goto when drawing window separators
- d6483793e1 buffer overrun in lmpack_session_receive
- 3bbb0aa399 checkhealth warning even if init.lua exists #25306
- 5cb906e91c correct versions in deprecation warnings
- 118fd8367c deduplicate gen_cflags
- eb4676c67f disallow removing extmarks in on_lines callbacks (#23219)
- 6e9b204afb doc errors
- 77d3526a3d explain that user should run nvim with -V1 to see more information
- fd791db0ec fix ASAN errors on clang 17 (#25469)
- bb38c066a9 fix compiler warning from clang
- 478273a423 fix iter_matches call in query linter (#27496)
- bb7324292c flush UI state before blocking in vim.wait (#25938)
- 44d4ae448d function was renamed (#23772)
- 1dd700a8d9 gf fails on "foo/bar.txt:1:2" on Windows
- 6e703f778f handle argv not present in nvim_get_chan_info
- 56dc8b9212 heap-buffer-overflow in file_name_in_line
- 74b2f6c3d9 ignore non-existent properties during header generation
- f5a09f1b03 invoke changed_bytes when rewriting <Tab> char #25125
- b8273c9a33 lua annotations
- 69d49727d7 luacheck
- 4ce3159e24 missing case in setxattr error handling (#26176)
- 41fb98d6fa move fswatch linux check inside of vim.schedule (#27824)
- ba58c6f8a4 only attempt to close timer if not already closing (#26047)
- b400b947f3 prevent child processes from inheriting ui channel file descriptors
- 99b8a343e1 quick update, squash later
- 83b51b36aa raise TS min version
- a090d43d61 splitting of big UI messages
- 2424c3e696 support UNC paths in vim.fs.normalize
- 43e76cc346 tostring(vim.version()) fails if build is NIL #24097
- 8c7a8be274 transposed xcalloc arguments (#28695)
- 35f453f65d type warnings in shared.lua
- f112ac73bd unreliable "checkhealth completions" test
- b32b5b2711 use BEL to terminate OSC 11 request (#26335)
- d95e3a4c9c use no_ff instead of ffdos as condition
- a1bec02c1e use snprintf instead of sprintf
- ca887b80a9 version-range < and <= #23539
- c1ee187f82 vim.loop in luv threads (#23924)
- fe4583127f vim.validate() order is not deterministic #28377
- be8b15200d windows timeouts have exit code 1
- 1f8fb7c000 :let: fix error when applying operator to boolean option (#24030)
- 5a3752889c NVIM_APPNAME: show error message if $NVIM_APPNAME is invalid
- c4ad15ae32 PVS/V009: add top-level message
- 128e194f64 PVS/V1001: variable is assigned but is not used
- 1bbbca267d PVS/V547: expression is always true/false
- 592e4472da PVS/V564: the '|' operator is applied to bool type value
- 30d311ebcf PVS/V592: expression is enclosed by parentheses twice
- 3ecd45ded0 api: allow negative column arguments for nvim_buf_set_text (#23501)
- 3ac952d4e2 api: avoid assertion when autocmd group id is 0 (#23210)
- b2a8a93147 api: avoid immediate TextChanged with nvim_create_buf (#25492)
- ef7ae66eef api: avoid integer truncation
- b1e24f240b api: avoid open_win UAF if target buf deleted by autocmds
- 0a81ec14a4 api: better topline adjustments in nvim_buf_set_lines
- c18f3cfcdb api: crash after nvim_win_set_config title/footer validation error (#26606)
- aa4e47f704 api: disallow some more functions during textlock
- 22d9338afc api: disallow win_set_buf from changing cmdwin's old curbuf (#24745)
- da979ae04b api: do not re-apply win_config.style when missing
- 344906a08f api: do not update grid position in nvim_win_set_cursor (#28235)
- 22205f36a6 api: don't change title when setting buffer in a window (#23492)
- 711a2f5ff6 api: don't leak memory with nvim_win_get_ns (#27570)
- 1cf51a07a6 api: don't set coladd of mark (#26648)
- 5fd1bac65e api: don't use stl 'fillchar' for "use_statuscol_lnum" (#27501)
- a3751f5de2 api: dont change curwin for nvim_win_set_height
- 1ff4562502 api: dont change curwin for nvim_win_set_width
- 59fed8bb64 api: extmark highlight groups not always included in details (#23179)
- 9b9030ff2c api: fix inconsistent behavior of topline touched in recent refactor
- fc2a56fe61 api: fix set_lines viewport adjustment, but this time good
- b7763d7f6b api: get virtual text with multiple hl properly (#25307)
- b3be7b7413 api: handle NUL in nvim_err_write() and nvim_out_write() (#25354)
- 132bbd1cbd api: handle clearing out last line of non-current buffer
- d942c2b943 api: handle win_split_ins failure properly
- 5cfdaaaeac api: ignore 'autochdir' when renaming other buf (#28376)
- 2fc2343728 api: ignore 'autochdir' when setting buf in other win (#28371)
- 7367838359 api: limit depth of nvim_cmd (#27225)
- 0da27e9bde api: load buffer first on nvim_buf_set_lines (#25823)
- 4e5c633ed4 api: make getting explicit empty hl in virtual text work (#28697)
- d05d63a18f api: make nvim_get_hl not return non-existing groups
- a70eae57bd api: make open_win block only enter/leave events if !enter && !noautocmd
- 5d58136ccc api: make open_win/win_set_config check if splitting allowed
- 4ec8fd43bf api: make width/height for split by nvim_open_win work (#28341)
- b1577d371a api: make win_set_config with "win" for splits need "split/vertical"
- 0330dd9e69 api: mark nvim__complete_set as experimental #28579
- d22172f36b api: more intuitive cursor updates in nvim_buf_set_text
- b051b131f5 api: nvim_buf_get_offset in a new buffer with zero or one lines
- e0453d7f57 api: nvim_cmd{cmd="win_getid"} parsed as :winsize #24181
- 6091df6b7a api: nvim_create_buf assert fails if autocmds set &swapfile
- d5c23d72a5 api: nvim_create_buf leaks memory if buffer is loaded early
- b7708eac24 api: nvim_get_hl should return default flag
- a741c7fd04 api: nvim_parse_cmd error message in pcall() #23297
- e55a502ed4 api: open_win fire Buf* events when !enter && !noautocmd if entered early
- a873f33993 api: open_win fire BufWinEnter for other buffer when !enter && !noautocmd
- e7c262f555 api: patch some cmdwin/textlock holes
- a9968912b7 api: redundant error when using `nvim_cmd` (#24010)
- dbcba26bf1 api: revert unintended change of optional bool params
- b25753381c api: set script context when using nvim_set_hl (#28123)
- d3ea9a04bc api: update "w_scwidth" in nvim_eval_statusline()
- c971f538ab api: update grid cursor in nvim_win_set_cursor()
- 130cb4815a api: use a conditional stack for nvim_cmd (#26341)
- cf9f002f31 api: use correct buffer for "range" in nvim__redraw (#28614)
- 77118d0da8 api: use text_locked() to check textlock
- bcb70eeac4 api: win_set_config autocmds crash when moving win to other tabpage
- 233649bc75 api: win_set_config fires unnecessary autocmds
- b52d15853e api: win_set_config set tp_curwin of win moved from other tabpage
- 54022a2946 api: win_set_config update statuslines after removing splits
- a9cd8467cb api: wrong nvim_buf_set_extmark error for invalid hl_mode
- 4d3a38ac07 api, lua: handle setting v: variables properly (#25325)
- 92760a7f42 api, lua: make blank lines in a message work properly (#24244)
- 08fc1ebbaa api/buffer: fix handling of viewport of non-current buffer
- 24e3ee9d07 api/options: validate buf and win
- 139e6f68f9 autocmd: API functions accept garbage after event name #25523
- 02d00cf3ee backup: E1509 when writing extended attr to symlink (#28014)
- 746a153bc1 base64: only check padding if leftover index is set (#25854)
- 533e01a75b base64: properly handle embedded NULLs when decoding (#28349)
- 095bd8d0f8 buffer: do not filter help buffer
- e5d9b15044 buffer_updates: correct buffer updates when splitting empty line
- 11865dbe39 build: better deps for doc
- ffaf74f147 build: distinguish vim.mpack from global require'mpack'
- f9416470b1 build: include FindPackageHandleStandardArgs
- ade42d531b build: teach cmake about vvars
- da7178cbbf builtin: fix incorrect optional fields for fn.sign_define
- 6fa0f303d7 builtin: parameter mismatch between winsaveview and winrestview
- 3159a2c28f change: update fold after on_bytes (#26364)
- 342c7da4bd channel: use os_write() instead of fwrite() for stderr (#26689)
- cd6458123f charset: fix wrong display of 0xffff (#24158)
- 603f3b36a4 checkhealth: error in node.js check #28348
- b0978fca6b checkhealth: fix crash due to incorrect argument type
- 7f94a032e1 checkhealth: shell_error and cpanm module
- bfdec5b0e7 clang: null pointer dereference in parse_msgpack #25389
- 1027ccac6d clangd: check size of array before applying qsort on it
- cdd8017469 clangd: set block pointer to null in case map is empty
- 6851b265ba clipboard: don't pass --foreground to wl-copy (#25481)
- c3de6524a5 clipboard: ignore exit caused by signal #23378
- 3128cff6b1 clipboard: increase OSC 52 wait timeout (#25936)
- 46ceefb52b clipboard: make getreg() accurate for clipboard registers (#26740)
- d2983dcdb1 clipboard: make osc52 work with PUC Lua (#26014)
- e51e524175 cmake: restore previously undocumented workround, now documented
- 3688735c2b cmdline: don't redraw 'tabline' in Ex mode (#24123)
- c72d877c33 cmdline: wrong 'incsearch' highlighting after :redraw (#27947)
- bc67bbe446 codelens: add buffer and line checks before displaying codelens (#23887)
- 2b1a6e7597 colorscheme: add missing LSP groups
- 0c850add3e colorscheme: default statusline groups usability #26921
- 8b23653695 colorscheme: link LSP semantic tokens to treesitter groups
- 62e0e0349c colorscheme: try .lua files in 'rtp' before .vim files in 'pp' (#23727)
- eca72def1f colorscheme: typo
- d4bd6b1eaa colorscheme: use explicit normal foreground in syntax groups
- 3c724fe1f3 column: 'statuscolumn' not drawn after virt_lines with "n" in 'cpo' (#22967)
- cdc028e97d column: add truncated width during estimation for 'statuscolumn'
- e89071522c column: always set b_signcols.max
- c126a3756a column: apply numhl signs when 'signcolumn' is "no" (#26167)
- 2ded2e75f4 column: avoid exceeding configured 'signcolumn' width
- b50fdcba4a column: clear "b_signcols" before moving saved marks
- 13d50c3b13 column: clear "b_signcols" when marktree is cleared
- ec74538044 column: correct width after truncated 'statuscolumn' error (#26737)
- 2bdef6dd2a column: don't overflow sign column with extmark signs (#23854)
- bab4bcdefb column: don't reset 'statuscolumn' width after it has been drawn
- c509f4907b column: fill 'statuscolumn' clickdefs with evaluated width (#26891)
- 25e62697c3 column: fix wrong cursor with 'statuscolumn' and cpo+=n (#24268)
- dbf6be296d column: full redraw with 'stc, 'rnu' and inserted lines (#27712)
- 7d0a23973b column: handle unprintable chars in 'statuscolumn' (#24198)
- 0db6946b39 column: handle w_redr_statuscol at end filler lines (#27365)
- 97122eaa1c column: ignore empty signcols range (#28177)
- 967c7abde3 column: keep track of number of lines with number of signs
- f871fee8b6 column: pass kFalse when initializing "b_signcols.count"
- 44d4f03573 column: rebuild status column when sign column is invalid
- c6864b0d14 column: redraw 'statuscolumn' on wrapped lines with 'relativenumber'
- 35cec0de4a column: redraw and update signcols for paired extmark
- d88814ef68 column: remove sign from line it was previously on with undo
- df399ea0d2 column: reset decor state before starting from top
- 5a4e0b837f column: use a single path for sign sorting (#27431)
- a878e02d5d column: use maxwidth to allocate/fill 'statuscolumn' click defs #24190
- 783b0aba41 completion: check that healthcheck name is string (#28458)
- fbeef0d4ef completion: don't add backslashes to runtime pattern (#24296)
- cdc8bacc79 completion: filter results with complete+=f (#26029)
- af8500af64 completion: improve popup window position (#26739)
- d1b2a5cf5f completion: make sure the buffer name is valid (#25975)
- e9b9a86cd5 context: don't crash on invalid arg to nvim_get_context (#25977)
- fdaf6bc557 context: don't leak memory on multiple invalid objects (#25979)
- 55be4a4e26 coverity: dead code #25562
- 6d698c86d0 coverity: unhandled retval for marktree_itr_get_overlap() #26518
- 6f49ed58c3 coverity/348240: memory leak in put_view()
- 9d48266bed coverity/471380: null dereference in get_local_additions()
- ae48d965d7 coverity/477623,477624: guard null pointer dereference in kv_concat_len (#27022)
- 2b0acacb3c decor: allow adding providers during redraw
- 5ca330859c decor: check decor kind before accessing union field (#27205)
- 60d320dea3 decoration_provider: don't leak memory on error (#24410)
- 65738202f8 decorations: better approximation of botline #24794
- 2accf24805 decorations: crash with revised mark with changed decoration flags
- a0e9ef09d7 decorations: do not apply sign highlight id as range attr id
- fba17d5b88 decorations: fix imbalanced sign count
- 444f37fe51 decorations: incompletely displayed line should also get decorations
- dc48a98f9a decorations: validate botline for on_win
- 328a237351 defaults: auto-close terminal for &shell with args (#28276)
- 5aa1ba3efe defaults: background detection in tmux (#26557)
- 5e98439f6d defaults: diagnostic mappings descriptions #28646
- ccb5a76e5a defaults: don't use nvim_feedkeys in default mappings (#24520)
- 85cb0b0ddc defaults: make terminal autoclose not block other events (#27581)
- aa1d0ac095 defaults: only repeat macro for each selected line if linewise (#28289)
- eef2aedff6 defaults: remove tmux background detection passthrough (#27571)
- 5b45efbee6 defaults: set 'fsync' #26034
- 8df3742378 defaults: use augroup for default autocommands (#26933)
- a8e4ee2f2b defaults: validate 'channel' before responding to OSC request (#27594)
- 6318edadc3 defaults: visual hash (#) on text with "?"
- abd380e28d defaults: visual mode star (*,#) is fragile
- b9a0e762f1 defaults: visual star (*) on text with "?"
- 9b4b23493d defaults: wait until VimEnter to set background (#26284)
- 72e3d8c3f9 deps: bump luv to 1.48.0-2
- 87db6d894a deps: make sure --force-config takes effect
- 7aad4643f9 deps: remove stray conflict marker
- 8a6716682e deps: restore functionality of USE_EXISTING_SRC_DIR
- d4dc884012 deps: restore functionality of USE_EXISTING_SRC_DIR
- d272143318 diagnostic: always return copies of diagnostic items (#25010)
- 29d5ff6ac4 diagnostic: check for sign namespace instead of sign group
- 3d8f0cb695 diagnostic: check if delete failed in `qf_fill_buffer()` (#25932)
- 89ffdebd20 diagnostic: fix typing on field |diagnostic-severity|
- 83635e4e3d diagnostic: get border from config (#28531)
- 96f59e1b99 diagnostic: invalid col number  compare in next_diagnostic (#28397)
- ad76b050eb diagnostic: open_float on multi-line diagnostics #28301
- 37011bc45e diagnostic: rename buffer → bufnr in type annotation (#23042)
- 50284d07b6 diagnostic: typing
- a4fc3bb0e6 diagnostic: vim.diagnostic.get(…,{lnum=…}) on multi-line diagnostic #28273
- add1b10b79 diagnostic: virtual_text prefix function should have index and total (#25801)
- 35f475d0a5 diagnostics: if buffer not loaded, skip handlers that set extmark (#25628)
- 5a25dcc5a4 diff: filler lines for hunks bigger than linematch limit (#24676)
- 2f9ee9b6cf doc: improve doc generation of types using lpeg
- c4417ae70c doc: prevent doxygen confusion
- 67f5332344 docs: clean up non-docstring comments for vimdoc gen
- ae7020c667 docs: fix TSNode incorrect signatures
- ab65a98adb docs: ignore_invalid #24174
- f40df63bdc docs: make lines not overflow in vim docs
- 0a90e4b05a docs: match DocSearch style with site theme
- 0d149bb186 docs: the runtimepath is not the runtime path
- 957d05d16b docs: too much whitespace around <pre> blocks #24151
- d931b829e9 docs: vimdoc syntax errors
- 036da0d079 docs: vimdoc syntax errors
- 17c59e417f docs: vimdoc syntax errors
- 34b57508a7 drawline: check filler_todo in place of removed draw_state (#27889)
- 455bca1ba8 drawline: combine extmark highligh with area hl correctly
- 3299797150 drawline: consider position in linebuf for foldcolumn (#26803)
- 889f81c65f drawline: don't invoke on_line for filler line (#28219)
- 2b9d3869f8 drawline: don't use temporary "v" variable when not needed (#26777)
- 06694203e5 drawline: fix missing Visual hl on double-width fold char (#24308)
- d5488633f6 drawline: initialize linebuf_attr to 0 instead of -1 (#27840)
- e9280a68f7 drawline: initialize variable
- 2819718873 drawline: initialize variable
- 36941942d6 drawline: inline virt_text hl_mode inside syntax/extmark hl (#24273)
- 37b73cf14b drawline: make cursorlineopt=screenline work with resized grid
- be1d09c427 drawline: missing NUL termination when drawing TAB (#27307)
- 5b31447811 drawline: update prev_ptr after getting syntax attrs (#27072)
- 14839c5d18 edit: backspace adds extra spaces for inline virtual text (#28005)
- 267e90f31d edit: don't go to Terminal mode when stopping Insert mode (#27033)
- b2e8c0df20 edit: fix K_EVENT interfering with 'digraph' (#24258)
- 143a178332 editorconfig: add missing root validation (#23462)
- cbbda3bcd7 editorconfig: check that buffer is valid (#23922)
- abb8c2c453 editorconfig: do not set 'endofline'
- df2f5e3912 editorconfig: highlight properties with dashes (#24407)
- dc45fb4655 editorconfig: only warn once on errors
- cdbc3e3f3e editorconfig: syntax error regression
- bf0c69e504 eval: correct failure return value for readfile/blob (#27722)
- 5b312cd5f6 eval: make has('pythonx') work properly (#27739)
- 0e4086b741 eval: prevent double-free in garbage collection (#22990)
- 12d123959f eval: properly support checking v:lua function in exists() (#27124)
- b8c34efe33 eval: skip over v:lua properly (#27517)
- ad2fad9a3b event-loop: flush UI when no input is available (#25728)
- 6725565258 event-loop: process input before events (#27358)
- 58a1ef8e6a events: avoid unnecessary CursorMoved (#24675)
- bf9e92c81c events: check for WinResized/WinScrolled in terminal mode (#27226)
- dd24ea8195 events: don't expand non-file as file name
- 774a32e5fe events: null dereference in autocmd functions
- a8cfdf43bc events: trigger VimResume on next UI request (#24426)
- a114a21eff ex_getln: initialize pointer with NULL
- 9e7c4fe579 exception: remember whether message is multiline (#25351)
- 4a098b97e5 excmd: append original command to error message
- 75d9c413d4 excmd: make :def unknown rather than unimplemented (#23150)
- f1dd75c2af exitfree: don't use ex commands to close windows in free_all_mem()
- 79a558277b extmark: fix crash when stepping out from internal node
- a78fd18ed9 extmark: fix cursor position with both left and right gravity inline text
- 320e9c1c21 extmark: only invalidate unpaired marks on deleted rows
- 8e97edb93f extmark: restore extmarks when completing original text
- 2d33a766a1 extmarks: `U` changed_bytes after extmark_splice (#26501)
- 23c21e7630 extmarks: account for rightleft when drawing virt text (#25262)
- d54156ed08 extmarks: blending space shouldn't overwrite wide char (#26960)
- 54225bdb02 extmarks: crash with sign after many marks
- 65b1fd00a7 extmarks: do not remove decor from invalid old marks
- 437d35dbf7 extmarks: do not remove invalid marks from decor upon deletion
- a05bbc60ea extmarks: don't position overlay virt_text halfway a char (#24027)
- 4dd43e31db extmarks: don't show virt lines for end mark (#23792)
- dfa8b582a6 extmarks: draw TAB in virt_text properly with 'rl' (#25381)
- a6e4793baf extmarks: draw virt_text below diff filler lines properly (#25170)
- 958cc22836 extmarks: empty inline virt_text interfering with DiffText (#24101)
- 0534ad8ca5 extmarks: empty inline virt_text interfering with Visual highlight
- 31a51acdc3 extmarks: fix heap buffer overflow caused by inline virtual text (#23851)
- 9c41a81dec extmarks: fix virt_text_hide off-by-one hiding (#23795)
- a6dd67f5b6 extmarks: fix virt_text_hide with 'nowrap' and multibyte (#23757)
- 818d7f6daf extmarks: fix win_col virt_text drawn on wrong screen line (#25264)
- c4df2f08b6 extmarks: fix wrong highlight after "combine" virt_text (#24281)
- b65cd7ff1a extmarks: fix wrong virt_text position after wrapped TAB (#25168)
- 4c7cec4e29 extmarks: handle inline virt_text with empty chunk (#24005)
- ee3d4f6b90 extmarks: handle overwriting right half of wide char (#26951)
- f4f1ce1d16 extmarks: hide inline virt_text properly with 'smoothscroll' (#24106)
- 34a786bc49 extmarks: inline virt_text support multiple hl groups (#25303)
- 5a6c7c805b extmarks: make empty "conceal" respect &conceallevel = 1 (#24785)
- 510e1f131b extmarks: make right_align and win_col work on wrapped line (#23759)
- 215244f749 extmarks: missing "spell" and "conceal" in details (#27116)
- 35e50d79c6 extmarks: overlay virt_text position after 'showbreak' (#25175)
- a0790558c3 extmarks: priority order of inline and non-inline virt_text (#27532)
- b52bd8a2de extmarks: properly handle virt_text on next screen line (#25166)
- a376d979bd extmarks: redraw line on adding/removing conceal (#27463)
- 2d9e063a63 extmarks: redraw pre-undo position (#27437)
- 2137edbd4f extmarks: redraw properly with scoped inline virt_text (#27569)
- 1cc358aed6 extmarks: restore old position before revalidating
- 0818d65528 extmarks: skip virt_text if it is out of window (#25658)
- 19d63563e1 extmarks: splice earlier when opening new line (#28108)
- 362df0f793 extmarks: wrong display when changing text with virt_lines (#24879)
- d5a85d737a f_wait: flush UI before blocking (#25962)
- 81f67b79e8 file_search: path with spaces in finddir() and findfile() (#25493)
- a69c720639 fileio: fix off-by-one in rename_with_tmp (#27780)
- c6c21db82b filetype: add typing and dry (#24573)
- 020d1f626a filetype: call on_detect before setting buffer filetype
- fdf5013e21 filetype: correctly detect bash-fc-{id} files as "sh"
- d6f406db45 filetype: don't use fnamemodify() with :e for extension (#27976)
- 670c7609c8 filetype: make sure buffer is valid before call nvim_buf_call (#24922)
- af38b46a25 filetype: return on_detect function when matching by file contents
- 2955c921ce filetype: use unexpanded file name (#27931)
- e32af31ee8 flake: clang-tools moved to nativeBuildInputs (#26955)
- fd08fd3de3 float: add fixd option
- 884470124d float: allow floating window in cmdline area
- 9ecb43b637 float: apply 'winblend' to title/footer highlight (#25999)
- 898371fc9f float: don't relative flaot win itself
- fcdfbb4303 float: fix some other crashes with :unhide or :all (#25328)
- 3ea124a8d9 float: improve error message when reconfig failed (#25076)
- c5abf487f1 float: make "fixed" work with relative=win (#25243)
- 03e8b5fc91 float: make bufpos work properly with resized parent grid
- 437ed3cee2 float: trigger winnew event when float window create
- f5953edbac float: update position of anchored windows first (#25133)
- 9de157bce4 float: win_get_bordertext_col returning negative column number (#25752)
- 5f18dd3013 float: wrong position when bufpos is set
- 0e01e81552 folds: allow overlay virtual text on folded line (#23892)
- ee986ee044 folds: combined Folded and Visual highlights (#23752)
- ded01a819a folds: don't show search or match highlighting on fold (#24084)
- 811140e276 folds: fix missing virt_lines above when fold is hidden (#24274)
- 678548a2b4 folds: show Folded highlight in Visual selection (#23741)
- 58f9486144 folds: update folds in Insert mode with fdm=indent (#24402)
- 38e38d1b40 fs: allow backslash characters in unix paths
- 8a7e3353eb fs: make `normalize()` work with '/' path (#24047)
- ae5095cac9 fs: use generics for better typing
- e4da418ba8 fs.lua: normalize slash truncation (#23753)
- 06fcf71bd0 fswatch: --latency is locale dependent
- 502a7a0558 ftplugin: respect runtimepath ordering
- 03a2c5b772 ftplugin: source Lua files after Vimscript files per directory (#23801)
- be5cf33836 gen_help_html: type warnings, spell_ignore_files #27254
- 6c35fb421e gen_lsp.lua: improve type name, and fix wrong type inheritance
- 214b125132 gen_lsp.lua: no notifications in lsp.Methods #24530
- 765729a145 gen_vimdoc: INCLUDE_DEPRECATED not generating docs for deprecateds
- ccf328172b gen_vimfn_types: don't include tag before signature's line (#24492)
- 86c9d8b53c gen_vimvim: correctly add aliases to vimAutoEvent (#23429)
- 240c41e1af genvimvim: add special abbreviations of :delete (#23172)
- 51ea753747 genvimvim: generate prefixed boolean options properly (#27487)
- 9f32deba56 grid: add start column when getting char on line (#25627)
- 4ed1c2a8af grid: don't draw beyond max column (#26172)
- 9c202b9392 grid: handle clearing half a double-width char (#27023)
- 6a486c44e6 gx: move to to _init_default_mappings #24420
- 67b2ed1004 gx: visual selection, expand env vars
- e39b6d0c52 health: "attempt to concatenate nil"
- 7ffe450173 health: check for _host_prog variables properly (#23014)
- 50cd5ed360 health: check more "old" files
- f6dcc464f2 health: check unmatching python_glob as empty table (#28215)
- 6818ba271c health: clients may not support watchfiles #28710
- 03a021f378 health: combine python and virtualenv healthchecks (#23004)
- c67efe3a9c health: correctly expand and resolve PYENV_ROOT (#26953)
- 88eb0ad149 health: fix tmux RGB capability detection (#26886)
- cde4892b49 health: fix typo in function name
- 63a17322dd health: improve python executable check error handling (#26954)
- ba88fd886a health: malformed call to warn() #26217
- 8c6f97bef8 health: properly use the value of $PYENV_VERSION (#23109)
- c8ebb04e92 health: replace healthFoo with DiagnosticFoo (#23475)
- 843c1bed95 health: stop job properly on timeout (#23877)
- 96d0c709b6 healthcheck: expand vimrc variable (#28379)
- 4229bbe514 helptags: make multibyte help tags work properly (#23975)
- 7b6d041bae heredoc: allow missing end marker for scripts
- a2f17e97ec highlight: add `FloatFooter` to 'highlight_defs.h' (#25577)
- 837f268093 highlight: add `Nvim{Light,Dark}Gray{1,2,3,4}` colors
- 8afb3a49c0 highlight: add create param in nvim_get_hl
- f8ea49cfe1 highlight: add force in nvim_set_hl
- 4ce0ada0d4 highlight: add missing g: prefix for colors_name (#22952)
- 03ca36d1f8 highlight: apply 'winblend' to NormalNC (#23555)
- 6c3e170e56 highlight: apply 'winblend' to float border (#25981)
- d4872377fe highlight: attr set all when normal attr changed
- dcaf207336 highlight: combine ColorColumn with low-priority CursorLine (#23017)
- 66925f14de highlight: consistently spell "Goldenrod"
- 5183651773 highlight: correct hi command output
- ca7dd33fa7 highlight: don't show CursorColumn on current line (#27848)
- 59289fb987 highlight: make CurSearch work properly with 'winhl' (#24448)
- b11a8c1b5d highlight: remove unnecessary assignment to char_attr for 'spell' (#23713)
- 9a2c98087b highlight: update `IncSearch` to link to `CurSearch`
- ab92575753 highlight: winhl receive wrong argument
- b60a2ab4cb inccommand: block errors when parsing command line again (#24374)
- bc5b0da84e inccommand: don't crash with "split" and 'n' flag
- 382ea4d402 inccommand: don't preview in Ex mode (#26587)
- c1c2a1b5dd inccommand: don't save information of a buffer twice (#24501)
- ef44e59729 inccommand: don't set an invalid 'undolevels' value (#24575)
- ba9f86a9ce inccommand: improve preview buffer number handling (#27087)
- 643bea31b8 inccommand: restrict cmdpreview undo calls (#24289)
- 1dba570e63 inccommand: save and restore '[ and '] marks (#26442)
- 35ffe58ea4 inccommand: update topline after moving cursor (#27341)
- a14c780918 input: set termkey buffer size to read stream capacity
- b61575ba70 intro: clear intro if new buffer is shown in focused float
- 9530a23016 intro: link showing intro to state at start
- 0570a19c8a intro: make intro explicitly stateful
- d1a30221fc intro: redrawing intro exposing pseudo-randomness
- 21360523cd intro: still show intro message with floating window
- 6b96122453 iter: add tag to packed table
- 2ee8ace217 iter: make pipeline termination conditions consistent (#24614)
- 9489406879 iter: remove special case totable for map-like tables
- 57ccd82417 job-control: fix use after free (#25223)
- 1c71c32b29 job-control: make jobwait() flush UI after hiding cursor (#25927)
- e057b38e70 json: allow objects with empty keys #25564
- af6537bc66 jumplist: Ctrl+o, Ctrl+i weird behavior when deleting buffers #25461
- 017ff93b02 keycodes: recognize <t_xx> as a key (#24700)
- 6709f7f8f1 keycodes: simplify S- properly when D- is present (#27316)
- 4447cefa48 l10n: update Japanese translations (#27856)
- 7d17ab5b6f l10n: update Ukrainian translations (#26819)
- 908843df61 languagetree: apply `resolve_lang` to `metadata['injection.language']`
- e353c869ce languagetree: don't treat unparsed nodes as occupying full range
- 6b5f44817e languagetree: remove double recursion in LanguageTree:parse
- f5530bf566 linematch: initialize array
- 766f4978d6 lint: lint warnings #24226
- 5465adcbab lint: use tbl_contains
- 0804034c07 loader: cache path ambiguity #24491
- 89135cff03 loader: remove cyclic dependency on vim.fs (when --luamod-dev)
- 66c66d8db8 loader: reset hashes when running the loader
- ec80e4cb4d log: increase size of buffer for nvim instance name
- 4d0f4c3de9 lsp: E403 if doc contains multiple codeblocks #24458
- 20c331915f lsp: SignatureHelp docstring is not escaped #16702
- 01691c5447 lsp: abort callHierarchy on no result (#28102)
- 9abced6ad9 lsp: account for border height in max floating popup height (#25539)
- 3e016fa8d4 lsp: actually send diagnostic-tags back to the server
- 37d8e50459 lsp: add "silent" option to vim.lsp.start (#28478)
- 2e1f5055ac lsp: add assertion for explicit bufnr in apply_text_edits (#27614)
- 542c910a1d lsp: add missing LSP semantic token highlight links
- be5e361154 lsp: add param assert in client_is_stopped (#23857)
- ac0e8323dc lsp: add parentheses to generated union array types (#27560)
- 0fcbda5987 lsp: add snippet regression test (#27618)
- e42fdaad21 lsp: add spacing for inlay hints separately #24079
- 48bcc7b971 lsp: advertise workspace.didChangeConfiguration capability (#26028)
- c07dceba33 lsp: allow Lua pattern chars in code action filter (#24041)
- 3bf887f6e0 lsp: always return boolean in lsp.buf_client_attach (#24077)
- 966eb8e0b3 lsp: announce publishDiagnostics.dataSupport (#24442)
- 39fc340276 lsp: avoid assertion when `client_hints` do not exist (#28461)
- 47dbda97d2 lsp: buffer messages until connected to server (#28507)
- adbe7f3683 lsp: call `on_list()` even for single location (#25830)
- 15983cf2c6 lsp: cancel session when leaving snippet region (#25762)
- 816b56f878 lsp: cancel watchers when closing a client
- 9b8a075539 lsp: change `silent` in lsp.start.Opts to optional (#28524)
- d3e0352574 lsp: check if inlay hints are enabled for a buffer before disabling (#24074)
- fa9a85ae46 lsp: clean up duplicate and unused meta type annotations
- 8bd6f7c20b lsp: clear codelens on LspDetach (#24903)
- 97c0a52416 lsp: correct deprecation message #28403
- aa62898ae3 lsp: correct the error message's cmd on spawning (#27632)
- 77a9f3395b lsp: create codelens request parameters for each buffer (#27699)
- 9281edb334 lsp: create per client params in lsp.buf.code_action
- 39cc38a87b lsp: defer writing error msgs (#27688)
- 1b679ac192 lsp: define LspInlayHint highlight group #24073
- dc8c086c7e lsp: directly rename the existing buffers when renaming (#27690)
- c1a95d9653 lsp: disable didChangeWatchedFiles on Linux
- 2fde6295df lsp: display initialization errors (#25409)
- 94127cb5df lsp: do not add extra indentation
- cc87dda31a lsp: do not assume client capability exists in watchfiles check (#24550)
- 0fe0cf5ada lsp: do not cancel snippet when selecting placeholder (#25835)
- 073035a030 lsp: don't register didChangeWatchedFiles when capability not set (#23689)
- 5eee633c97 lsp: don't start additional client if attach failed (#28744)
- 21fa19f3e8 lsp: don't use hl_mode = combine for inlay hints #24276
- 96b94f8d77 lsp: duplicate on_detach, on_reload callbacks #24067
- b95b6ed975 lsp: empty commands should not be considered executable (#28216)
- c3c673cdec lsp: enable() does not activate inlay hints on open buffers #28629
- b2c26a875b lsp: ensure buffer is not attached more than once
- fa0a25dcb3 lsp: error in reset_timer on second detach #24117
- 72e64a1afe lsp: extra "." when completing with tsserver #24646
- 031088fc0a lsp: filetype matching to documentSelector in dynamic capabilities (#25425)
- d191bdf9d5 lsp: fix attempt to call non existent function (#24212)
- dd3fa64573 lsp: fix dynamic registration of code actions (#23826)
- ce4ea638c7 lsp: fix incorrect typing and doc for `vim.lsp.rpc`
- f487e5af01 lsp: fix infinite loop on vim.lsp.tagfunc
- 74bd4aba57 lsp: fix multi client handling workspace_folder methods (#18839)
- 5e5f5174e3 lsp: fix off-by-one error for omnifunc word boundary
- ba6761eafe lsp: fix omnicomplete in middle of the line (#25787)
- 075a72d5ff lsp: fix relative patterns for `workspace/didChangeWatchedFiles` (#23548)
- 840e1864c2 lsp: handle NUL bytes in popup text (#25612)
- 345bd91db2 lsp: handle absence of a trailing newline #25194
- 0e9a33572d lsp: handle adjacent snippet tabstops
- 853f647da6 lsp: handle reverse lookup in capabilities
- 91f67fabe6 lsp: handle stale bufnr on LspRequest autocmd trigger (#24013)
- 849d82b80b lsp: handle stale bufnr on LspRequest autocmd trigger (#27981)
- 2eecb1b85d lsp: highlight active parameter in signature help #25663
- e55e80d51c lsp: inlay hints: "Failed to delete autocmd" when closing buffer #24469
- 7968322e7a lsp: inlay_hint nil reference error #24202
- ba8f19ebb6 lsp: lint warnings, default offset_encoding #24046
- 3304449946 lsp: log unknown diagnostic tags instead of showing a warning (#25705)
- 251ca45ac9 lsp: markdown code fence should allow space before info string #24364
- add7e106d5 lsp: noisy warning about offset_encodings #24441
- c235959fd9 lsp: only disable inlay hints / diagnostics if no other clients are connected (#24535)
- 1dacf2ecee lsp: prevent code-lens refresh from becoming a permanent  no-op (#28228)
- 597ecf7516 lsp: re-add client.commands and mark private
- 94a904b453 lsp: reapplying already-applied hints #24114
- 4ecc71f6fc lsp: reduce diagnostics and add more types (#23948)
- bc7f86209d lsp: redundant vim.snippet.jumpable #28560
- ee156ca60e lsp: refactor escaping snippet text (#25611)
- 2ecba65b4b lsp: remove unknown LSP protocol property (#24345)
- 7311958e12 lsp: remove unnecessary file load/write when renaming (#27621)
- e14e750998 lsp: rename LspProgress data.result => data.params #28632
- f0e61e6d92 lsp: rename fails on missing parent directory #27291
- b413f5d048 lsp: rename undofile when renaming (#27684)
- d09957e0a0 lsp: rename: load and list new buffer if attached to window (#27408)
- 7668f89d5b lsp: replace @private with @nodoc for public client functions (#24415)
- 52823616bc lsp: replace bug-prone ternary operation #28627
- 5282d3299c lsp: restore marks after apply_text_edits() #14630
- cf5f1492d7 lsp: revert change to buf.clear_references() #24238
- 917172dd96 lsp: semantic token defer loading
- 3be2536ca0 lsp: send back diagnostic tags to the server
- a37d568082 lsp: send empty "added" list when removing workspace folder #24440
- 3c6d971e54 lsp: set extra info only when it has a value (#23868)
- 5785c32f11 lsp: set fallback client name properly
- 370232dbef lsp: track snippet deletion
- ca26ec3438 lsp: use only utf-16 in default client positionEncodings (#23903)
- b302da9ad2 lsp: use percentage format on lsp.status (#23971)
- 2c8f36a3b0 lsp: use plain loop for non-list-like table of protocol values
- 8addd27504 lsp: when renaming directory, check path prefix of buffer names (#27603)
- 597355deae lsp: wrong iterator in registerCapability handler (#24971)
- b2d471ab33 lua: allow nil values in serialized Lua arrays (#26329)
- 68f12e7fcb lua: annotate that TSNode functions can return nil (#24621)
- 4ffc20c951 lua: avoid internal error when :luado deletes lines (#27262)
- 3198038224 lua: correct return value for on_key with no arguments (#25911)
- 84bbe4b0ca lua: disallow vim.wait() in fast contexts
- 22eb2ba183 lua: do not schedule events if Nvim is exiting
- 7d279a09e0 lua: handle array with holes in luaeval() (#26630)
- c43c745a14 lua: improve annotations for stricter luals diagnostics (#24609)
- 2f779b94e7 lua: inspect_pos respect bufnr when get syntax info (#23098)
- e2e63bd045 lua: make highlight.on_yank use win-local highlight (#27349)
- b40170f7a3 lua: memory leak when using invalid syntax with exists() (#26530)
- 4ab9c5fa46 lua: not using global value in vim.opt_global (#25196)
- 20ec4c776a lua: only disable vim.schedule() when closing main loop (#26090)
- f150b62423 lua: only free luarefs when returning from API (#28373)
- 0190771713 lua: remove uri fragment from file paths (#27647)
- 5aa14e1231 lua: return after assert returns assert message (#27064)
- 5331d5772f lua: show error message when failing to set variable (#25321)
- 1294e221a2 lua: vim.fn.has('nvim-0.10') in fast context, used by vim.deprecate
- 37c58226a8 lua: vim.fs typing (#24608)
- 5db076c7cc lua: vim.region on linewise selection #25467
- 622b1ae38a lua: vim.split may trim inner empty items
- a7df0415ab lua2dox: filter out the entire `---@alias` block
- 32e69bd397 luarc.json: ignore test directory to save memory
- 6f936c9d85 man: make :Man with a range work (#25922)
- 59aadf33ef man: pass modifiers also to :tag (#27878)
- a9b4dc9614 man: set the nested flag for the BufReadCmd autocommand (#26285)
- c8d1d8b254 man.lua: don't continue on command error (#23009)
- a4c4b39d55 man.lua: hardwrapped manpage is not resized #25646
- 209ed16f57 man.lua: return support of all sections
- 3a7c30dc93 man.vim: q quits after jump to different tag in MANPAGER modified (#28495)
- 3c667d3e0f mappings: fix mapset() not replacing map with backslash (#26719)
- 0451391ec5 mark: properly init mark views (#22996)
- d432bba4e4 marks: handle switching buffer properly (#25763)
- 62306a29ad marktree: correct qsort usage
- 585549625d marktree: off-by-one error in `marktree_move`
- 34be915f6b marktree: preserve ordering in `marktree_move`
- b97d5038f1 marktree: some marks counted twice when checking for overlap
- ad5a155b1f mbyte: fix bugs in utf_cp_*_off() functions
- b028233991 memline: more curbuf stuff
- 91ef26dece messages: :map output with ext_messages (#26126)
- eabf9de1dc messages: allow more prompt in headless mode with UI (#27905)
- 60fb8a6a8b messages: avoid crash with :intro and ch=0 (#28343)
- 61a0aa6c51 messages: avoid passing negative length to strnlen() (#28753)
- ca258db156 messages: clear new lines when increasing 'cmdheight' (#27421)
- c9f47fca8b messages: ensure msg_grid is at top at more prompt (#23584)
- 2f17ef1fc4 messages: use "Vimscript" instead of "VimL" #24111
- 55dbf5c379 messages: validate msg_grid before using msg_grid_pos (#26189)
- 4db77017fb meta: add nil return types to lpeg functions
- 5198a2555d meta: cleanup lpeg operators
- dae6770b76 meta: include vim.json
- d31f7648ec mkspell: prevent Unicode character overflow (#23760)
- a8a93e517f mouse: avoid dragging after click label popupmenu callback (#26187)
- 6a2a37b1e1 mouse: avoid dragging when clicking next to popupmenu (#26201)
- 091eb4c8c7 mouse: click after eol with conceal and virtual text (#27897)
- 2b475cb5cc mouse: click on 'statuscolumn' with 'rightleft' (#25090)
- e25cf47ad3 mouse: click on empty line with 'foldcolumn'
- 84a4319545 mouse: cmdline click registered as statuscolumn (#23163)
- bf52fb7193 mouse: copy the line before syntax matching (#24320)
- 5fb4c397a1 mouse: drag vsep of window with 'statuscolumn' (#24462)
- dc394b9641 mouse: fix popup menu position check with winbar (#23456)
- 7c1921e9d6 mouse: fix popup_setpos position check with ext_multigrid (#23436)
- a3fba5cafc mouse: handle folded lines with virt_lines attached to line above (#23912)
- 64aa0f7d0b move: check for filler lines properly (#28307)
- 366d0c7887 move: check the correct buffer (#25698)
- 780509aedf move: fix using the wrong window (#28312)
- 60d1e3e471 msgpack: store grid line event as a value
- c52dfb6e84 normal: don't check conceal when pressing 'r' (#27892)
- 088cdf69e3 normal: make "g$" work properly with resized grid
- a1ded1b113 oldtest: always use a 64-bit int for swapfile block number
- 92c59c39c3 ops.c: remove duplicate u_save_cursor()
- 9d01385c6c options: `'modified'` showing incorrect value for scratch buffers
- c3e176f6e2 options: correct condition for calling did_set_option() (#25026)
- 9af03bcd47 options: do not change inccommand during preview (#25462)
- 796df966f3 options: don't update curswant for 'winhl' or 'winbl' (#27515)
- d956bc6379 options: setting 'scroll' with resized grid (#26628)
- c8a27bae3f options: use a union for def_val (#27169)
- 804c828e68 optionstr.c: incorrect use of curbuf/curwin
- a9df0c5ce6 osc52: do not use 'vim.iter' (#27218)
- 5d75d9aef2 osc52: enable OSC 52 by default in tmux sessions (#26072)
- 86c2213b5e osc52: use `p` for primary selection instead of `s` (#26076)
- 1045659097 osc52: use nvim_chan_send() to stderr for copying (#26690)
- e3bd04f2af pager: handle consecutive newlines properly (#27913)
- 1e7e9ee91f path: accept special characters on Windows (#25424)
- f064e72b9b path: check return value of append_path() (#28309)
- f5eabaa940 path: restore space separation in 'path' (#25571)
- 908f247c22 plines: count 'showbreak' for virtual text at eol
- a0cbf1d8d5 plines: cursor position with 'showbreak' and resized grid (#28067)
- 317038e7cb plines: don't return very large height on very long line (#24260)
- 7955c90621 plines: folded lines with virt_lines attached to line above
- 35c3275b48 plines: handle inline virtual text after last char (#24241)
- cbadb39d16 plines.c: initialize cts_max_head_vcol (#24855)
- fc14928719 printf: make positional %zd and %zu work (#24722)
- d0b3c87219 process: avoid potential data race on exit (#27769)
- 3e569d440b process: close handles and timer in pty_process_close() (#27760)
- 268066e014 process: start pty process eof timer on main thread (#27625)
- 49983387ff prompt: emit change event for prompt newline (#28260)
- 7bd6bd1ef7 provider: cannot detect python3.12 #25316
- 61ecb3e16c provider/pythonx: import the correct module (#25342)
- 540941ef83 pum: don't position too far with resized parent grid (#23442)
- f186224dfc pum: fix missing rightmost column with 'rightleft' (#23445)
- 8bc973c6f5 pum: fix missing scrollbar with 'rightleft' (#23448)
- a7550a20e0 pum: handle right-click menu repositioning with multigrid (#26975)
- fbaa278773 pum: make :popup position correctly with float border
- a3dfe1bc89 pum: position properly with ext_multigrid (#23336)
- c1331a65dd pum: show right-click menu above cmdline area (#23298)
- dd0e77d48a query_error: multiline bug
- 5ac2e47acc redo: make redo of Lua mappings in op-pending mode work (#23566)
- 60f69014a8 redraw: multibyte characters are wrapped at the end of a line (#23696)
- cb34d0ddd0 redraw: overwrite double-width char with virt_text properly (#23708)
- d184933cdc redraw: update Visual selection properly with splits (#27343)
- 54044e6dce release.sh: ze version is too big
- cce9460524 remote: make --remote-expr print to stdout (#23980)
- bde59e8147 remote: restore previous --remote-expr output formatting (#23988)
- 468292dcb7 rpc: "grid_line" event parsing crashes (#25581)
- 4d4092ac9e rpc: assertion failure due to invalid msgpack input
- 8921d56053 rpc: do not crash when no input is consumed
- c422722b2e rpc: fix hang with channel closed while waiting for response
- adb2258345 rplugin: dont create data dir if it's a broken symlink #25726
- 65dd3c1180 ruler: show ruler of curwin with no statusline in cmdline
- f5231d61a5 runtime: add commentstring for C# ftplugin (#23039)
- 3387dc4a46 runtime: add commentstring for D ftplugin (#25362)
- 615b48aca6 runtime: add more Nvim-only highlight groups to Vim syntax
- aee6f08ce1 runtime: do not allow breakcheck inside runtime path calculation
- df297e3c2b runtime: don't set gx mapping if already mapped (#24262)
- 9176b5e10a runtime: respect 'fileignorecase' when sourcing (#24344)
- dbb840da01 runtime: respect 'rtp' order for all runtime files (#24335)
- 70a0049296 runtime: source c ftplugins in correct order (#27377)
- d431a4d410 runtime: source old color scheme in bundled color schemes (#26641)
- 3ab6f60dc8 runtime: update 'vim' color scheme to use new tree-sitter groups
- 67fba9affa runtime/tutor: don't try to close fold when there is none (#24953)
- ee56daebb6 shada: update deleted marks (#24936)
- 517dfdf0fc shada: update marks when using delmarks! (#24978)
- 4d52b0cf67 showcmd: clear the rest properly (#28420)
- fcd9905291 sign: avoid deleting from sign map while looping over it (#27158)
- a84b454ebe sign: do not error when defining sign without attributes (#26106)
- a5ade3c63d snippet: correct indent with newline
- 4625394a76 snippet: do not add extra indent on newlines (#28538)
- a1bdf2852d snippet: remove misleading comment about TM_FILENAME_BASE (#26465)
- 8c044f0862 spell: always accept ':' as filename char in 'spellfile' (#27172)
- a803bff89c spell: extmark with spell=false should disable spell (#23400)
- eceb2dffce spell: splice extmarks on :spellrepall (#23929)
- aa65bd478a startup: "nvim -l foo.lua" may not set arg0 #24161
- 628f6cce80 startup: don't truncate when printing with -l (#24216)
- c0fa721ade startup: make recovery mode work without --headless (#24477)
- 8e739af064 startup: multiprocess startuptime #26790
- 8f10362cdc startup: only send one default_colors_set event during startup
- 559c4cfd52 startup: run embedded Nvim with real path (#24282)
- b21d960119 startup: set full_screen when in ex_mode
- 9637b7dae4 startup: stop TUI properly when quitting at swap dialog (#25337)
- d7359a8742 startup: trigger UIEnter for the correct channel (#25860)
- 01e273c340 statuscolumn: don't update clicks if current width is 0 (#24459)
- afd0c648a8 statuscolumn: force full redraw when signcolumn is invalid (#24859)
- dc6c11394b statuscolumn: update number hl for each screen line (#25277)
- a4b2400804 statusline: also allow right click when 'mousemodel' is "popup*" (#23258)
- 4ecf6fdfd8 statusline: bail out properly on negative row (#23535)
- 70da793c5e statusline: corrupted screen with minwid sign item in 'statuscolumn' (#23823)
- d7bb19e013 statusline: fill for double-width char after moving items (#24207)
- 54f5602038 statusline: fix uninitialized variable and possible overflow
- 9f15a18fa5 statusline: missing offset when showing 'keymap' (#27270)
- 7b973c71ea statusline: redraw when VIsual_mode changes (#23933)
- dbc0fa9bd6 stdpath: remove duplicate directories (#26653)
- 1907abb4c2 stream: do not close handle if it is already closing (#26537)
- 9dd48f7832 substitute: properly check if preview is needed (#23809)
- 9753cda591 syntax: use correct diagnostic group for checkhealth (#23538)
- 400b7842a9 termcap: escape escapes in passthrough sequence (#26301)
- e527842211 termcap: only call callback for requested capabilities (#26546)
- ffeb31c2f9 termcap: set 'nested' on TermResponse autocommand
- b7831c7f99 termcap: use tmux passthrough sequence when running in tmux (#26281)
- e6d3f87dfd termdebug: handle partial lines passed to callback (#22950)
- c413b42c45 termdebug: prompt mode breaks with &splitbelow set
- 8aad4b8425 termdebug: send SIGINT when interrupting prompt mode
- af78060b18 termdebug: trim suffixed "\r" in CommOutput
- 684e93054b terminal: assign channel to terminal earlier (#25771)
- 82b1a389ba terminal: avoid Insert mode in Terminal buffer (#25820)
- 99288ecc77 terminal: block input when there is pending TermRequest (#27589)
- f2ce31d3dc terminal: call validate_cursor() before screen update (#24425)
- e09adfdcff terminal: check if mouse on statusline/tabline/winbar/vsep (#26892)
- e115732465 terminal: check terminal size at end of screen update (#25480)
- 120c4ec855 terminal: disable reflow again
- c881092ffe terminal: don't lose focus on <MouseMove> (#25845)
- 16a416cb3c terminal: don't pass incomplete UTF-8 sequence to libvterm (#27922)
- d0d132fbd0 terminal: don't send unknown special keys to terminal (#24378)
- 74776dfb2a terminal: fix duplicate recording with mouse click (#28103)
- 21d466c1b9 terminal: forward horizontal mouse scrolling (#24552)
- d401b33314 terminal: handle horizontal scrolling in another window (#24828)
- 5e78fd7784 terminal: ignore $VIM and $VIMRUNTIME in pty jobs
- 0a7fda6fa0 terminal: include modifiers when forwarding mouse (#24549)
- d4c2fc6ff6 terminal: keep focus when scrolling number column of another window (#25848)
- 5ca6c9e046 terminal: make backslashes in 'shell' work on Windows
- aba954b662 terminal: never propagate $COLORTERM from outer env (#26440)
- b74262a336 terminal: send Shift-Home Shift-End Ctrl-Home Ctrl-End (#24418)
- 0fd8eb8aae terminal: set $COLORTERM unconditionally in :terminal (#24763)
- fa17a5ab49 terminal: use terminal buffer for TermRequest autocommand (#26974)
- 5999214c24 termkey: accept BEL (0x07) as OSC terminator
- ce2f770aaa termkey: do not sign extend mode value
- 50f5864dd2 termkey: include IO header on Windows
- 52e6059415 test: call separate_arguments() correctly to honor $BUSTED_ARGS (#26905)
- c5528e7fd8 test: clean up inline virtual text tests a little
- 380b634ac9 test: fix "indeterminism" warnings in UI tests
- f4c97da262 test: fix strings_spec.lua for AArch64
- 477458f7bf test: more tests for marktree
- d8e330bcec test: remove test/compat.lua
- a7bbda121d test: typing
- 8861ad83fd test/tui_spec: pass the expected NULL-sentinel to execl()
- f859d16aea tests: set SHELL=sh #24941
- 3d44340cea tests: use more global highlight definitions
- e9bfbe99cd textformat: remove unnecessary changed_bytes() (#26027)
- 255e547e18 timer: allow timer_info() to get info about current timer
- a8131aee9e tohtml: replace hex escape with digit escape (#27728)
- 0246f1a897 tohtml: set filetype of generated HTML to `html`
- ccc0980f86 treesitter: Use the correct replacement args for #gsub! directive (#23015)
- 71d9b7d15c treesitter: _trees may not be list-like
- a4743487b7 treesitter: `language.add` - only register parser if it exists
- 4a8bf24ac6 treesitter: adjust indentation in inspector highlights (#26302)
- ef64e225f6 treesitter: allow foldexpr without highlights (#23672)
- 6a264e0897 treesitter: allow optional directive captures (#28664)
- cf612c64b0 treesitter: allow passing lang to vim.treesitter.get_node() now correctly takes opts.lang (#26360)
- 32849d5667 treesitter: avoid # of nil in _query_linter
- 3fd7449d5a treesitter: check that buf is loaded in autocommands (#25679)
- e7f50f43c8 treesitter: clip end row early
- 6b19170d44 treesitter: correctly calculate bytes for text sources (#23655)
- bd5008de07 treesitter: correctly handle query quantifiers (#24738)
- fba18a3b62 treesitter: do not calc folds on unloaded buffers
- c30ebb17f6 treesitter: document more standard highlight groups
- 040369e1e4 treesitter: don't forcefully open folds
- 72ed99319d treesitter: don't invalidate parser when discovering injections
- 4607807f9f treesitter: don't update fold if tree is unchanged
- 26b5405d18 treesitter: enforce lowercase language names (#28546)
- 3a8265266e treesitter: escape "\" in :InspectTree #28613
- 369f58797d treesitter: escape quotes in :InspectTree view #24582
- 6e45567b49 treesitter: fix TSNode:tree() double free (#24796)
- 50a03c0e99 treesitter: fix another TSNode:tree() double free
- 7c6f9690f7 treesitter: fix indexing in foldexpr
- 01b91deec7 treesitter: fix parens stacking in inspector display (#26304)
- f40a109716 treesitter: fix trim predicate
- 1f551e068f treesitter: fixup for InspectTree
- 26cc946226 treesitter: foldexpr tweaks
- e85e7fc7bc treesitter: handle empty region when logging (#24173)
- 12faaf40f4 treesitter: highlight injections properly
- 6f75facb9d treesitter: improve vim.treesitter.foldexpr
- 6c8387067d treesitter: inspect-tree remember opts on buf change
- 8179d68dc1 treesitter: logger memory leak
- b6e339eb90 treesitter: make InspectTree correctly handle nested injections (#26085)
- 3af59a415c treesitter: make Visual hl work consistently with foldtext (#25484)
- c7e7f1d4b4 treesitter: make foldexpr work without highlighting (#24167)
- 0211f889b9 treesitter: make sure injections don't return empty ranges (#24595)
- 0df681a91d treesitter: make tests for memoize more robust
- 7fa292c52d treesitter: outdated highlight due to tree with outdated region
- 617d1b28d6 treesitter: prefix treesitter types with vim
- 90a12d4a16 treesitter: prepare highlight states for [s, ]s
- 7e5ce42977 treesitter: properly combine injection.combined regions
- 19a793545f treesitter: redraw added/removed injections properly (#23287)
- 7a76fb8547 treesitter: remove more double recursion
- e124672ce9 treesitter: reset cursor max_start_depth
- 7d97150084 treesitter: return correct match table in iter_captures()
- 3b29b39e6d treesitter: revert to using iter_captures in highlighter
- 315c711700 treesitter: set cursor position when opening inspector
- 48085e40bb treesitter: stop() should treat 0 as current buffer #24450
- 32dc484ec9 treesitter: support subfiletypes in get_lang (#23605)
- b6fdde5224 treesitter: text alignment in checkhealth vim.treesitter
- 0f85aeb478 treesitter: treecursor regression
- 26143d7a5c treesitter: update @markup default links
- 9ff59517cb treesitter: update c queries
- c44d819ae1 treesitter: update folds in all relevant windows (#24230)
- ffb340bf63 treesitter: update folds only once on InsertLeave
- edf9a897f0 treesitter: update highlights for query (#23699)
- b697c0cd4f treesitter: update lua parser and queries (#24148)
- ad95b36985 treesitter: update markdown parser and queries (#24429)
- 39a0e6bf3c treesitter: update parsers and queries
- 3d4eb9d544 treesitter: update queries
- c97de026e3 treesitter: update vimdoc and vimscript queries
- dc7ccd6bca treesitter: use 0 as initial value for computing maximum (#27837)
- 7bc5ee7f93 treesitter: use proper query syntax for inspector (#26274)
- 00e6651880 treesitter: use tree range instead of tree root node range
- 8c9dab3e0d treesitter: use vim.highlight.priorities instead of hardcoded 100 (#24052)
- 674f2513d4 treesitter: validate language alias for injections
- 2bf3e82676 treesitter: validate window before updating preview highlights
- ab2811746e treesitter playground: fix the wrong range of a node displayed i… (#23209)
- f85aa2e67f treesitter.c: improve comments on fenv usage
- c5b9fb2f25 treesitter.foldexpr: check for all insert submodes
- b3bda2f043 tui: `space_buf` overflow when clearing screen (#27352)
- cb2b5e2780 tui: disable DECRQM and DECRQSS queries for Terminal.app (#28453)
- 405bad5e08 tui: do not toggle cursor visibility when flushing the buffer (#26055)
- b76cc974b9 tui: don't forget to update cursor visibility (#26523)
- 911f3d9623 tui: don't overwrite an assertion faliure message on exit
- 168e69ae01 tui: don't set cursor color when there is none (#28236)
- 5a08b5be3c tui: don't set tty background if &bg was set before VimEnter (#23701)
- 00b7428b3b tui: don't use DECRQSS in screen or tmux (#28086)
- 846714ca3e tui: don't use tui->params[] for 'termsync' (#26565)
- 197827321a tui: grid_clear properly clears the screen
- 884a83049b tui: grow termkey's internal buffer for large escape sequences (#26309)
- ad867fee26 tui: handle cursor visibility properly (#26091)
- fd50185492 tui: initialize clear attrs with current terminal background
- c26b39a9aa tui: make :cquit work properly with remote TUI (#25313)
- 3ae62c4706 tui: make disabling title restore old title from stack (#23585)
- 4c31a1b807 tui: make setcellwidths() work for non-ambiwidth chars (#28322)
- 4f235e3caf tui: position cursor at bottom-left before stopping (#23369)
- 0f1b511f23 tui: redraw on SIGWINCH even if size didn't change
- 8e69716953 tui: restore title before exiting alternate screen (#23776)
- 999e167a52 tui: start flush earlier (#26463)
- 367e52cc79 tui: use buflen to calculate remaining buffer size (#26942)
- 3198598e69 tui: use uv_timer_t instead of TimeWatcher for input (#26435)
- 0ce065a332 tui: v:argv does not report the original argv[0] #24015
- bc6fc0123d tutor: Tutor steps don't work on Windows #25251
- bf5703042b tutor: don't use concealed text in expected lines #24316
- e34c23b701 tutor: set a value for ":syntax iskeyword" (#27833)
- 04232a19cc type: remove incorrect arguments from vim.rpc*
- 21152f7905 types: add more annotations to eval.lua
- b7d5b55f74 types: add some return/parameter type annotations (#24867)
- e6947bb1e8 types: make filetype.add parameters optional
- 191cca2566 types: move type annotation for `IterMod`
- 813dd36b72 types: rename win_get_config return type to win_config
- b3342171d5 typing: vim.fn.execute
- 1355861b92 typval: don't treat v:null as truthy (#23281)
- 0592fd5e17 ui: "resize -1" with cmdheight=0 #24758
- ab1c2220f0 ui: activating all ext capabilities without remote UI #28555
- 5b111a8f00 ui: adjust 'smoothscroll' for inner dimensions
- 389f5ca39d ui: adjust the cursor when inserting virtual text
- 046c9a83f7 ui: always use stl/stlnc fillchars when drawing statusline (#25267)
- 0c86828ac5 ui: avoid ambiguity about chunk that clears part of line (#24982)
- e778e01161 ui: avoid recursiveness and invalid memory access #28578
- 0ce3910868 ui: cursor pos with left gravity inline virt_text at eol (#24329)
- 91a4938edf ui: data corruption in remote_ui_raw_line
- 1de82e16c1 ui: delay win_viewport until screen update #24182
- a916523574 ui: doesn't trigger au event when enter is false
- b5a38530ba ui: don't force 'cmdheight' to zero with ext_messages
- fdc8e966a9 ui: don't send empty grid_line with redrawdebug=compositor (#23899)
- 13f55750e9 ui: empty line before the next message after :silent command
- d41b8d4758 ui: ext_cmdline should not move cursor to curwin
- a38d7f9984 ui: fix cursor position with multiple inline virtual text
- e0707d3529 ui: fix edge case around flushing
- 75f350aac6 ui: fix incorrect highlighting when virtual text next to match
- 332b70d2ed ui: fix incorrect highlighting when virtual text wraps with number
- 0c7fa3bdcc ui: fix multi-byte characters highlight in virtual text
- a37c990483 ui: fix overflowing nowrap virtual text not displaying if tab follows
- 5d7afb2e9f ui: fix tabs not being spaced properly after virtual text with no wrap
- 34d862942c ui: fix virtual text not displaying when two overlapping inlines (nowrap)
- c5bf838f8a ui: fix visual and search highlighting interfering with virtual text
- 1936285d98 ui: fixes incorrect rendering when virtual text is not visable and nowrap
- 64e8a3c4d1 ui: handle virtual text with multiple hl in more cases (#25304)
- 981acc2922 ui: propagate line wrapping state on grid_line events
- b8c1b36061 ui: set 'cmdheight' to zero for all open tabpages
- a8522f02e9 ui: startup intro message should be visible with ext_multigrid
- 1cd7824dd6 ui: trigger TabNewEntered after split new tab
- 7626f431d8 ui: update ext_ui widgets when attaching non-remote UI
- 128091a256 ui: wrong cursor position with left gravity inline virt text at eol
- a9418ef8cf ui: wrong display with 0-width inline virt_text at eol (#24854)
- e8b3ed74bc ui-ext: "scroll_delta" handle topfill and skipcol (#24249)
- 43d66c0ebb ui-ext: send title to newly-attached UI
- 519b9929e9 ui.open: some URLs fail on Windows
- 4d654472e6 ui_client: check return code of dup()
- 633bf61d3b ui_client: check return value of channel_job_start (#27729)
- 71ad771ea4 ui_compositor: only reset skipstart at first column (#24776)
- 840749d6c9 undo: fix crash caused by checking undolevels in wrong buffer
- c0a29931e2 unhide: close floating windows first (#25318)
- 9afbfb4d64 unittests: ignore __s128 and __u128 types in ffi
- 9e79f7433e usercmd: Fix buffer overflow in uc_list() (#23225)
- 9802de9334 userfunc: fix possible out of bound access
- 5a8fe0769c vim.deprecate: show deprecation warning in devel versions as well
- ca6dbf3558 vim.iter: use correct cmp function when truncating tail in `take` (#27998)
- e15991c811 vim.json: properly treat luanil options as booleans (#28622)
- fec5e3ab24 vim.region: handle multibyte inclusive selection properly (#26129)
- 2afb04758c vim.system: close check handle (#24270)
- 9b7cf4f0be vim.system: don't process non-fast events during wait() (#27300)
- a44521f46e vim.system: let on_exit handle cleanup after kill
- 6d5f12efd2 vim.system: make timeout work properly
- 57adf8c6e0 vim.ui: open() may wait indefinitely #28325
- e644e7ce0b vim.ui.open: return (don't show) error message
- fd085d9082 vim.ui.open: try wslview before explorer.exe #28424
- 5e4a5f1aaa vim.ui.open: use explorer.exe instead of wslview #26947
- 6cc76011ca watchfiles: skip Created events when poll starts (#23139)
- 9bd4a28079 window: :close crash if WinClosed from float closes window (#27794)
- 731e7f51ee window: :close crash with autocmd, floats and tabpage (#27793)
- 33dfb5a383 window: :close may cause Nvim to quit with autocmd and float
- 2cbfa4b9af window: don't go to unfocusable float when closing (#28455)
- a47be0b2d9 window: prevent win_size_restore from changing cmdheight
- 4bfc7802f0 windows: set stdout to binary mode for --api-info

PERFORMANCE
--------------------------------------------------------------------------------
- a9c551e5e3 cache breakindent/showbreak width in win_lbr_chartabsize
- b5653984e5 don't decode utf8 character multiple times in getvcol()
- cca8a78ea2 improve utf_char2cells() performance (#27353)
- 2f2f12122f remove loop for computing last position in getvcol()
- 32a4c9f4f9 remove redundant strlen in skipwhite (#26177)
- cdf848a314 reuse fast character size calculation algorithm from getvcol()
- 2289ca273c column: avoid counting when max signs are removed from a range
- 4a34da82c1 column: keep track of number of lines that hold up the 'signcolumn'
- f4001d27ef column: only invalidate lines affected by added sign
- 7f084770c2 diagnostic: avoid table copies to filter by severity (#28491)
- 1cb6040554 events: store autocommands in flat vectors (#23256)
- 9af2be292d extmarks: add metadata for efficient filtering of special decorations
- 929e1b7f1c extmarks: avoid unnecessary invalidations for virt_text (#27435)
- 19fb573ad9 extmarks: avoid unnecessary marktree traversal with folds (#24306)
- d44ed3a885 extmarks: better track whether namespace has extmarks (#28615)
- ef94fb69c6 extmarks: don't handle inline virt_text if there is none (#24322)
- 8bb67d64e2 fs: normalize path only once in fs.dir
- 40db569014 iter: make ListIter.totable more efficient (#23714)
- ef1801cc7c iter: reduce number of table allocations
- dcdefd0428 loader: use a quicker version of vim.fs.normalize
- 648f777931 lsp: load buffer contents once when processing semantic tokens responses (#23484)
- 2f4792943a lsp: only joinpath for dirs in watchdirs
- edf05b005f lsp: process semantic tokens response in a coroutine that yields every 5ms (#23375)
- 79a5b89d66 lsp: reduce polling handles for workspace/didChangeWatchedFiles (#23500)
- 4d3a04279d lsp: remove grouping logic from lsp.status (#24096)
- de28a0f84c lsp: replace file polling on linux with per dir watcher  (#26108)
- 7e97c773e3 lsp: use async fs_stat for file watching on linux (#26123)
- cdd87222c8 lua: avoid spairs in vim.validate happy path
- c5af5c0b9a lua: faster vim.deprecate() #28470
- c5990f2cdc os/env: os_getenv() allocation when there is no env var set
- 18e62c1bdb redraw: only redraw Visual area when cursor has moved (#27340)
- 94085cfce8 redraw: reduce redraw with undo and extmarks or 'spell' (#27442)
- 516b173780 rtp: reduce rtp scans (#24191)
- 0e11bf0e1a substitute: don't reallocate new_start every time (#24997)
- 4fd852b8cb treesitter: cache fold query (#24222)
- 07080f67fe treesitter: do not scan past given line for predicate match
- c0cb1e8e94 treesitter: filter out trees outside the visible range early
- 2b6c9bbe7f treesitter: incremental foldupdate
- 3ba930844c treesitter: insert/remove items efficiently (#23443)
- a76b689b47 ui-ext: approximate scroll_delta when scrolling too much (#24234)
- 0d1bc795f8 ui_client: skip some initialization not necessary for ui client
- 14a5813c20 vim.fs.normalize: use iterator

BUILD
--------------------------------------------------------------------------------
- c1ff216668 actually export symbols on mac
- 664f2749e6 add "ci" configure preset to reduce verbosity
- 1094d0c0db add CMAKE_C_FLAGS to --version output
- 1290121722 add CMakePresets for deps build to reduce verbosity
- ce6075f82a add check to clint to prevent non-defs header includes
- 624de849de add function add_target
- 82bb7bbc48 add luajit runtime files when installing (#23514)
- 831d662ac6 add sub-targets to the doc target
- 1bf29a0ae1 add system lua include dir for lpeg
- 4cc69f45b4 add ubsan default options
- 4880385809 adjust clang-tidy warning exclusion logic
- b80a8e2c16 adjust how find order is prioritized
- d561830a52 align .clang-format rules with uncrustify config
- c18d7941ef allow sccache as compiler cache
- cd097ab8cc allow using system rocks
- 54d357dce0 bump lpeg to 1.1.0 (#25016)
- 7840760776 bump minimum cmake version to 3.13
- 7a5effb0f9 bump required minimum libvterm version to 0.3.3
- 2835b0daad bump uncrustify to version 0.77
- 77c0d5415b bump uncrustify to version 0.78.1
- 87a45ad9b9 bump uncrustify to version 0.79.0 (#28756)
- 1798a4b5e9 bump uncrustify version
- 826b95203a bundle uncrustify
- 37bc73e9bc change dependency URLs to cache variables
- 1086016477 cmake cleanup
- 404fdb0f36 cmake fixes
- f8310beeed create BINARY_LIB_DIR directory before adding parser
- 9909668111 create a text file for specifying dependency information
- 5a7280ba68 create helper function for simplifying luarocks installation
- f936a962d0 create separate targets for nvim with and without runtime files
- bcaff309b6 disable UnusedIncludes from clangd
- 7a80e169c5 disable all compiler warnings from dependencies
- 8fdc84d0aa disable conversion warnings for GCC
- 310fb2efc3 disable conversion warnings for older GCC versions
- a1c2da56ec do not use GIT_REPOSITORY for local dependencies
- da2130934b don't allow Xcode as generator
- 543e0256c1 don't define FUNC_ATTR_* as empty in headers (#26317)
- 24b60b0f71 don't format deleted files
- c2e47e7bec don't print installed files locally
- f30844008b download busted from own neovim/deps repository
- 5abba97d77 download dependencies with unreliable mirrors from deps repo
- 71384129f7 download libiconv and gettext from `deps` repository
- 801ac2accb drop diff.exe from windows builds
- f0eb3ca916 eliminate semicolons from --version string
- 397b92e02d enable ASAN for MSVC
- 40139738eb enable IWYU on mac
- 25cfe3fd43 enable formatting during rebase
- 517f0cc634 enable lintlua for scripts/ dir #26391
- 45fe4d11ad enable lintlua for src/ dir #26395
- 59d117ec99 enable lintlua for test/ dir
- c3836e40a2 enable lintlua for test/unit/ dir #26396
- 03c3f7887d enforce PREFER_LUA
- 7cb29a572b ensure `make clean` doesn't remove source files
- 0a3645a723 find system luv on ubuntu
- 5bb17958c5 fix "make iwyu" not working (#24873)
- 12ccea5967 fix --luamod-dev not working properly (#24519)
- 75b80516d5 fix link error for `_BitScanForward64` (#28173)
- 3f188bc533 fix parser installation location
- 4fb1739e6f fix uncrustify
- 896b400bff fix universal mac builds
- 01e4a70d66 improve git-cliff CHANGELOG output
- ef92b5a994 include all dependency directories when generating headers
- 187ae67735 introduce variable DEPS_IGNORE_SHA for skipping dependency hash check
- 30a0299bc6 make dependency URL variables non-cached (#23577)
- b4da4783f9 make genappimage.sh work with existing CMAKE_INSTALL_PREFIX
- 9f9cef1b56 make lpeg an imported library
- c1a05f6112 make the vimdoc generation depend on the nvim target (#25876)
- 8b8e607284 move luarocks and rocks installation to main build
- d1bb9bffd5 remove BUSTED_PRG dead code (#23340)
- 8206954a67 remove LOG_DEBUG option
- c48f94d1f3 remove LOG_LIST_ACTIONS option and related code
- 353a4be7e8 remove PVS
- 88366641ad remove USE_BUNDLED_BUSTED option
- ca243f06dd remove `lintdoc` from `lint` target
- 675522af18 remove clint checks and style text covered by uncrustify
- 8be24fed8f remove config-specific find_package search for libuv
- c40872acbd remove duplicate include directories in --version output
- ebb10d6248 remove functionaltest-lua target
- 8ae39eb584 remove git requirement
- 9f8f287c61 remove luarocks
- 339011f59c remove uninstall target
- c8fd82b26d reorder compiler option setting
- 78239f0bbc reorganize cmake files
- 55793bcfa1 revert accidental permission changes (#23319)
- f31f260f0c rework --version generation
- a827003e30 rework IWYU mapping files
- e5d7003b02 rework formatting to use add_glob_target
- 1997ef134a set char to always be signed
- a75ef40f4c set deps default build type to Release (#27495)
- a1550dbf0a silence new clang-tidy warnings
- 383018dbb8 simplify policy-setting for dependencies
- 4788abf2da stop installing parser.h from treesitter
- 26033eee1d suppress bugprone-reserved-identifier warnings
- 34509bbea3 sync IWYU and clint to ignore the same headers (#26228)
- 0a8e66898d update builtin terminfo (#27272)
- a388c852c4 update libtermkey commit
- 706f871014 update uncrustify to 0.76
- f4136c9d42 use -O3 optimization for release builds
- 2c1e8f7e96 use `GIT_REPOSITORY` for local URLs
- e0d97d264f use built nvim artifact to generate eval files (#25875)
- 3d3717de4e use libvterm commit with generated *.inc files
- 4f526b9fd8 use neovim/libtermkey instead of neovim/deps for libtermkey
- 8405649f92 use neovim/libvterm instead of neovim/deps for libvterm
- 2a57613b9b use stylua with add_glob_target
- ae3eed53d6 various build improvements
- c8667c8756 various cmake fixes
- 5cefec7349 various cmake fixes
- bec2ebebda various cmake fixes
- c50951a4d0 various fixes
- 4c91194611 various fixes
- bf0be0f63e various improvements
- 404043e74c vendor libtermkey
- e38a053692 IWYU: export generated headers
- 71141e8cf5 IWYU: fix headers for arabic.h
- 8b428ca8b7 IWYU: fix includes for func_attr.h
- f4aedbae4c IWYU: fix includes for undo_defs.h
- 17d81ac2ab IWYU: map everything in the C99 specification
- c2a5105e88 IWYU: remove arabic_defs.h (#26235)
- 38a20dd89f IWYU: replace most private mappings with pragmas (#26247)
- 09541d514d IWYU: replace public-to-public mappings with pragmas (#26237)
- 39771b2238 Makefile: add nvim to oldtest phony target
- 6823fdb20b PVS: exclude build directory
- 5d387c3388 ci: ensure correct headers are used on macOS
- dcb11c1091 clint: don't allow INIT() in non-header files (#27407)
- c98ef2d7c6 clint: fix deprecation and linter warnings
- 7e2387f41b clint: more precise check for "defs" headers (#26236)
- cf8b2c0e74 iwyu: add a few more _defs.h mappings (#25435)
- 5f03a1eaab lint: remove unnecessary clint.py rules
- eecddd2416 lint: use stylua without add_glob_target
- 25e51d393a lua: vendor coxpcall
- 4dc86477b6 luarc.json: disable luadoc-miss-see-name #24108
- fd9ac5aa8e makefile: remove a phony target uninstall (#24349)
- 978962f9a0 release.sh: regenerate docs after changing NVIM_API_PRERELEASE (#28229)
- 9ca81b0259 release.sh: set VIMRUNTIME when regenerating docs (#28765)
- 4399c4932d release.sh: use git cliff, drop old script
- d0ae529861 scripts: allow a git ref for lsp_types #24377
- bfb81e1a85 snap: remove obsolete snapcraft.yaml
- 981301d11f terminfo: include user capabilities in comments (#28066)
- 6801befcc5 uninstall: don't build if installation manifest not found
- 345dcba629 windows: set longPathAware in manifest #28389
2024-05-16 14:34:32 +02:00

881 lines
39 KiB
Plaintext

*diagnostic.txt* Diagnostics
NVIM REFERENCE MANUAL
Diagnostic framework *vim.diagnostic*
Nvim provides a framework for displaying errors or warnings from external
tools, otherwise known as "diagnostics". These diagnostics can come from a
variety of sources, such as linters or LSP servers. The diagnostic framework
is an extension to existing error handling functionality such as the
|quickfix| list.
Type |gO| to see the table of contents.
==============================================================================
QUICKSTART *diagnostic-quickstart*
Anything that reports diagnostics is referred to below as a "diagnostic
producer". Diagnostic producers need only follow a few simple steps to
report diagnostics:
1. Create a namespace |nvim_create_namespace()|. Note that the namespace must
have a name. Anonymous namespaces WILL NOT WORK.
2. (Optional) Configure options for the diagnostic namespace
|vim.diagnostic.config()|.
3. Generate diagnostics.
4. Set the diagnostics for the buffer |vim.diagnostic.set()|.
5. Repeat from step 3.
Generally speaking, the API is split between functions meant to be used by
diagnostic producers and those meant for diagnostic consumers (i.e. end users
who want to read and view the diagnostics for a buffer). The APIs for
producers require a {namespace} as their first argument, while those for
consumers generally do not require a namespace (though often one may be
optionally supplied). A good rule of thumb is that if a method is meant to
modify the diagnostics for a buffer (e.g. |vim.diagnostic.set()|) then it
requires a namespace.
*vim.diagnostic.severity* *diagnostic-severity*
The "severity" key in a diagnostic is one of the values defined in
`vim.diagnostic.severity`:
vim.diagnostic.severity.ERROR
vim.diagnostic.severity.WARN
vim.diagnostic.severity.INFO
vim.diagnostic.severity.HINT
Functions that take a severity as an optional parameter (e.g.
|vim.diagnostic.get()|) accept one of three forms:
1. A single |vim.diagnostic.severity| value: >lua
vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
2. A table with a "min" or "max" key (or both): >lua
vim.diagnostic.get(0, { severity = { min = vim.diagnostic.severity.WARN } })
<
This form allows users to specify a range of severities.
3. A list-like table: >lua
vim.diagnostic.get(0, { severity = {
vim.diagnostic.severity.WARN,
vim.diagnostic.severity.INFO,
} })
<
This form allows users to filter for specific severities
==============================================================================
HANDLERS *diagnostic-handlers*
Diagnostics are shown to the user with |vim.diagnostic.show()|. The display of
diagnostics is managed through handlers. A handler is a table with a "show"
and (optionally) a "hide" function. The "show" function has the signature
>
function(namespace, bufnr, diagnostics, opts)
<
and is responsible for displaying or otherwise handling the given
diagnostics. The "hide" function takes care of "cleaning up" any actions taken
by the "show" function and has the signature
>
function(namespace, bufnr)
<
Handlers can be configured with |vim.diagnostic.config()| and added by
creating a new key in `vim.diagnostic.handlers` (see
|diagnostic-handlers-example|).
The {opts} table passed to a handler is the full set of configuration options
(that is, it is not limited to just the options for the handler itself). The
values in the table are already resolved (i.e. if a user specifies a
function for a config option, the function has already been evaluated).
Nvim provides these handlers by default: "virtual_text", "signs", and
"underline".
*diagnostic-handlers-example*
The example below creates a new handler that notifies the user of diagnostics
with |vim.notify()|: >lua
-- It's good practice to namespace custom handlers to avoid collisions
vim.diagnostic.handlers["my/notify"] = {
show = function(namespace, bufnr, diagnostics, opts)
-- In our example, the opts table has a "log_level" option
local level = opts["my/notify"].log_level
local name = vim.diagnostic.get_namespace(namespace).name
local msg = string.format("%d diagnostics in buffer %d from %s",
#diagnostics,
bufnr,
name)
vim.notify(msg, level)
end,
}
-- Users can configure the handler
vim.diagnostic.config({
["my/notify"] = {
log_level = vim.log.levels.INFO
}
})
<
In this example, there is nothing to do when diagnostics are hidden, so we
omit the "hide" function.
Existing handlers can be overridden. For example, use the following to only
show a sign for the highest severity diagnostic on a given line: >lua
-- Create a custom namespace. This will aggregate signs from all other
-- namespaces and only show the one with the highest severity on a
-- given line
local ns = vim.api.nvim_create_namespace("my_namespace")
-- Get a reference to the original signs handler
local orig_signs_handler = vim.diagnostic.handlers.signs
-- Override the built-in signs handler
vim.diagnostic.handlers.signs = {
show = function(_, bufnr, _, opts)
-- Get all diagnostics from the whole buffer rather than just the
-- diagnostics passed to the handler
local diagnostics = vim.diagnostic.get(bufnr)
-- Find the "worst" diagnostic per line
local max_severity_per_line = {}
for _, d in pairs(diagnostics) do
local m = max_severity_per_line[d.lnum]
if not m or d.severity < m.severity then
max_severity_per_line[d.lnum] = d
end
end
-- Pass the filtered diagnostics (with our custom namespace) to
-- the original handler
local filtered_diagnostics = vim.tbl_values(max_severity_per_line)
orig_signs_handler.show(ns, bufnr, filtered_diagnostics, opts)
end,
hide = function(_, bufnr)
orig_signs_handler.hide(ns, bufnr)
end,
}
<
==============================================================================
HIGHLIGHTS *diagnostic-highlights*
All highlights defined for diagnostics begin with `Diagnostic` followed by
the type of highlight (e.g., `Sign`, `Underline`, etc.) and the severity (e.g.
`Error`, `Warn`, etc.)
By default, highlights for signs, floating windows, and virtual text are linked to the
corresponding default highlight. Underline highlights are not linked and use their
own default highlight groups.
For example, the default highlighting for |hl-DiagnosticSignError| is linked
to |hl-DiagnosticError|. To change the default (and therefore the linked
highlights), use the |:highlight| command: >vim
highlight DiagnosticError guifg="BrightRed"
<
*hl-DiagnosticError*
DiagnosticError
Used as the base highlight group.
Other Diagnostic highlights link to this by default (except Underline)
*hl-DiagnosticWarn*
DiagnosticWarn
Used as the base highlight group.
Other Diagnostic highlights link to this by default (except Underline)
*hl-DiagnosticInfo*
DiagnosticInfo
Used as the base highlight group.
Other Diagnostic highlights link to this by default (except Underline)
*hl-DiagnosticHint*
DiagnosticHint
Used as the base highlight group.
Other Diagnostic highlights link to this by default (except Underline)
*hl-DiagnosticOk*
DiagnosticOk
Used as the base highlight group.
Other Diagnostic highlights link to this by default (except Underline)
*hl-DiagnosticVirtualTextError*
DiagnosticVirtualTextError
Used for "Error" diagnostic virtual text.
*hl-DiagnosticVirtualTextWarn*
DiagnosticVirtualTextWarn
Used for "Warn" diagnostic virtual text.
*hl-DiagnosticVirtualTextInfo*
DiagnosticVirtualTextInfo
Used for "Info" diagnostic virtual text.
*hl-DiagnosticVirtualTextHint*
DiagnosticVirtualTextHint
Used for "Hint" diagnostic virtual text.
*hl-DiagnosticVirtualTextOk*
DiagnosticVirtualTextOk
Used for "Ok" diagnostic virtual text.
*hl-DiagnosticUnderlineError*
DiagnosticUnderlineError
Used to underline "Error" diagnostics.
*hl-DiagnosticUnderlineWarn*
DiagnosticUnderlineWarn
Used to underline "Warn" diagnostics.
*hl-DiagnosticUnderlineInfo*
DiagnosticUnderlineInfo
Used to underline "Info" diagnostics.
*hl-DiagnosticUnderlineHint*
DiagnosticUnderlineHint
Used to underline "Hint" diagnostics.
*hl-DiagnosticUnderlineOk*
DiagnosticUnderlineOk
Used to underline "Ok" diagnostics.
*hl-DiagnosticFloatingError*
DiagnosticFloatingError
Used to color "Error" diagnostic messages in diagnostics float.
See |vim.diagnostic.open_float()|
*hl-DiagnosticFloatingWarn*
DiagnosticFloatingWarn
Used to color "Warn" diagnostic messages in diagnostics float.
*hl-DiagnosticFloatingInfo*
DiagnosticFloatingInfo
Used to color "Info" diagnostic messages in diagnostics float.
*hl-DiagnosticFloatingHint*
DiagnosticFloatingHint
Used to color "Hint" diagnostic messages in diagnostics float.
*hl-DiagnosticFloatingOk*
DiagnosticFloatingOk
Used to color "Ok" diagnostic messages in diagnostics float.
*hl-DiagnosticSignError*
DiagnosticSignError
Used for "Error" signs in sign column.
*hl-DiagnosticSignWarn*
DiagnosticSignWarn
Used for "Warn" signs in sign column.
*hl-DiagnosticSignInfo*
DiagnosticSignInfo
Used for "Info" signs in sign column.
*hl-DiagnosticSignHint*
DiagnosticSignHint
Used for "Hint" signs in sign column.
*hl-DiagnosticSignOk*
DiagnosticSignOk
Used for "Ok" signs in sign column.
*hl-DiagnosticDeprecated*
DiagnosticDeprecated
Used for deprecated or obsolete code.
*hl-DiagnosticUnnecessary*
DiagnosticUnnecessary
Used for unnecessary or unused code.
==============================================================================
SIGNS *diagnostic-signs*
Signs are defined for each diagnostic severity. The default text for each sign
is the first letter of the severity name (for example, "E" for ERROR). Signs
can be customized with |vim.diagnostic.config()|. Example: >lua
-- Highlight entire line for errors
-- Highlight the line number for warnings
vim.diagnostic.config({
signs = {
text = {
[vim.diagnostic.severity.ERROR] = '',
[vim.diagnostic.severity.WARN] = '',
},
linehl = {
[vim.diagnostic.severity.ERROR] = 'ErrorMsg',
},
numhl = {
[vim.diagnostic.severity.WARN] = 'WarningMsg',
},
},
})
When the "severity_sort" option is set (see |vim.diagnostic.config()|) the
priority of each sign depends on the severity of the associated diagnostic.
Otherwise, all signs have the same priority (the value of the "priority"
option in the "signs" table of |vim.diagnostic.config()| or 10 if unset).
==============================================================================
EVENTS *diagnostic-events*
*DiagnosticChanged*
DiagnosticChanged After diagnostics have changed. When used from Lua,
the new diagnostics are passed to the autocmd
callback in the "data" table.
Example: >lua
vim.api.nvim_create_autocmd('DiagnosticChanged', {
callback = function(args)
local diagnostics = args.data.diagnostics
vim.print(diagnostics)
end,
})
<
==============================================================================
Lua module: vim.diagnostic *diagnostic-api*
*vim.Diagnostic*
*diagnostic-structure*
Diagnostics use the same indexing as the rest of the Nvim API (i.e.
0-based rows and columns). |api-indexing|
Fields: ~
• {bufnr}? (`integer`) Buffer number
• {lnum} (`integer`) The starting line of the diagnostic
(0-indexed)
• {end_lnum}? (`integer`) The final line of the diagnostic (0-indexed)
• {col} (`integer`) The starting column of the diagnostic
(0-indexed)
• {end_col}? (`integer`) The final column of the diagnostic
(0-indexed)
• {severity}? (`vim.diagnostic.Severity`) The severity of the
diagnostic |vim.diagnostic.severity|
• {message} (`string`) The diagnostic text
• {source}? (`string`) The source of the diagnostic
• {code}? (`string|integer`) The diagnostic code
• {_tags}? (`{ deprecated: boolean, unnecessary: boolean}`)
• {user_data}? (`any`) arbitrary data plugins can add
• {namespace}? (`integer`)
*vim.diagnostic.GetOpts*
A table with the following keys:
Fields: ~
• {namespace}? (`integer[]|integer`) Limit diagnostics to one or more
namespaces.
• {lnum}? (`integer`) Limit diagnostics to those spanning the
specified line number.
• {severity}? (`vim.diagnostic.SeverityFilter`) See
|diagnostic-severity|.
*vim.diagnostic.GotoOpts*
Extends: |vim.diagnostic.GetOpts|
Configuration table with the following keys:
Fields: ~
• {cursor_position}? (`{[1]:integer,[2]:integer}`, default: current cursor position)
Cursor position as a `(row, col)` tuple. See
|nvim_win_get_cursor()|.
• {wrap}? (`boolean`, default: `true`) Whether to loop
around file or not. Similar to 'wrapscan'.
• {severity}? (`vim.diagnostic.SeverityFilter`) See
|diagnostic-severity|.
• {float}? (`boolean|vim.diagnostic.Opts.Float`, default:
`true`) If `true`, call
|vim.diagnostic.open_float()| after moving. If a
table, pass the table as the {opts} parameter to
|vim.diagnostic.open_float()|. Unless overridden,
the float will show diagnostics at the new cursor
position (as if "cursor" were passed to the
"scope" option).
• {win_id}? (`integer`, default: `0`) Window ID
*vim.diagnostic.NS*
Fields: ~
• {name} (`string`)
• {opts} (`vim.diagnostic.Opts`) See |vim.diagnostic.Opts|.
• {user_data} (`table`)
• {disabled}? (`boolean`)
*vim.diagnostic.Opts*
Each of the configuration options below accepts one of the following:
• `false`: Disable this feature
• `true`: Enable this feature, use default settings.
• `table`: Enable this feature with overrides. Use an empty table to use
default values.
• `function`: Function with signature (namespace, bufnr) that returns any
of the above.
Fields: ~
• {underline}? (`boolean|vim.diagnostic.Opts.Underline|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.Underline`, default: `true`)
Use underline for diagnostics.
• {virtual_text}? (`boolean|vim.diagnostic.Opts.VirtualText|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.VirtualText`, default: `true`)
Use virtual text for diagnostics. If multiple
diagnostics are set for a namespace, one prefix
per diagnostic + the last diagnostic message are
shown.
• {signs}? (`boolean|vim.diagnostic.Opts.Signs|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.Signs`, default: `true`)
Use signs for diagnostics |diagnostic-signs|.
• {float}? (`boolean|vim.diagnostic.Opts.Float|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.Float`)
Options for floating windows. See
|vim.diagnostic.Opts.Float|.
• {update_in_insert}? (`boolean`, default: `false`) Update diagnostics
in Insert mode (if `false`, diagnostics are
updated on |InsertLeave|)
• {severity_sort}? (`boolean|{reverse?:boolean}`, default: `false`)
Sort diagnostics by severity. This affects the
order in which signs and virtual text are
displayed. When true, higher severities are
displayed before lower severities (e.g. ERROR is
displayed before WARN). Options:
• {reverse}? (boolean) Reverse sort order
*vim.diagnostic.Opts.Float*
Fields: ~
• {bufnr}? (`integer`, default: current buffer) Buffer number
to show diagnostics from.
• {namespace}? (`integer`) Limit diagnostics to the given namespace
• {scope}? (`'line'|'buffer'|'cursor'|'c'|'l'|'b'`, default:
`line`) Show diagnostics from the whole buffer
(`buffer"`, the current cursor line (`line`), or the
current cursor position (`cursor`). Shorthand
versions are also accepted (`c` for `cursor`, `l`
for `line`, `b` for `buffer`).
• {pos}? (`integer|{[1]:integer,[2]:integer}`) If {scope} is
"line" or "cursor", use this position rather than
the cursor position. If a number, interpreted as a
line number; otherwise, a (row, col) tuple.
• {severity_sort}? (`boolean|{reverse?:boolean}`, default: `false`)
Sort diagnostics by severity. Overrides the setting
from |vim.diagnostic.config()|.
• {severity}? (`vim.diagnostic.SeverityFilter`) See
|diagnostic-severity|. Overrides the setting from
|vim.diagnostic.config()|.
• {header}? (`string|{[1]:string,[2]:any}`) String to use as the
header for the floating window. If a table, it is
interpreted as a `[text, hl_group]` tuple. Overrides
the setting from |vim.diagnostic.config()|.
• {source}? (`boolean|'if_many'`) Include the diagnostic source
in the message. Use "if_many" to only show sources
if there is more than one source of diagnostics in
the buffer. Otherwise, any truthy value means to
always show the diagnostic source. Overrides the
setting from |vim.diagnostic.config()|.
• {format}? (`fun(diagnostic:vim.Diagnostic): string`) A
function that takes a diagnostic as input and
returns a string. The return value is the text used
to display the diagnostic. Overrides the setting
from |vim.diagnostic.config()|.
• {prefix}? (`string|table|(fun(diagnostic:vim.Diagnostic,i:integer,total:integer): string, string)`)
Prefix each diagnostic in the floating window:
• If a `function`, {i} is the index of the
diagnostic being evaluated and {total} is the
total number of diagnostics displayed in the
window. The function should return a `string`
which is prepended to each diagnostic in the
window as well as an (optional) highlight group
which will be used to highlight the prefix.
• If a `table`, it is interpreted as a
`[text, hl_group]` tuple as in |nvim_echo()|
• If a `string`, it is prepended to each diagnostic
in the window with no highlight. Overrides the
setting from |vim.diagnostic.config()|.
• {suffix}? (`string|table|(fun(diagnostic:vim.Diagnostic,i:integer,total:integer): string, string)`)
Same as {prefix}, but appends the text to the
diagnostic instead of prepending it. Overrides the
setting from |vim.diagnostic.config()|.
• {focus_id}? (`string`)
• {border}? (`string`) see |nvim_open_win()|.
*vim.diagnostic.Opts.Signs*
Fields: ~
• {severity}? (`vim.diagnostic.SeverityFilter`) Only show virtual text
for diagnostics matching the given severity
|diagnostic-severity|
• {priority}? (`integer`, default: `10`) Base priority to use for
signs. When {severity_sort} is used, the priority of a
sign is adjusted based on its severity. Otherwise, all
signs use the same priority.
• {text}? (`table<vim.diagnostic.Severity,string>`) A table mapping
|diagnostic-severity| to the sign text to display in the
sign column. The default is to use `"E"`, `"W"`, `"I"`,
and `"H"` for errors, warnings, information, and hints,
respectively. Example: >lua
vim.diagnostic.config({
signs = { text = { [vim.diagnostic.severity.ERROR] = 'E', ... } }
})
<
• {numhl}? (`table<vim.diagnostic.Severity,string>`) A table mapping
|diagnostic-severity| to the highlight group used for the
line number where the sign is placed.
• {linehl}? (`table<vim.diagnostic.Severity,string>`) A table mapping
|diagnostic-severity| to the highlight group used for the
whole line the sign is placed in.
*vim.diagnostic.Opts.Underline*
Fields: ~
• {severity}? (`vim.diagnostic.SeverityFilter`) Only underline
diagnostics matching the given severity
|diagnostic-severity|.
*vim.diagnostic.Opts.VirtualText*
Fields: ~
• {severity}? (`vim.diagnostic.SeverityFilter`) Only show
virtual text for diagnostics matching the given
severity |diagnostic-severity|
• {source}? (`boolean|"if_many"`) Include the diagnostic
source in virtual text. Use `'if_many'` to only
show sources if there is more than one
diagnostic source in the buffer. Otherwise, any
truthy value means to always show the diagnostic
source.
• {spacing}? (`integer`) Amount of empty spaces inserted at
the beginning of the virtual text.
• {prefix}? (`string|(fun(diagnostic:vim.Diagnostic,i:integer,total:integer): string)`)
Prepend diagnostic message with prefix. If a
`function`, {i} is the index of the diagnostic
being evaluated, and {total} is the total number
of diagnostics for the line. This can be used to
render diagnostic symbols or error codes.
• {suffix}? (`string|(fun(diagnostic:vim.Diagnostic): string)`)
Append diagnostic message with suffix. This can
be used to render an LSP diagnostic error code.
• {format}? (`fun(diagnostic:vim.Diagnostic): string`) The
return value is the text used to display the
diagnostic. Example: >lua
function(diagnostic)
if diagnostic.severity == vim.diagnostic.severity.ERROR then
return string.format("E: %s", diagnostic.message)
end
return diagnostic.message
end
<
• {hl_mode}? (`'replace'|'combine'|'blend'`) See
|nvim_buf_set_extmark()|.
• {virt_text}? (`{[1]:string,[2]:any}[]`) See
|nvim_buf_set_extmark()|.
• {virt_text_pos}? (`'eol'|'overlay'|'right_align'|'inline'`) See
|nvim_buf_set_extmark()|.
• {virt_text_win_col}? (`integer`) See |nvim_buf_set_extmark()|.
• {virt_text_hide}? (`boolean`) See |nvim_buf_set_extmark()|.
config({opts}, {namespace}) *vim.diagnostic.config()*
Configure diagnostic options globally or for a specific diagnostic
namespace.
Configuration can be specified globally, per-namespace, or ephemerally
(i.e. only for a single call to |vim.diagnostic.set()| or
|vim.diagnostic.show()|). Ephemeral configuration has highest priority,
followed by namespace configuration, and finally global configuration.
For example, if a user enables virtual text globally with >lua
vim.diagnostic.config({ virtual_text = true })
<
and a diagnostic producer sets diagnostics with >lua
vim.diagnostic.set(ns, 0, diagnostics, { virtual_text = false })
<
then virtual text will not be enabled for those diagnostics.
Parameters: ~
• {opts} (`vim.diagnostic.Opts?`) When omitted or `nil`, retrieve
the current configuration. Otherwise, a configuration
table (see |vim.diagnostic.Opts|).
• {namespace} (`integer?`) Update the options for the given namespace.
When omitted, update the global diagnostic options.
Return: ~
(`vim.diagnostic.Opts?`) Current diagnostic config if {opts} is
omitted. See |vim.diagnostic.Opts|.
count({bufnr}, {opts}) *vim.diagnostic.count()*
Get current diagnostics count.
Parameters: ~
• {bufnr} (`integer?`) Buffer number to get diagnostics from. Use 0 for
current buffer or nil for all buffers.
• {opts} (`vim.diagnostic.GetOpts?`) See |vim.diagnostic.GetOpts|.
Return: ~
(`table`) Table with actually present severity values as keys (see
|diagnostic-severity|) and integer counts as values.
enable({enable}, {filter}) *vim.diagnostic.enable()*
Enables or disables diagnostics.
To "toggle", pass the inverse of `is_enabled()`: >lua
vim.diagnostic.enable(not vim.diagnostic.is_enabled())
<
Parameters: ~
• {enable} (`boolean?`) true/nil to enable, false to disable
• {filter} (`table?`) Optional filters |kwargs|, or `nil` for all.
• {ns_id}? (`integer`) Diagnostic namespace, or `nil` for
all.
• {bufnr}? (`integer`) Buffer number, or 0 for current
buffer, or `nil` for all buffers.
fromqflist({list}) *vim.diagnostic.fromqflist()*
Convert a list of quickfix items to a list of diagnostics.
Parameters: ~
• {list} (`table[]`) List of quickfix items from |getqflist()| or
|getloclist()|.
Return: ~
(`vim.Diagnostic[]`) See |vim.Diagnostic|.
get({bufnr}, {opts}) *vim.diagnostic.get()*
Get current diagnostics.
Modifying diagnostics in the returned table has no effect. To set
diagnostics in a buffer, use |vim.diagnostic.set()|.
Parameters: ~
• {bufnr} (`integer?`) Buffer number to get diagnostics from. Use 0 for
current buffer or nil for all buffers.
• {opts} (`vim.diagnostic.GetOpts?`) See |vim.diagnostic.GetOpts|.
Return: ~
(`vim.Diagnostic[]`) Fields `bufnr`, `end_lnum`, `end_col`, and
`severity` are guaranteed to be present. See |vim.Diagnostic|.
get_namespace({namespace}) *vim.diagnostic.get_namespace()*
Get namespace metadata.
Parameters: ~
• {namespace} (`integer`) Diagnostic namespace
Return: ~
(`vim.diagnostic.NS`) Namespace metadata. See |vim.diagnostic.NS|.
get_namespaces() *vim.diagnostic.get_namespaces()*
Get current diagnostic namespaces.
Return: ~
(`table<integer,vim.diagnostic.NS>`) List of active diagnostic
namespaces |vim.diagnostic|.
get_next({opts}) *vim.diagnostic.get_next()*
Get the next diagnostic closest to the cursor position.
Parameters: ~
• {opts} (`vim.diagnostic.GotoOpts?`) See |vim.diagnostic.GotoOpts|.
Return: ~
(`vim.Diagnostic?`) Next diagnostic. See |vim.Diagnostic|.
get_next_pos({opts}) *vim.diagnostic.get_next_pos()*
Return the position of the next diagnostic in the current buffer.
Parameters: ~
• {opts} (`vim.diagnostic.GotoOpts?`) See |vim.diagnostic.GotoOpts|.
Return: ~
(`table|false`) Next diagnostic position as a `(row, col)` tuple or
false if no next diagnostic.
get_prev({opts}) *vim.diagnostic.get_prev()*
Get the previous diagnostic closest to the cursor position.
Parameters: ~
• {opts} (`vim.diagnostic.GotoOpts?`) See |vim.diagnostic.GotoOpts|.
Return: ~
(`vim.Diagnostic?`) Previous diagnostic. See |vim.Diagnostic|.
get_prev_pos({opts}) *vim.diagnostic.get_prev_pos()*
Return the position of the previous diagnostic in the current buffer.
Parameters: ~
• {opts} (`vim.diagnostic.GotoOpts?`) See |vim.diagnostic.GotoOpts|.
Return: ~
(`table|false`) Previous diagnostic position as a `(row, col)` tuple
or `false` if there is no prior diagnostic.
goto_next({opts}) *vim.diagnostic.goto_next()*
Move to the next diagnostic.
Parameters: ~
• {opts} (`vim.diagnostic.GotoOpts?`) See |vim.diagnostic.GotoOpts|.
goto_prev({opts}) *vim.diagnostic.goto_prev()*
Move to the previous diagnostic in the current buffer.
Parameters: ~
• {opts} (`vim.diagnostic.GotoOpts?`) See |vim.diagnostic.GotoOpts|.
hide({namespace}, {bufnr}) *vim.diagnostic.hide()*
Hide currently displayed diagnostics.
This only clears the decorations displayed in the buffer. Diagnostics can
be redisplayed with |vim.diagnostic.show()|. To completely remove
diagnostics, use |vim.diagnostic.reset()|.
To hide diagnostics and prevent them from re-displaying, use
|vim.diagnostic.enable()|.
Parameters: ~
• {namespace} (`integer?`) Diagnostic namespace. When omitted, hide
diagnostics from all namespaces.
• {bufnr} (`integer?`) Buffer number, or 0 for current buffer. When
omitted, hide diagnostics in all buffers.
is_enabled({filter}) *vim.diagnostic.is_enabled()*
Check whether diagnostics are enabled.
Parameters: ~
• {filter} (`table?`) Optional filters |kwargs|, or `nil` for all.
• {ns_id}? (`integer`) Diagnostic namespace, or `nil` for
all.
• {bufnr}? (`integer`) Buffer number, or 0 for current
buffer, or `nil` for all buffers.
Return: ~
(`boolean`)
*vim.diagnostic.match()*
match({str}, {pat}, {groups}, {severity_map}, {defaults})
Parse a diagnostic from a string.
For example, consider a line of output from a linter: >
WARNING filename:27:3: Variable 'foo' does not exist
<
This can be parsed into |vim.Diagnostic| structure with: >lua
local s = "WARNING filename:27:3: Variable 'foo' does not exist"
local pattern = "^(%w+) %w+:(%d+):(%d+): (.+)$"
local groups = { "severity", "lnum", "col", "message" }
vim.diagnostic.match(s, pattern, groups, { WARNING = vim.diagnostic.WARN })
<
Parameters: ~
• {str} (`string`) String to parse diagnostics from.
• {pat} (`string`) Lua pattern with capture groups.
• {groups} (`string[]`) List of fields in a |vim.Diagnostic|
structure to associate with captures from {pat}.
• {severity_map} (`table`) A table mapping the severity field from
{groups} with an item from |vim.diagnostic.severity|.
• {defaults} (`table?`) Table of default values for any fields not
listed in {groups}. When omitted, numeric values
default to 0 and "severity" defaults to ERROR.
Return: ~
(`vim.Diagnostic?`) |vim.Diagnostic| structure or `nil` if {pat} fails
to match {str}.
open_float({opts}) *vim.diagnostic.open_float()*
Show diagnostics in a floating window.
Parameters: ~
• {opts} (`vim.diagnostic.Opts.Float?`) See
|vim.diagnostic.Opts.Float|.
Return (multiple): ~
(`integer?`) float_bufnr
(`integer?`) win_id
reset({namespace}, {bufnr}) *vim.diagnostic.reset()*
Remove all diagnostics from the given namespace.
Unlike |vim.diagnostic.hide()|, this function removes all saved
diagnostics. They cannot be redisplayed using |vim.diagnostic.show()|. To
simply remove diagnostic decorations in a way that they can be
re-displayed, use |vim.diagnostic.hide()|.
Parameters: ~
• {namespace} (`integer?`) Diagnostic namespace. When omitted, remove
diagnostics from all namespaces.
• {bufnr} (`integer?`) Remove diagnostics for the given buffer.
When omitted, diagnostics are removed for all buffers.
set({namespace}, {bufnr}, {diagnostics}, {opts}) *vim.diagnostic.set()*
Set diagnostics for the given namespace and buffer.
Parameters: ~
• {namespace} (`integer`) The diagnostic namespace
• {bufnr} (`integer`) Buffer number
• {diagnostics} (`vim.Diagnostic[]`) See |vim.Diagnostic|.
• {opts} (`vim.diagnostic.Opts?`) Display options to pass to
|vim.diagnostic.show()|. See |vim.diagnostic.Opts|.
setloclist({opts}) *vim.diagnostic.setloclist()*
Add buffer diagnostics to the location list.
Parameters: ~
• {opts} (`table?`) Configuration table with the following keys:
• {namespace}? (`integer`) Only add diagnostics from the given
namespace.
• {winnr}? (`integer`, default: `0`) Window number to set
location list for.
• {open}? (`boolean`, default: `true`) Open the location list
after setting.
• {title}? (`string`) Title of the location list. Defaults to
"Diagnostics".
• {severity}? (`vim.diagnostic.Severity`) See
|diagnostic-severity|.
setqflist({opts}) *vim.diagnostic.setqflist()*
Add all diagnostics to the quickfix list.
Parameters: ~
• {opts} (`table?`) Configuration table with the following keys:
• {namespace}? (`integer`) Only add diagnostics from the given
namespace.
• {open}? (`boolean`, default: `true`) Open quickfix list
after setting.
• {title}? (`string`) Title of quickfix list. Defaults to
"Diagnostics".
• {severity}? (`vim.diagnostic.Severity`) See
|diagnostic-severity|.
*vim.diagnostic.show()*
show({namespace}, {bufnr}, {diagnostics}, {opts})
Display diagnostics for the given namespace and buffer.
Parameters: ~
• {namespace} (`integer?`) Diagnostic namespace. When omitted, show
diagnostics from all namespaces.
• {bufnr} (`integer?`) Buffer number, or 0 for current buffer.
When omitted, show diagnostics in all buffers.
• {diagnostics} (`vim.Diagnostic[]?`) The diagnostics to display. When
omitted, use the saved diagnostics for the given
namespace and buffer. This can be used to display a
list of diagnostics without saving them or to display
only a subset of diagnostics. May not be used when
{namespace} or {bufnr} is nil. See |vim.Diagnostic|.
• {opts} (`vim.diagnostic.Opts?`) Display options. See
|vim.diagnostic.Opts|.
toqflist({diagnostics}) *vim.diagnostic.toqflist()*
Convert a list of diagnostics to a list of quickfix items that can be
passed to |setqflist()| or |setloclist()|.
Parameters: ~
• {diagnostics} (`vim.Diagnostic[]`) See |vim.Diagnostic|.
Return: ~
(`table[]`) Quickfix list items |setqflist-what|
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl: