mirror of
https://github.com/neovim/neovim.git
synced 2024-12-31 17:13:26 -07:00
27fb62988e
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
2365 lines
105 KiB
Plaintext
2365 lines
105 KiB
Plaintext
*lsp.txt* LSP
|
|
|
|
|
|
NVIM REFERENCE MANUAL
|
|
|
|
|
|
LSP client/framework *lsp* *LSP*
|
|
|
|
Nvim supports the Language Server Protocol (LSP), which means it acts as
|
|
a client to LSP servers and includes a Lua framework `vim.lsp` for building
|
|
enhanced LSP tools.
|
|
|
|
https://microsoft.github.io/language-server-protocol/
|
|
|
|
LSP facilitates features like go-to-definition, find-references, hover,
|
|
completion, rename, format, refactor, etc., using semantic whole-project
|
|
analysis (unlike |ctags|).
|
|
|
|
Type |gO| to see the table of contents.
|
|
|
|
==============================================================================
|
|
QUICKSTART *lsp-quickstart*
|
|
|
|
Nvim provides an LSP client, but the servers are provided by third parties.
|
|
Follow these steps to get LSP features:
|
|
|
|
1. Install language servers using your package manager or by following the
|
|
upstream installation instruction. You can find language servers here:
|
|
https://microsoft.github.io/language-server-protocol/implementors/servers/
|
|
|
|
2. Configure the LSP client per language server. See |vim.lsp.start()| or use
|
|
this minimal example as a guide: >lua
|
|
|
|
vim.lsp.start({
|
|
name = 'my-server-name',
|
|
cmd = {'name-of-language-server-executable'},
|
|
root_dir = vim.fs.root(0, {'setup.py', 'pyproject.toml'}),
|
|
})
|
|
<
|
|
3. Check that the server attached to the buffer: >
|
|
:lua =vim.lsp.get_clients()
|
|
|
|
4. Configure keymaps and autocmds to use LSP features. See |lsp-config|.
|
|
|
|
*lsp-config*
|
|
*lsp-defaults*
|
|
When the LSP client starts it enables diagnostics |vim.diagnostic| (see
|
|
|vim.diagnostic.config()| to customize). It also sets various default options,
|
|
listed below, if (1) the language server supports the functionality and (2)
|
|
the options are empty or were set by the builtin runtime (ftplugin) files. The
|
|
options are not restored when the LSP client is stopped or detached.
|
|
|
|
- 'omnifunc' is set to |vim.lsp.omnifunc()|, use |i_CTRL-X_CTRL-O| to trigger
|
|
completion.
|
|
- 'tagfunc' is set to |vim.lsp.tagfunc()|. This enables features like
|
|
go-to-definition, |:tjump|, and keymaps like |CTRL-]|, |CTRL-W_]|,
|
|
|CTRL-W_}| to utilize the language server.
|
|
- 'formatexpr' is set to |vim.lsp.formatexpr()|, so you can format lines via
|
|
|gq| if the language server supports it.
|
|
- To opt out of this use |gw| instead of gq, or set 'formatexpr' on LspAttach.
|
|
- |K| is mapped to |vim.lsp.buf.hover()| unless |'keywordprg'| is customized or
|
|
a custom keymap for `K` exists.
|
|
|
|
*lsp-defaults-disable*
|
|
To override the above defaults, set or unset the options on |LspAttach|: >lua
|
|
|
|
vim.api.nvim_create_autocmd('LspAttach', {
|
|
callback = function(ev)
|
|
vim.bo[ev.buf].formatexpr = nil
|
|
vim.bo[ev.buf].omnifunc = nil
|
|
vim.keymap.del('n', 'K', { buffer = ev.buf })
|
|
end,
|
|
})
|
|
|
|
To use other LSP features, set keymaps on |LspAttach|. Not all language
|
|
servers provide the same capabilities. To ensure you only set keymaps if the
|
|
language server supports a feature, guard keymaps behind capability checks.
|
|
Example: >lua
|
|
|
|
vim.api.nvim_create_autocmd('LspAttach', {
|
|
callback = function(args)
|
|
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
|
if client.supports_method('textDocument/rename') then
|
|
-- Create a keymap for vim.lsp.buf.rename()
|
|
end
|
|
if client.supports_method('textDocument/implementation') then
|
|
-- Create a keymap for vim.lsp.buf.implementation
|
|
end
|
|
end,
|
|
})
|
|
<
|
|
To learn what capabilities are available you can run the following command in
|
|
a buffer with a started LSP client: >vim
|
|
|
|
:lua =vim.lsp.get_clients()[1].server_capabilities
|
|
|
|
Full list of features provided by default can be found in |lsp-buf|.
|
|
|
|
================================================================================
|
|
FAQ *lsp-faq*
|
|
|
|
- Q: How to force-reload LSP?
|
|
- A: Stop all clients, then reload the buffer. >vim
|
|
:lua vim.lsp.stop_client(vim.lsp.get_clients())
|
|
:edit
|
|
|
|
- Q: Why isn't completion working?
|
|
- A: In the buffer where you want to use LSP, check that 'omnifunc' is set to
|
|
"v:lua.vim.lsp.omnifunc": `:verbose set omnifunc?`
|
|
- Some other plugin may be overriding the option. To avoid that you could
|
|
set the option in an |after-directory| ftplugin, e.g.
|
|
"after/ftplugin/python.vim".
|
|
|
|
- Q: How do I run a request synchronously (e.g. for formatting on file save)?
|
|
- A: Check if the function has an `async` parameter and set the value to
|
|
false. E.g. code formatting: >vim
|
|
|
|
" Auto-format *.rs (rust) files prior to saving them
|
|
" (async = false is the default for format)
|
|
autocmd BufWritePre *.rs lua vim.lsp.buf.format({ async = false })
|
|
<
|
|
*lsp-vs-treesitter*
|
|
- Q: How do LSP and Treesitter compare?
|
|
- A: LSP requires a client and language server. The language server uses
|
|
semantic analysis to understand code at a project level. This provides
|
|
language servers with the ability to rename across files, find
|
|
definitions in external libraries and more.
|
|
|
|
Treesitter is a language parsing library that provides excellent tools
|
|
for incrementally parsing text and handling errors. This makes it a great
|
|
fit for editors to understand the contents of the current file for things
|
|
like syntax highlighting, simple goto-definitions, scope analysis and
|
|
more.
|
|
|
|
LSP and Treesitter are both great tools for editing and inspecting code.
|
|
|
|
================================================================================
|
|
LSP API *lsp-api*
|
|
|
|
LSP core API is described at |lsp-core|. Those are the core functions for
|
|
creating and managing clients.
|
|
|
|
The `vim.lsp.buf_…` functions perform operations for all LSP clients attached
|
|
to the given buffer. |lsp-buf|
|
|
|
|
LSP request/response handlers are implemented as Lua functions (see
|
|
|lsp-handler|).
|
|
*lsp-method*
|
|
|
|
Requests and notifications defined by the LSP specification are referred to as
|
|
"LSP methods". The Nvim LSP client provides default handlers in the global
|
|
|vim.lsp.handlers| table, you can list them with this command: >vim
|
|
|
|
:lua vim.print(vim.tbl_keys(vim.lsp.handlers))
|
|
<
|
|
They are also listed below. Note that handlers depend on server support: they
|
|
won't run if your server doesn't support them.
|
|
|
|
- callHierarchy/incomingCalls
|
|
- callHierarchy/outgoingCalls
|
|
- textDocument/codeAction
|
|
- textDocument/completion
|
|
- textDocument/declaration*
|
|
- textDocument/definition
|
|
- textDocument/diagnostic
|
|
- textDocument/documentHighlight
|
|
- textDocument/documentSymbol
|
|
- textDocument/formatting
|
|
- textDocument/hover
|
|
- textDocument/implementation*
|
|
- textDocument/inlayHint
|
|
- textDocument/prepareTypeHierarchy
|
|
- textDocument/publishDiagnostics
|
|
- textDocument/rangeFormatting
|
|
- textDocument/references
|
|
- textDocument/rename
|
|
- textDocument/semanticTokens/full
|
|
- textDocument/semanticTokens/full/delta
|
|
- textDocument/signatureHelp
|
|
- textDocument/typeDefinition*
|
|
- typeHierarchy/subtypes
|
|
- typeHierarchy/supertypes
|
|
- window/logMessage
|
|
- window/showMessage
|
|
- window/showDocument
|
|
- window/showMessageRequest
|
|
- workspace/applyEdit
|
|
- workspace/configuration
|
|
- workspace/executeCommand
|
|
- workspace/inlayHint/refresh
|
|
- workspace/symbol
|
|
- workspace/workspaceFolders
|
|
|
|
*lsp-handler*
|
|
LSP handlers are functions that handle |lsp-response|s to requests made by Nvim
|
|
to the server. (Notifications, as opposed to requests, are fire-and-forget:
|
|
there is no response, so they can't be handled. |lsp-notification|)
|
|
|
|
Each response handler has this signature: >
|
|
|
|
function(err, result, ctx, config)
|
|
<
|
|
Parameters: ~
|
|
- {err} (table|nil) Error info dict, or `nil` if the request
|
|
completed.
|
|
- {result} (Result | Params | nil) `result` key of the |lsp-response| or
|
|
`nil` if the request failed.
|
|
- {ctx} (table) Table of calling state associated with the
|
|
handler, with these keys:
|
|
- {method} (string) |lsp-method| name.
|
|
- {client_id} (number) |vim.lsp.Client| identifier.
|
|
- {bufnr} (Buffer) Buffer handle.
|
|
- {params} (table|nil) Request parameters table.
|
|
- {version} (number) Document version at time of
|
|
request. Handlers can compare this to the
|
|
current document version to check if the
|
|
response is "stale". See also |b:changedtick|.
|
|
- {config} (table) Handler-defined configuration table, which allows
|
|
users to customize handler behavior.
|
|
For an example, see:
|
|
|vim.lsp.diagnostic.on_publish_diagnostics()|
|
|
To configure a particular |lsp-handler|, see:
|
|
|lsp-handler-configuration|
|
|
|
|
Returns: ~
|
|
Two values `result, err` where `err` is shaped like an RPC error: >
|
|
{ code, message, data? }
|
|
< You can use |vim.lsp.rpc.rpc_response_error()| to create this object.
|
|
|
|
*lsp-handler-configuration*
|
|
|
|
To configure the behavior of a builtin |lsp-handler|, the convenient method
|
|
|vim.lsp.with()| is provided for users.
|
|
|
|
To configure the behavior of |vim.lsp.diagnostic.on_publish_diagnostics()|,
|
|
consider the following example, where a new |lsp-handler| is created using
|
|
|vim.lsp.with()| that no longer generates signs for the diagnostics: >lua
|
|
|
|
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
-- Disable signs
|
|
signs = false,
|
|
}
|
|
)
|
|
<
|
|
To enable signs, use |vim.lsp.with()| again to create and assign a new
|
|
|lsp-handler| to |vim.lsp.handlers| for the associated method: >lua
|
|
|
|
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
-- Enable signs
|
|
signs = true,
|
|
}
|
|
)
|
|
<
|
|
To configure a handler on a per-server basis, you can use the {handlers} key
|
|
for |vim.lsp.start_client()| >lua
|
|
|
|
vim.lsp.start_client {
|
|
..., -- Other configuration omitted.
|
|
handlers = {
|
|
["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
-- Disable virtual_text
|
|
virtual_text = false,
|
|
}
|
|
),
|
|
},
|
|
}
|
|
<
|
|
or if using "nvim-lspconfig", you can use the {handlers} key of `setup()`:
|
|
>lua
|
|
|
|
require('lspconfig').rust_analyzer.setup {
|
|
handlers = {
|
|
["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
-- Disable virtual_text
|
|
virtual_text = false
|
|
}
|
|
),
|
|
}
|
|
}
|
|
<
|
|
Some handlers do not have an explicitly named handler function (such as
|
|
||vim.lsp.diagnostic.on_publish_diagnostics()|). To override these, first
|
|
create a reference to the existing handler: >lua
|
|
|
|
local on_references = vim.lsp.handlers["textDocument/references"]
|
|
vim.lsp.handlers["textDocument/references"] = vim.lsp.with(
|
|
on_references, {
|
|
-- Use location list instead of quickfix list
|
|
loclist = true,
|
|
}
|
|
)
|
|
<
|
|
*lsp-handler-resolution*
|
|
Handlers can be set by:
|
|
|
|
- Setting a field in vim.lsp.handlers. *vim.lsp.handlers*
|
|
vim.lsp.handlers is a global table that contains the default mapping of
|
|
|lsp-method| names to |lsp-handlers|. To override the handler for the
|
|
`"textDocument/definition"` method: >lua
|
|
|
|
vim.lsp.handlers["textDocument/definition"] = my_custom_default_definition
|
|
<
|
|
- The {handlers} parameter of |vim.lsp.start()|. This sets the default
|
|
|lsp-handler| for the server being started. Example: >lua
|
|
|
|
vim.lsp.start {
|
|
..., -- Other configuration omitted.
|
|
handlers = {
|
|
["textDocument/definition"] = my_custom_server_definition
|
|
},
|
|
}
|
|
|
|
- The {handler} parameter of |vim.lsp.buf_request_all()|. This sets
|
|
the |lsp-handler| ONLY for the given request(s). Example: >lua
|
|
|
|
vim.lsp.buf_request_all(
|
|
0,
|
|
"textDocument/definition",
|
|
my_request_params,
|
|
my_handler
|
|
)
|
|
<
|
|
In summary, the |lsp-handler| will be chosen based on the current |lsp-method|
|
|
in the following order:
|
|
|
|
1. Handler passed to |vim.lsp.buf_request_all()|, if any.
|
|
2. Handler defined in |vim.lsp.start()|, if any.
|
|
3. Handler defined in |vim.lsp.handlers|, if any.
|
|
|
|
*vim.lsp.log_levels*
|
|
Log levels are defined in |vim.log.levels|
|
|
|
|
|
|
VIM.LSP.PROTOCOL *vim.lsp.protocol*
|
|
|
|
Module `vim.lsp.protocol` defines constants dictated by the LSP specification,
|
|
and helper functions for creating protocol-related objects.
|
|
https://github.com/microsoft/language-server-protocol/raw/gh-pages/_specifications/specification-3-14.md
|
|
|
|
For example `vim.lsp.protocol.ErrorCodes` allows reverse lookup by number or
|
|
name: >lua
|
|
|
|
vim.lsp.protocol.TextDocumentSyncKind.Full == 1
|
|
vim.lsp.protocol.TextDocumentSyncKind[1] == "Full"
|
|
<
|
|
|
|
*lsp-response*
|
|
LSP response shape:
|
|
https://microsoft.github.io/language-server-protocol/specifications/specification-current/#responseMessage
|
|
|
|
*lsp-notification*
|
|
LSP notification shape:
|
|
https://microsoft.github.io/language-server-protocol/specifications/specification-current/#notificationMessage
|
|
|
|
================================================================================
|
|
LSP HIGHLIGHT *lsp-highlight*
|
|
|
|
Reference Highlights:
|
|
|
|
Highlight groups that are meant to be used by |vim.lsp.buf.document_highlight()|.
|
|
|
|
You can see more about the differences in types here:
|
|
https://microsoft.github.io/language-server-protocol/specification#textDocument_documentHighlight
|
|
|
|
*hl-LspReferenceText*
|
|
LspReferenceText used for highlighting "text" references
|
|
*hl-LspReferenceRead*
|
|
LspReferenceRead used for highlighting "read" references
|
|
*hl-LspReferenceWrite*
|
|
LspReferenceWrite used for highlighting "write" references
|
|
*hl-LspInlayHint*
|
|
LspInlayHint used for highlighting inlay hints
|
|
|
|
|
|
*lsp-highlight-codelens*
|
|
|
|
Highlight groups related to |lsp-codelens| functionality.
|
|
|
|
*hl-LspCodeLens*
|
|
LspCodeLens
|
|
Used to color the virtual text of the codelens. See
|
|
|nvim_buf_set_extmark()|.
|
|
|
|
LspCodeLensSeparator *hl-LspCodeLensSeparator*
|
|
Used to color the separator between two or more code lenses.
|
|
|
|
*lsp-highlight-signature*
|
|
|
|
Highlight groups related to |vim.lsp.handlers.signature_help()|.
|
|
|
|
*hl-LspSignatureActiveParameter*
|
|
LspSignatureActiveParameter
|
|
Used to highlight the active parameter in the signature help. See
|
|
|vim.lsp.handlers.signature_help()|.
|
|
|
|
------------------------------------------------------------------------------
|
|
LSP SEMANTIC HIGHLIGHTS *lsp-semantic-highlight*
|
|
|
|
When available, the LSP client highlights code using |lsp-semantic_tokens|,
|
|
which are another way that LSP servers can provide information about source
|
|
code. Note that this is in addition to treesitter syntax highlighting;
|
|
semantic highlighting does not replace syntax highlighting.
|
|
|
|
The server will typically provide one token per identifier in the source code.
|
|
The token will have a `type` such as "function" or "variable", and 0 or more
|
|
`modifier`s such as "readonly" or "deprecated." The standard types and
|
|
modifiers are described here:
|
|
https://microsoft.github.io/language-server-protocol/specification/#textDocument_semanticTokens
|
|
LSP servers may also use off-spec types and modifiers.
|
|
|
|
The LSP client adds one or more highlights for each token. The highlight
|
|
groups are derived from the token's type and modifiers:
|
|
• `@lsp.type.<type>.<ft>` for the type
|
|
• `@lsp.mod.<mod>.<ft>` for each modifier
|
|
• `@lsp.typemod.<type>.<mod>.<ft>` for each modifier
|
|
Use |:Inspect| to view the highlights for a specific token. Use |:hi| or
|
|
|nvim_set_hl()| to change the appearance of semantic highlights: >vim
|
|
|
|
hi @lsp.type.function guifg=Yellow " function names are yellow
|
|
hi @lsp.type.variable.lua guifg=Green " variables in lua are green
|
|
hi @lsp.mod.deprecated gui=strikethrough " deprecated is crossed out
|
|
hi @lsp.typemod.function.async guifg=Blue " async functions are blue
|
|
<
|
|
The value |vim.highlight.priorities|`.semantic_tokens` is the priority of the
|
|
`@lsp.type.*` highlights. The `@lsp.mod.*` and `@lsp.typemod.*` highlights
|
|
have priorities one and two higher, respectively.
|
|
|
|
You can disable semantic highlights by clearing the highlight groups: >lua
|
|
|
|
-- Hide semantic highlights for functions
|
|
vim.api.nvim_set_hl(0, '@lsp.type.function', {})
|
|
|
|
-- Hide all semantic highlights
|
|
for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do
|
|
vim.api.nvim_set_hl(0, group, {})
|
|
end
|
|
<
|
|
You probably want these inside a |ColorScheme| autocommand.
|
|
|
|
Use |LspTokenUpdate| and |vim.lsp.semantic_tokens.highlight_token()| for more
|
|
complex highlighting.
|
|
|
|
The following is a list of standard captures used in queries for Nvim,
|
|
highlighted according to the current colorscheme (use |:Inspect| on one to see
|
|
the exact definition):
|
|
|
|
@lsp.type.class Identifiers that declare or reference a class type
|
|
@lsp.type.comment Tokens that represent a comment
|
|
@lsp.type.decorator Identifiers that declare or reference decorators and annotations
|
|
@lsp.type.enum Identifiers that declare or reference an enumeration type
|
|
@lsp.type.enumMember Identifiers that declare or reference an enumeration property, constant, or member
|
|
@lsp.type.event Identifiers that declare an event property
|
|
@lsp.type.function Identifiers that declare a function
|
|
@lsp.type.interface Identifiers that declare or reference an interface type
|
|
@lsp.type.keyword Tokens that represent a language keyword
|
|
@lsp.type.macro Identifiers that declare a macro
|
|
@lsp.type.method Identifiers that declare a member function or method
|
|
@lsp.type.modifier Tokens that represent a modifier
|
|
@lsp.type.namespace Identifiers that declare or reference a namespace, module, or package
|
|
@lsp.type.number Tokens that represent a number literal
|
|
@lsp.type.operator Tokens that represent an operator
|
|
@lsp.type.parameter Identifiers that declare or reference a function or method parameters
|
|
@lsp.type.property Identifiers that declare or reference a member property, member field, or member variable
|
|
@lsp.type.regexp Tokens that represent a regular expression literal
|
|
@lsp.type.string Tokens that represent a string literal
|
|
@lsp.type.struct Identifiers that declare or reference a struct type
|
|
@lsp.type.type Identifiers that declare or reference a type that is not covered above
|
|
@lsp.type.typeParameter Identifiers that declare or reference a type parameter
|
|
@lsp.type.variable Identifiers that declare or reference a local or global variable
|
|
|
|
@lsp.mod.abstract Types and member functions that are abstract
|
|
@lsp.mod.async Functions that are marked async
|
|
@lsp.mod.declaration Declarations of symbols
|
|
@lsp.mod.defaultLibrary Symbols that are part of the standard library
|
|
@lsp.mod.definition Definitions of symbols, for example, in header files
|
|
@lsp.mod.deprecated Symbols that should no longer be used
|
|
@lsp.mod.documentation Occurrences of symbols in documentation
|
|
@lsp.mod.modification Variable references where the variable is assigned to
|
|
@lsp.mod.readonly Readonly variables and member fields (constants)
|
|
@lsp.mod.static Class members (static members)
|
|
|
|
==============================================================================
|
|
EVENTS *lsp-events*
|
|
|
|
LspAttach *LspAttach*
|
|
After an LSP client attaches to a buffer. The |autocmd-pattern| is the
|
|
name of the buffer. When used from Lua, the client ID is passed to the
|
|
callback in the "data" table. Example: >lua
|
|
|
|
vim.api.nvim_create_autocmd("LspAttach", {
|
|
callback = function(args)
|
|
local bufnr = args.buf
|
|
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
|
if client.server_capabilities.completionProvider then
|
|
vim.bo[bufnr].omnifunc = "v:lua.vim.lsp.omnifunc"
|
|
end
|
|
if client.server_capabilities.definitionProvider then
|
|
vim.bo[bufnr].tagfunc = "v:lua.vim.lsp.tagfunc"
|
|
end
|
|
end,
|
|
})
|
|
<
|
|
|
|
LspDetach *LspDetach*
|
|
Just before an LSP client detaches from a buffer. The |autocmd-pattern|
|
|
is the name of the buffer. When used from Lua, the client ID is passed
|
|
to the callback in the "data" table. Example: >lua
|
|
|
|
vim.api.nvim_create_autocmd("LspDetach", {
|
|
callback = function(args)
|
|
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
|
-- Do something with the client
|
|
vim.cmd("setlocal tagfunc< omnifunc<")
|
|
end,
|
|
})
|
|
<
|
|
|
|
LspNotify *LspNotify*
|
|
This event is triggered after each successful notification sent to an
|
|
LSP server.
|
|
|
|
When used from Lua, the client_id, LSP method, and parameters are sent
|
|
in the "data" table. Example: >lua
|
|
|
|
vim.api.nvim_create_autocmd('LspNotify', {
|
|
callback = function(args)
|
|
local bufnr = args.buf
|
|
local client_id = args.data.client_id
|
|
local method = args.data.method
|
|
local params = args.data.params
|
|
|
|
-- do something with the notification
|
|
if method == 'textDocument/...' then
|
|
update_buffer(bufnr)
|
|
end
|
|
end,
|
|
})
|
|
<
|
|
|
|
LspProgress *LspProgress*
|
|
Upon receipt of a progress notification from the server. Notifications can
|
|
be polled from a `progress` ring buffer of a |vim.lsp.Client| or use
|
|
|vim.lsp.status()| to get an aggregate message.
|
|
|
|
If the server sends a "work done progress", the `pattern` is set to `kind`
|
|
(one of `begin`, `report` or `end`).
|
|
|
|
When used from Lua, the event contains a `data` table with `client_id` and
|
|
`params` properties. `params` will contain the request params sent by the
|
|
server (see `lsp.ProgressParams`).
|
|
|
|
Example: >vim
|
|
autocmd LspProgress * redrawstatus
|
|
<
|
|
|
|
LspRequest *LspRequest*
|
|
For each request sent to an LSP server, this event is triggered for
|
|
every change to the request's status. The status can be one of
|
|
`pending`, `complete`, or `cancel` and is sent as the {type} on the
|
|
"data" table passed to the callback function.
|
|
|
|
It triggers when the initial request is sent ({type} == `pending`) and
|
|
when the LSP server responds ({type} == `complete`). If a cancellation
|
|
is requested using `client.cancel_request(request_id)`, then this event
|
|
will trigger with {type} == `cancel`.
|
|
|
|
When used from Lua, the client ID, request ID, and request are sent in
|
|
the "data" table. See {requests} in |vim.lsp.Client| for details on the
|
|
{request} value. If the request type is `complete`, the request will be
|
|
deleted from the client's pending requests table immediately after
|
|
calling the event's callbacks. Example: >lua
|
|
|
|
vim.api.nvim_create_autocmd('LspRequest', {
|
|
callback = function(args)
|
|
local bufnr = args.buf
|
|
local client_id = args.data.client_id
|
|
local request_id = args.data.request_id
|
|
local request = args.data.request
|
|
if request.type == 'pending' then
|
|
-- do something with pending requests
|
|
track_pending(client_id, bufnr, request_id, request)
|
|
elseif request.type == 'cancel' then
|
|
-- do something with pending cancel requests
|
|
track_canceling(client_id, bufnr, request_id, request)
|
|
elseif request.type == 'complete' then
|
|
-- do something with finished requests. this pending
|
|
-- request entry is about to be removed since it is complete
|
|
track_finish(client_id, bufnr, request_id, request)
|
|
end
|
|
end,
|
|
})
|
|
<
|
|
|
|
LspTokenUpdate *LspTokenUpdate*
|
|
When a visible semantic token is sent or updated by the LSP server, or
|
|
when an existing token becomes visible for the first time. The
|
|
|autocmd-pattern| is the name of the buffer. When used from Lua, the
|
|
token and client ID are passed to the callback in the "data" table. The
|
|
token fields are documented in |vim.lsp.semantic_tokens.get_at_pos()|.
|
|
Example:
|
|
>lua
|
|
|
|
vim.api.nvim_create_autocmd('LspTokenUpdate', {
|
|
callback = function(args)
|
|
local token = args.data.token
|
|
if token.type == 'variable' and not token.modifiers.readonly then
|
|
vim.lsp.semantic_tokens.highlight_token(
|
|
token, args.buf, args.data.client_id, 'MyMutableVariableHighlight'
|
|
)
|
|
end
|
|
end,
|
|
})
|
|
<
|
|
Note: doing anything other than calling
|
|
|vim.lsp.semantic_tokens.highlight_token()| is considered experimental.
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp *lsp-core*
|
|
|
|
buf_attach_client({bufnr}, {client_id}) *vim.lsp.buf_attach_client()*
|
|
Implements the `textDocument/did…` notifications required to track a
|
|
buffer for any language server.
|
|
|
|
Without calling this, the server won't be notified of changes to a buffer.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer handle, or 0 for current
|
|
• {client_id} (`integer`) Client id
|
|
|
|
Return: ~
|
|
(`boolean`) success `true` if client was attached successfully;
|
|
`false` otherwise
|
|
|
|
buf_detach_client({bufnr}, {client_id}) *vim.lsp.buf_detach_client()*
|
|
Detaches client from the specified buffer. Note: While the server is
|
|
notified that the text document (buffer) was closed, it is still able to
|
|
send notifications should it ignore this notification.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer handle, or 0 for current
|
|
• {client_id} (`integer`) Client id
|
|
|
|
buf_is_attached({bufnr}, {client_id}) *vim.lsp.buf_is_attached()*
|
|
Checks if a buffer is attached for a particular client.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer handle, or 0 for current
|
|
• {client_id} (`integer`) the client id
|
|
|
|
buf_notify({bufnr}, {method}, {params}) *vim.lsp.buf_notify()*
|
|
Send a notification to a server
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer?`) The number of the buffer
|
|
• {method} (`string`) Name of the request method
|
|
• {params} (`any`) Arguments to send to the server
|
|
|
|
Return: ~
|
|
(`boolean`) success true if any client returns true; false otherwise
|
|
|
|
*vim.lsp.buf_request_all()*
|
|
buf_request_all({bufnr}, {method}, {params}, {handler})
|
|
Sends an async request for all active clients attached to the buffer and
|
|
executes the `handler` callback with the combined result.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer handle, or 0 for current.
|
|
• {method} (`string`) LSP method name
|
|
• {params} (`table?`) Parameters to send to the server
|
|
• {handler} (`function`) Handler called after all requests are
|
|
completed. Server results are passed as a
|
|
`client_id:result` map.
|
|
|
|
Return: ~
|
|
(`function`) cancel Function that cancels all requests.
|
|
|
|
*vim.lsp.buf_request_sync()*
|
|
buf_request_sync({bufnr}, {method}, {params}, {timeout_ms})
|
|
Sends a request to all server and waits for the response of all of them.
|
|
|
|
Calls |vim.lsp.buf_request_all()| but blocks Nvim while awaiting the
|
|
result. Parameters are the same as |vim.lsp.buf_request_all()| but the
|
|
result is different. Waits a maximum of {timeout_ms}.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer handle, or 0 for current.
|
|
• {method} (`string`) LSP method name
|
|
• {params} (`table?`) Parameters to send to the server
|
|
• {timeout_ms} (`integer?`, default: `1000`) Maximum time in
|
|
milliseconds to wait for a result.
|
|
|
|
Return (multiple): ~
|
|
(`table<integer, {error: lsp.ResponseError?, result: any}>?`) result
|
|
Map of client_id:request_result.
|
|
(`string?`) err On timeout, cancel, or error, `err` is a string
|
|
describing the failure reason, and `result` is nil.
|
|
|
|
client_is_stopped({client_id}) *vim.lsp.client_is_stopped()*
|
|
Checks whether a client is stopped.
|
|
|
|
Parameters: ~
|
|
• {client_id} (`integer`)
|
|
|
|
Return: ~
|
|
(`boolean`) stopped true if client is stopped, false otherwise.
|
|
|
|
commands *vim.lsp.commands*
|
|
Registry for client side commands. This is an extension point for plugins
|
|
to handle custom commands which are not part of the core language server
|
|
protocol specification.
|
|
|
|
The registry is a table where the key is a unique command name, and the
|
|
value is a function which is called if any LSP action (code action, code
|
|
lenses, ...) triggers the command.
|
|
|
|
If a LSP response contains a command for which no matching entry is
|
|
available in this registry, the command will be executed via the LSP
|
|
server using `workspace/executeCommand`.
|
|
|
|
The first argument to the function will be the `Command`: Command title:
|
|
String command: String arguments?: any[]
|
|
|
|
The second argument is the `ctx` of |lsp-handler|
|
|
|
|
formatexpr({opts}) *vim.lsp.formatexpr()*
|
|
Provides an interface between the built-in client and a `formatexpr`
|
|
function.
|
|
|
|
Currently only supports a single client. This can be set via
|
|
`setlocal formatexpr=v:lua.vim.lsp.formatexpr()` but will typically or in
|
|
`on_attach` via
|
|
`vim.bo[bufnr].formatexpr = 'v:lua.vim.lsp.formatexpr(#{timeout_ms:250})'`.
|
|
|
|
Parameters: ~
|
|
• {opts} (`table?`) A table with the following fields:
|
|
• {timeout_ms} (`integer`, default: 500ms) The timeout period
|
|
for the formatting request..
|
|
|
|
*vim.lsp.get_buffers_by_client_id()*
|
|
get_buffers_by_client_id({client_id})
|
|
Returns list of buffers attached to client_id.
|
|
|
|
Parameters: ~
|
|
• {client_id} (`integer`) client id
|
|
|
|
Return: ~
|
|
(`integer[]`) buffers list of buffer ids
|
|
|
|
get_client_by_id({client_id}) *vim.lsp.get_client_by_id()*
|
|
Gets a client by id, or nil if the id is invalid. The returned client may
|
|
not yet be fully initialized.
|
|
|
|
Parameters: ~
|
|
• {client_id} (`integer`) client id
|
|
|
|
Return: ~
|
|
(`vim.lsp.Client?`) client rpc object
|
|
|
|
get_clients({filter}) *vim.lsp.get_clients()*
|
|
Get active clients.
|
|
|
|
Parameters: ~
|
|
• {filter} (`table?`) Key-value pairs used to filter the returned
|
|
clients.
|
|
• {id}? (`integer`) Only return clients with the given id
|
|
• {bufnr}? (`integer`) Only return clients attached to this
|
|
buffer
|
|
• {name}? (`string`) Only return clients with the given name
|
|
• {method}? (`string`) Only return clients supporting the
|
|
given method
|
|
|
|
Return: ~
|
|
(`vim.lsp.Client[]`) List of |vim.lsp.Client| objects
|
|
|
|
get_log_path() *vim.lsp.get_log_path()*
|
|
Gets the path of the logfile used by the LSP client.
|
|
|
|
Return: ~
|
|
(`string`) path to log file
|
|
|
|
omnifunc({findstart}, {base}) *vim.lsp.omnifunc()*
|
|
Implements 'omnifunc' compatible LSP completion.
|
|
|
|
Parameters: ~
|
|
• {findstart} (`integer`) 0 or 1, decides behavior
|
|
• {base} (`integer`) findstart=0, text to match against
|
|
|
|
Return: ~
|
|
(`integer|table`) Decided by {findstart}:
|
|
• findstart=0: column where the completion starts, or -2 or -3
|
|
• findstart=1: list of matches (actually just calls |complete()|)
|
|
|
|
See also: ~
|
|
• |complete-functions|
|
|
• |complete-items|
|
|
• |CompleteDone|
|
|
|
|
set_log_level({level}) *vim.lsp.set_log_level()*
|
|
Sets the global log level for LSP logging.
|
|
|
|
Levels by name: "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF"
|
|
|
|
Level numbers begin with "TRACE" at 0
|
|
|
|
Use `lsp.log_levels` for reverse lookup.
|
|
|
|
Parameters: ~
|
|
• {level} (`integer|string`) the case insensitive level name or number
|
|
|
|
See also: ~
|
|
• |vim.lsp.log_levels|
|
|
|
|
start({config}, {opts}) *vim.lsp.start()*
|
|
Create a new LSP client and start a language server or reuses an already
|
|
running client if one is found matching `name` and `root_dir`. Attaches
|
|
the current buffer to the client.
|
|
|
|
Example: >lua
|
|
vim.lsp.start({
|
|
name = 'my-server-name',
|
|
cmd = {'name-of-language-server-executable'},
|
|
root_dir = vim.fs.root(0, {'pyproject.toml', 'setup.py'}),
|
|
})
|
|
<
|
|
|
|
See |vim.lsp.start_client()| for all available options. The most important
|
|
are:
|
|
• `name` arbitrary name for the LSP client. Should be unique per language
|
|
server.
|
|
• `cmd` command string[] or function, described at
|
|
|vim.lsp.start_client()|.
|
|
• `root_dir` path to the project root. By default this is used to decide
|
|
if an existing client should be re-used. The example above uses
|
|
|vim.fs.root()| and |vim.fs.dirname()| to detect the root by traversing
|
|
the file system upwards starting from the current directory until either
|
|
a `pyproject.toml` or `setup.py` file is found.
|
|
• `workspace_folders` list of `{ uri:string, name: string }` tables
|
|
specifying the project root folders used by the language server. If
|
|
`nil` the property is derived from `root_dir` for convenience.
|
|
|
|
Language servers use this information to discover metadata like the
|
|
dependencies of your project and they tend to index the contents within
|
|
the project folder.
|
|
|
|
To ensure a language server is only started for languages it can handle,
|
|
make sure to call |vim.lsp.start()| within a |FileType| autocmd. Either
|
|
use |:au|, |nvim_create_autocmd()| or put the call in a
|
|
`ftplugin/<filetype_name>.lua` (See |ftplugin-name|)
|
|
|
|
Parameters: ~
|
|
• {config} (`vim.lsp.ClientConfig`) Configuration for the server. See
|
|
|vim.lsp.ClientConfig|.
|
|
• {opts} (`table?`) Optional keyword arguments
|
|
• {reuse_client}
|
|
(`fun(client: vim.lsp.Client, config: vim.lsp.ClientConfig): boolean`)
|
|
Predicate used to decide if a client should be re-used.
|
|
Used on all running clients. The default implementation
|
|
re-uses a client if name and root_dir matches.
|
|
• {bufnr} (`integer`) Buffer handle to attach to if starting
|
|
or re-using a client (0 for current).
|
|
• {silent}? (`boolean`) Suppress error reporting if the LSP
|
|
server fails to start (default false).
|
|
|
|
Return: ~
|
|
(`integer?`) client_id
|
|
|
|
start_client({config}) *vim.lsp.start_client()*
|
|
Starts and initializes a client with the given configuration.
|
|
|
|
Parameters: ~
|
|
• {config} (`vim.lsp.ClientConfig`) Configuration for the server. See
|
|
|vim.lsp.ClientConfig|.
|
|
|
|
Return (multiple): ~
|
|
(`integer?`) client_id |vim.lsp.get_client_by_id()| Note: client may
|
|
not be fully initialized. Use `on_init` to do any actions once the
|
|
client has been initialized.
|
|
(`string?`) Error message, if any
|
|
|
|
status() *vim.lsp.status()*
|
|
Consumes the latest progress messages from all clients and formats them as
|
|
a string. Empty if there are no clients or if no new messages
|
|
|
|
Return: ~
|
|
(`string`)
|
|
|
|
stop_client({client_id}, {force}) *vim.lsp.stop_client()*
|
|
Stops a client(s).
|
|
|
|
You can also use the `stop()` function on a |vim.lsp.Client| object. To
|
|
stop all clients: >lua
|
|
vim.lsp.stop_client(vim.lsp.get_clients())
|
|
<
|
|
|
|
By default asks the server to shutdown, unless stop was requested already
|
|
for this client, then force-shutdown is attempted.
|
|
|
|
Parameters: ~
|
|
• {client_id} (`integer|integer[]|vim.lsp.Client[]`) id, list of id's,
|
|
or list of |vim.lsp.Client| objects
|
|
• {force} (`boolean?`) shutdown forcefully
|
|
|
|
tagfunc({pattern}, {flags}) *vim.lsp.tagfunc()*
|
|
Provides an interface between the built-in client and 'tagfunc'.
|
|
|
|
When used with normal mode commands (e.g. |CTRL-]|) this will invoke the
|
|
"textDocument/definition" LSP method to find the tag under the cursor.
|
|
Otherwise, uses "workspace/symbol". If no results are returned from any
|
|
LSP servers, falls back to using built-in tags.
|
|
|
|
Parameters: ~
|
|
• {pattern} (`string`) Pattern used to find a workspace symbol
|
|
• {flags} (`string`) See |tag-function|
|
|
|
|
Return: ~
|
|
(`table[]`) tags A list of matching tags
|
|
|
|
with({handler}, {override_config}) *vim.lsp.with()*
|
|
Function to manage overriding defaults for LSP handlers.
|
|
|
|
Parameters: ~
|
|
• {handler} (`lsp.Handler`) See |lsp-handler|
|
|
• {override_config} (`table`) Table containing the keys to override
|
|
behavior of the {handler}
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.client *lsp-client*
|
|
|
|
*vim.lsp.Client*
|
|
|
|
Fields: ~
|
|
• {id} (`integer`) The id allocated to the client.
|
|
• {name} (`string`) If a name is specified on creation,
|
|
that will be used. Otherwise it is just the
|
|
client id. This is used for logs and messages.
|
|
• {rpc} (`vim.lsp.rpc.PublicClient`) RPC client
|
|
object, for low level interaction with the
|
|
client. See |vim.lsp.rpc.start()|.
|
|
• {offset_encoding} (`string`) The encoding used for communicating
|
|
with the server. You can modify this in the
|
|
`config`'s `on_init` method before text is
|
|
sent to the server.
|
|
• {handlers} (`table<string,lsp.Handler>`) The handlers
|
|
used by the client as described in
|
|
|lsp-handler|.
|
|
• {requests} (`table<integer,{ type: string, bufnr: integer, method: string}>`)
|
|
The current pending requests in flight to the
|
|
server. Entries are key-value pairs with the
|
|
key being the request id while the value is a
|
|
table with `type`, `bufnr`, and `method`
|
|
key-value pairs. `type` is either "pending"
|
|
for an active request, or "cancel" for a
|
|
cancel request. It will be "complete"
|
|
ephemerally while executing |LspRequest|
|
|
autocmds when replies are received from the
|
|
server.
|
|
• {config} (`vim.lsp.ClientConfig`) copy of the table
|
|
that was passed by the user to
|
|
|vim.lsp.start_client()|. See
|
|
|vim.lsp.ClientConfig|.
|
|
• {server_capabilities} (`lsp.ServerCapabilities?`) Response from the
|
|
server sent on `initialize` describing the
|
|
server's capabilities.
|
|
• {progress} (`vim.lsp.Client.Progress`) A ring buffer
|
|
(|vim.ringbuf()|) containing progress messages
|
|
sent by the server. See
|
|
|vim.lsp.Client.Progress|.
|
|
• {initialized} (`true?`)
|
|
• {workspace_folders} (`lsp.WorkspaceFolder[]?`) The workspace
|
|
folders configured in the client when the
|
|
server starts. This property is only available
|
|
if the client supports workspace folders. It
|
|
can be `null` if the client supports workspace
|
|
folders but none are configured.
|
|
• {root_dir} (`string`)
|
|
• {attached_buffers} (`table<integer,true>`)
|
|
• {commands} (`table<string,fun(command: lsp.Command, ctx: table)>`)
|
|
Table of command name to function which is
|
|
called if any LSP action (code action, code
|
|
lenses, ...) triggers the command. Client
|
|
commands take precedence over the global
|
|
command registry.
|
|
• {settings} (`table`) Map with language server specific
|
|
settings. These are returned to the language
|
|
server if requested via
|
|
`workspace/configuration`. Keys are
|
|
case-sensitive.
|
|
• {flags} (`table`) A table with flags for the client.
|
|
The current (experimental) flags are:
|
|
• {allow_incremental_sync}? (`boolean`,
|
|
default: `true`) Allow using incremental
|
|
sync for buffer edits
|
|
• {debounce_text_changes} (`integer`, default:
|
|
`150`) Debounce `didChange` notifications to
|
|
the server by the given number in
|
|
milliseconds. No debounce occurs if `nil`.
|
|
• {exit_timeout} (`integer|false`, default:
|
|
`false`) Milliseconds to wait for server to
|
|
exit cleanly after sending the "shutdown"
|
|
request before sending kill -15. If set to
|
|
false, nvim exits immediately after sending
|
|
the "shutdown" request to the server.
|
|
• {get_language_id} (`fun(bufnr: integer, filetype: string): string`)
|
|
• {capabilities} (`lsp.ClientCapabilities`) The capabilities
|
|
provided by the client (editor or tool)
|
|
• {dynamic_capabilities} (`lsp.DynamicCapabilities`)
|
|
• {request} (`fun(method: string, params: table?, handler: lsp.Handler?, bufnr: integer?): boolean, integer?`)
|
|
Sends a request to the server. This is a thin
|
|
wrapper around {client.rpc.request} with some
|
|
additional checking. If {handler} is not
|
|
specified and if there's no respective global
|
|
handler, then an error will occur. Returns:
|
|
{status}, {client_id}?. {status} is a boolean
|
|
indicating if the notification was successful.
|
|
If it is `false`, then it will always be
|
|
`false` (the client has shutdown). If {status}
|
|
is `true`, the function returns {request_id}
|
|
as the second result. You can use this with
|
|
`client.cancel_request(request_id)` to cancel
|
|
the request.
|
|
• {request_sync} (`fun(method: string, params: table?, timeout_ms: integer?, bufnr: integer): {err: lsp.ResponseError?, result:any}?, string?`)
|
|
err # a dictionary, where
|
|
• {notify} (`fun(method: string, params: table?): boolean`)
|
|
Sends a notification to an LSP server.
|
|
Returns: a boolean to indicate if the
|
|
notification was successful. If it is false,
|
|
then it will always be false (the client has
|
|
shutdown).
|
|
• {cancel_request} (`fun(id: integer): boolean`) Cancels a
|
|
request with a given request id. Returns: same
|
|
as `notify()`.
|
|
• {stop} (`fun(force?: boolean)`) Stops a client,
|
|
optionally with force. By default, it will
|
|
just ask the server to shutdown without force.
|
|
If you request to stop a client which has
|
|
previously been requested to shutdown, it will
|
|
automatically escalate and force shutdown.
|
|
• {on_attach} (`fun(bufnr: integer)`) Runs the on_attach
|
|
function from the client's config if it was
|
|
defined. Useful for buffer-local setup.
|
|
• {supports_method} (`fun(method: string, opts?: {bufnr: integer?}): boolean`)
|
|
Checks if a client supports a given method.
|
|
Always returns true for unknown off-spec
|
|
methods. {opts} is a optional
|
|
`{bufnr?: integer}` table. Some language
|
|
server capabilities can be file specific.
|
|
• {is_stopped} (`fun(): boolean`) Checks whether a client is
|
|
stopped. Returns: true if the client is fully
|
|
stopped.
|
|
|
|
*vim.lsp.Client.Progress*
|
|
Extends: |vim.Ringbuf|
|
|
|
|
|
|
Fields: ~
|
|
• {pending} (`table<lsp.ProgressToken,lsp.LSPAny>`)
|
|
|
|
*vim.lsp.ClientConfig*
|
|
|
|
Fields: ~
|
|
• {cmd} (`string[]|fun(dispatchers: vim.lsp.rpc.Dispatchers): vim.lsp.rpc.PublicClient`)
|
|
command string[] that launches the language
|
|
server (treated as in |jobstart()|, must be
|
|
absolute or on `$PATH`, shell constructs like
|
|
"~" are not expanded), or function that creates
|
|
an RPC client. Function receives a `dispatchers`
|
|
table and returns a table with member functions
|
|
`request`, `notify`, `is_closing` and
|
|
`terminate`. See |vim.lsp.rpc.request()|,
|
|
|vim.lsp.rpc.notify()|. For TCP there is a
|
|
builtin RPC client factory:
|
|
|vim.lsp.rpc.connect()|
|
|
• {cmd_cwd}? (`string`, default: cwd) Directory to launch the
|
|
`cmd` process. Not related to `root_dir`.
|
|
• {cmd_env}? (`table`) Environment flags to pass to the LSP
|
|
on spawn. Must be specified using a table.
|
|
Non-string values are coerced to string.
|
|
Example: >lua
|
|
{ PORT = 8080; HOST = "0.0.0.0"; }
|
|
<
|
|
• {detached}? (`boolean`, default: true) Daemonize the server
|
|
process so that it runs in a separate process
|
|
group from Nvim. Nvim will shutdown the process
|
|
on exit, but if Nvim fails to exit cleanly this
|
|
could leave behind orphaned server processes.
|
|
• {workspace_folders}? (`lsp.WorkspaceFolder[]`) List of workspace
|
|
folders passed to the language server. For
|
|
backwards compatibility rootUri and rootPath
|
|
will be derived from the first workspace folder
|
|
in this list. See `workspaceFolders` in the LSP
|
|
spec.
|
|
• {capabilities}? (`lsp.ClientCapabilities`) Map overriding the
|
|
default capabilities defined by
|
|
|vim.lsp.protocol.make_client_capabilities()|,
|
|
passed to the language server on initialization.
|
|
Hint: use make_client_capabilities() and modify
|
|
its result.
|
|
• Note: To send an empty dictionary use
|
|
|vim.empty_dict()|, else it will be encoded as
|
|
an array.
|
|
• {handlers}? (`table<string,function>`) Map of language
|
|
server method names to |lsp-handler|
|
|
• {settings}? (`table`) Map with language server specific
|
|
settings. See the {settings} in
|
|
|vim.lsp.Client|.
|
|
• {commands}? (`table<string,fun(command: lsp.Command, ctx: table)>`)
|
|
Table that maps string of clientside commands to
|
|
user-defined functions. Commands passed to
|
|
start_client take precedence over the global
|
|
command registry. Each key must be a unique
|
|
command name, and the value is a function which
|
|
is called if any LSP action (code action, code
|
|
lenses, ...) triggers the command.
|
|
• {init_options}? (`table`) Values to pass in the initialization
|
|
request as `initializationOptions`. See
|
|
`initialize` in the LSP spec.
|
|
• {name}? (`string`, default: client-id) Name in log
|
|
messages.
|
|
• {get_language_id}? (`fun(bufnr: integer, filetype: string): string`)
|
|
Language ID as string. Defaults to the filetype.
|
|
• {offset_encoding}? (`'utf-8'|'utf-16'|'utf-32'`) The encoding that
|
|
the LSP server expects. Client does not verify
|
|
this is correct.
|
|
• {on_error}? (`fun(code: integer, err: string)`) Callback
|
|
invoked when the client operation throws an
|
|
error. `code` is a number describing the error.
|
|
Other arguments may be passed depending on the
|
|
error kind. See `vim.lsp.rpc.client_errors` for
|
|
possible errors. Use
|
|
`vim.lsp.rpc.client_errors[code]` to get
|
|
human-friendly name.
|
|
• {before_init}? (`fun(params: lsp.InitializeParams, config: vim.lsp.ClientConfig)`)
|
|
Callback invoked before the LSP "initialize"
|
|
phase, where `params` contains the parameters
|
|
being sent to the server and `config` is the
|
|
config that was passed to
|
|
|vim.lsp.start_client()|. You can use this to
|
|
modify parameters before they are sent.
|
|
• {on_init}? (`elem_or_list<fun(client: vim.lsp.Client, initialize_result: lsp.InitializeResult)>`)
|
|
Callback invoked after LSP "initialize", where
|
|
`result` is a table of `capabilities` and
|
|
anything else the server may send. For example,
|
|
clangd sends `initialize_result.offsetEncoding`
|
|
if `capabilities.offsetEncoding` was sent to it.
|
|
You can only modify the `client.offset_encoding`
|
|
here before any notifications are sent.
|
|
• {on_exit}? (`elem_or_list<fun(code: integer, signal: integer, client_id: integer)>`)
|
|
Callback invoked on client exit.
|
|
• code: exit code of the process
|
|
• signal: number describing the signal used to
|
|
terminate (if any)
|
|
• client_id: client handle
|
|
• {on_attach}? (`elem_or_list<fun(client: vim.lsp.Client, bufnr: integer)>`)
|
|
Callback invoked when client attaches to a
|
|
buffer.
|
|
• {trace}? (`'off'|'messages'|'verbose'`, default: "off")
|
|
Passed directly to the language server in the
|
|
initialize request. Invalid/empty values will
|
|
• {flags}? (`table`) A table with flags for the client. The
|
|
current (experimental) flags are:
|
|
• {allow_incremental_sync}? (`boolean`, default:
|
|
`true`) Allow using incremental sync for
|
|
buffer edits
|
|
• {debounce_text_changes} (`integer`, default:
|
|
`150`) Debounce `didChange` notifications to
|
|
the server by the given number in
|
|
milliseconds. No debounce occurs if `nil`.
|
|
• {exit_timeout} (`integer|false`, default:
|
|
`false`) Milliseconds to wait for server to
|
|
exit cleanly after sending the "shutdown"
|
|
request before sending kill -15. If set to
|
|
false, nvim exits immediately after sending
|
|
the "shutdown" request to the server.
|
|
• {root_dir}? (`string`) Directory where the LSP server will
|
|
base its workspaceFolders, rootUri, and rootPath
|
|
on initialization.
|
|
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.buf *lsp-buf*
|
|
|
|
*vim.lsp.ListOpts*
|
|
|
|
Fields: ~
|
|
• {on_list}? (`fun(t: vim.lsp.LocationOpts.OnList)`) list-handler
|
|
replacing the default handler. Called for any non-empty
|
|
result. This table can be used with |setqflist()| or
|
|
|setloclist()|. E.g.: >lua
|
|
local function on_list(options)
|
|
vim.fn.setqflist({}, ' ', options)
|
|
vim.cmd.cfirst()
|
|
end
|
|
|
|
vim.lsp.buf.definition({ on_list = on_list })
|
|
vim.lsp.buf.references(nil, { on_list = on_list })
|
|
<
|
|
|
|
If you prefer loclist instead of qflist: >lua
|
|
vim.lsp.buf.definition({ loclist = true })
|
|
vim.lsp.buf.references(nil, { loclist = true })
|
|
<
|
|
• {loclist}? (`boolean`)
|
|
|
|
*vim.lsp.LocationOpts*
|
|
Extends: |vim.lsp.ListOpts|
|
|
|
|
|
|
Fields: ~
|
|
• {reuse_win}? (`boolean`) Jump to existing window if buffer is already
|
|
open.
|
|
|
|
*vim.lsp.LocationOpts.OnList*
|
|
|
|
Fields: ~
|
|
• {items} (`table[]`) Structured like |setqflist-what|
|
|
• {title}? (`string`) Title for the list.
|
|
• {context}? (`table`) `ctx` from |lsp-handler|
|
|
|
|
|
|
*vim.lsp.buf.add_workspace_folder()*
|
|
add_workspace_folder({workspace_folder})
|
|
Add the folder at path to the workspace folders. If {path} is not
|
|
provided, the user will be prompted for a path using |input()|.
|
|
|
|
Parameters: ~
|
|
• {workspace_folder} (`string?`)
|
|
|
|
clear_references() *vim.lsp.buf.clear_references()*
|
|
Removes document highlights from current buffer.
|
|
|
|
code_action({opts}) *vim.lsp.buf.code_action()*
|
|
Selects a code action available at the current cursor position.
|
|
|
|
Parameters: ~
|
|
• {opts} (`table?`) A table with the following fields:
|
|
• {context}? (`lsp.CodeActionContext`) Corresponds to
|
|
`CodeActionContext` of the LSP specification:
|
|
• {diagnostics}? (`table`) LSP `Diagnostic[]`. Inferred from
|
|
the current position if not provided.
|
|
• {only}? (`table`) List of LSP `CodeActionKind`s used to
|
|
filter the code actions. Most language servers support
|
|
values like `refactor` or `quickfix`.
|
|
• {triggerKind}? (`integer`) The reason why code actions
|
|
were requested.
|
|
• {filter}? (`fun(x: lsp.CodeAction|lsp.Command):boolean`)
|
|
Predicate taking an `CodeAction` and returning a boolean.
|
|
• {apply}? (`boolean`) When set to `true`, and there is just
|
|
one remaining action (after filtering), the action is
|
|
applied without user query.
|
|
• {range}? (`{start: integer[], end: integer[]}`) Range for
|
|
which code actions should be requested. If in visual mode
|
|
this defaults to the active selection. Table must contain
|
|
`start` and `end` keys with {row,col} tuples using mark-like
|
|
indexing. See |api-indexing|
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction
|
|
• vim.lsp.protocol.CodeActionTriggerKind
|
|
|
|
completion({context}) *vim.lsp.buf.completion()*
|
|
Retrieves the completion items at the current cursor position. Can only be
|
|
called in Insert mode.
|
|
|
|
Parameters: ~
|
|
• {context} (`table`) (context support not yet implemented) Additional
|
|
information about the context in which a completion was
|
|
triggered (how it was triggered, and by which trigger
|
|
character, if applicable)
|
|
|
|
See also: ~
|
|
• vim.lsp.protocol.CompletionTriggerKind
|
|
|
|
declaration({opts}) *vim.lsp.buf.declaration()*
|
|
Jumps to the declaration of the symbol under the cursor.
|
|
|
|
Note: ~
|
|
• Many servers do not implement this method. Generally, see
|
|
|vim.lsp.buf.definition()| instead.
|
|
|
|
Parameters: ~
|
|
• {opts} (`vim.lsp.LocationOpts?`) See |vim.lsp.LocationOpts|.
|
|
|
|
definition({opts}) *vim.lsp.buf.definition()*
|
|
Jumps to the definition of the symbol under the cursor.
|
|
|
|
Parameters: ~
|
|
• {opts} (`vim.lsp.LocationOpts?`) See |vim.lsp.LocationOpts|.
|
|
|
|
document_highlight() *vim.lsp.buf.document_highlight()*
|
|
Send request to the server to resolve document highlights for the current
|
|
text document position. This request can be triggered by a key mapping or
|
|
by events such as `CursorHold`, e.g.: >vim
|
|
autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
|
|
autocmd CursorHoldI <buffer> lua vim.lsp.buf.document_highlight()
|
|
autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
|
|
<
|
|
|
|
Note: Usage of |vim.lsp.buf.document_highlight()| requires the following
|
|
highlight groups to be defined or you won't be able to see the actual
|
|
highlights. |hl-LspReferenceText| |hl-LspReferenceRead|
|
|
|hl-LspReferenceWrite|
|
|
|
|
document_symbol({opts}) *vim.lsp.buf.document_symbol()*
|
|
Lists all symbols in the current buffer in the quickfix window.
|
|
|
|
Parameters: ~
|
|
• {opts} (`vim.lsp.ListOpts?`) See |vim.lsp.ListOpts|.
|
|
|
|
execute_command({command_params}) *vim.lsp.buf.execute_command()*
|
|
Executes an LSP server command.
|
|
|
|
Parameters: ~
|
|
• {command_params} (`lsp.ExecuteCommandParams`)
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_executeCommand
|
|
|
|
format({opts}) *vim.lsp.buf.format()*
|
|
Formats a buffer using the attached (and optionally filtered) language
|
|
server clients.
|
|
|
|
Parameters: ~
|
|
• {opts} (`table?`) A table with the following fields:
|
|
• {formatting_options}? (`table`) Can be used to specify
|
|
FormattingOptions. Some unspecified options will be
|
|
automatically derived from the current Nvim options. See
|
|
https://microsoft.github.io/language-server-protocol/specification/#formattingOptions
|
|
• {timeout_ms}? (`integer`, default: `1000`) Time in
|
|
milliseconds to block for formatting requests. No effect if
|
|
async=true.
|
|
• {bufnr}? (`integer`, default: current buffer) Restrict
|
|
formatting to the clients attached to the given buffer.
|
|
• {filter}? (`fun(client: vim.lsp.Client): boolean?`)
|
|
Predicate used to filter clients. Receives a client as
|
|
argument and must return a boolean. Clients matching the
|
|
predicate are included. Example: >lua
|
|
-- Never request typescript-language-server for formatting
|
|
vim.lsp.buf.format {
|
|
filter = function(client) return client.name ~= "tsserver" end
|
|
}
|
|
<
|
|
• {async}? (`boolean`, default: false) If true the method
|
|
won't block. Editing the buffer while formatting
|
|
asynchronous can lead to unexpected changes.
|
|
• {id}? (`integer`) Restrict formatting to the client with ID
|
|
(client.id) matching this field.
|
|
• {name}? (`string`) Restrict formatting to the client with
|
|
name (client.name) matching this field.
|
|
• {range}? (`{start:integer[],end:integer[]}`, default:
|
|
current selection in visual mode, `nil` in other modes,
|
|
formatting the full buffer) Range to format. Table must
|
|
contain `start` and `end` keys with {row,col} tuples using
|
|
(1,0) indexing.
|
|
|
|
hover() *vim.lsp.buf.hover()*
|
|
Displays hover information about the symbol under the cursor in a floating
|
|
window. Calling the function twice will jump into the floating window.
|
|
|
|
implementation({opts}) *vim.lsp.buf.implementation()*
|
|
Lists all the implementations for the symbol under the cursor in the
|
|
quickfix window.
|
|
|
|
Parameters: ~
|
|
• {opts} (`vim.lsp.LocationOpts?`) See |vim.lsp.LocationOpts|.
|
|
|
|
incoming_calls() *vim.lsp.buf.incoming_calls()*
|
|
Lists all the call sites of the symbol under the cursor in the |quickfix|
|
|
window. If the symbol can resolve to multiple items, the user can pick one
|
|
in the |inputlist()|.
|
|
|
|
list_workspace_folders() *vim.lsp.buf.list_workspace_folders()*
|
|
List workspace folders.
|
|
|
|
outgoing_calls() *vim.lsp.buf.outgoing_calls()*
|
|
Lists all the items that are called by the symbol under the cursor in the
|
|
|quickfix| window. If the symbol can resolve to multiple items, the user
|
|
can pick one in the |inputlist()|.
|
|
|
|
references({context}, {opts}) *vim.lsp.buf.references()*
|
|
Lists all the references to the symbol under the cursor in the quickfix
|
|
window.
|
|
|
|
Parameters: ~
|
|
• {context} (`table?`) Context for the request
|
|
• {opts} (`vim.lsp.ListOpts?`) See |vim.lsp.ListOpts|.
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references
|
|
|
|
*vim.lsp.buf.remove_workspace_folder()*
|
|
remove_workspace_folder({workspace_folder})
|
|
Remove the folder at path from the workspace folders. If {path} is not
|
|
provided, the user will be prompted for a path using |input()|.
|
|
|
|
Parameters: ~
|
|
• {workspace_folder} (`string?`)
|
|
|
|
rename({new_name}, {opts}) *vim.lsp.buf.rename()*
|
|
Renames all references to the symbol under the cursor.
|
|
|
|
Parameters: ~
|
|
• {new_name} (`string?`) If not provided, the user will be prompted for
|
|
a new name using |vim.ui.input()|.
|
|
• {opts} (`table?`) Additional options:
|
|
• {filter}? (`fun(client: vim.lsp.Client): boolean?`)
|
|
Predicate used to filter clients. Receives a client as
|
|
argument and must return a boolean. Clients matching the
|
|
predicate are included.
|
|
• {name}? (`string`) Restrict clients used for rename to
|
|
ones where client.name matches this field.
|
|
• {bufnr}? (`integer`) (default: current buffer)
|
|
|
|
signature_help() *vim.lsp.buf.signature_help()*
|
|
Displays signature information about the symbol under the cursor in a
|
|
floating window.
|
|
|
|
type_definition({opts}) *vim.lsp.buf.type_definition()*
|
|
Jumps to the definition of the type of the symbol under the cursor.
|
|
|
|
Parameters: ~
|
|
• {opts} (`vim.lsp.LocationOpts?`) See |vim.lsp.LocationOpts|.
|
|
|
|
typehierarchy({kind}) *vim.lsp.buf.typehierarchy()*
|
|
Lists all the subtypes or supertypes of the symbol under the cursor in the
|
|
|quickfix| window. If the symbol can resolve to multiple items, the user
|
|
can pick one using |vim.ui.select()|.
|
|
|
|
Parameters: ~
|
|
• {kind} (`"subtypes"|"supertypes"`)
|
|
|
|
workspace_symbol({query}, {opts}) *vim.lsp.buf.workspace_symbol()*
|
|
Lists all symbols in the current workspace in the quickfix window.
|
|
|
|
The list is filtered against {query}; if the argument is omitted from the
|
|
call, the user is prompted to enter a string on the command line. An empty
|
|
string means no filtering is done.
|
|
|
|
Parameters: ~
|
|
• {query} (`string?`) optional
|
|
• {opts} (`vim.lsp.ListOpts?`) See |vim.lsp.ListOpts|.
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.diagnostic *lsp-diagnostic*
|
|
|
|
*vim.lsp.diagnostic.get_namespace()*
|
|
get_namespace({client_id}, {is_pull})
|
|
Get the diagnostic namespace associated with an LSP client
|
|
|vim.diagnostic| for diagnostics
|
|
|
|
Parameters: ~
|
|
• {client_id} (`integer`) The id of the LSP client
|
|
• {is_pull} (`boolean?`) Whether the namespace is for a pull or push
|
|
client. Defaults to push
|
|
|
|
*vim.lsp.diagnostic.on_diagnostic()*
|
|
on_diagnostic({_}, {result}, {ctx}, {config})
|
|
|lsp-handler| for the method "textDocument/diagnostic"
|
|
|
|
See |vim.diagnostic.config()| for configuration options. Handler-specific
|
|
configuration can be set using |vim.lsp.with()|: >lua
|
|
vim.lsp.handlers["textDocument/diagnostic"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_diagnostic, {
|
|
-- Enable underline, use default values
|
|
underline = true,
|
|
-- Enable virtual text, override spacing to 4
|
|
virtual_text = {
|
|
spacing = 4,
|
|
},
|
|
-- Use a function to dynamically turn signs off
|
|
-- and on, using buffer local variables
|
|
signs = function(namespace, bufnr)
|
|
return vim.b[bufnr].show_signs == true
|
|
end,
|
|
-- Disable a feature
|
|
update_in_insert = false,
|
|
}
|
|
)
|
|
<
|
|
|
|
Parameters: ~
|
|
• {result} (`lsp.DocumentDiagnosticReport`)
|
|
• {ctx} (`lsp.HandlerContext`)
|
|
• {config} (`vim.diagnostic.Opts`) Configuration table (see
|
|
|vim.diagnostic.config()|).
|
|
|
|
*vim.lsp.diagnostic.on_publish_diagnostics()*
|
|
on_publish_diagnostics({_}, {result}, {ctx}, {config})
|
|
|lsp-handler| for the method "textDocument/publishDiagnostics"
|
|
|
|
See |vim.diagnostic.config()| for configuration options. Handler-specific
|
|
configuration can be set using |vim.lsp.with()|: >lua
|
|
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
-- Enable underline, use default values
|
|
underline = true,
|
|
-- Enable virtual text, override spacing to 4
|
|
virtual_text = {
|
|
spacing = 4,
|
|
},
|
|
-- Use a function to dynamically turn signs off
|
|
-- and on, using buffer local variables
|
|
signs = function(namespace, bufnr)
|
|
return vim.b[bufnr].show_signs == true
|
|
end,
|
|
-- Disable a feature
|
|
update_in_insert = false,
|
|
}
|
|
)
|
|
<
|
|
|
|
Parameters: ~
|
|
• {result} (`lsp.PublishDiagnosticsParams`)
|
|
• {ctx} (`lsp.HandlerContext`)
|
|
• {config} (`vim.diagnostic.Opts?`) Configuration table (see
|
|
|vim.diagnostic.config()|).
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.codelens *lsp-codelens*
|
|
|
|
clear({client_id}, {bufnr}) *vim.lsp.codelens.clear()*
|
|
Clear the lenses
|
|
|
|
Parameters: ~
|
|
• {client_id} (`integer?`) filter by client_id. All clients if nil
|
|
• {bufnr} (`integer?`) filter by buffer. All buffers if nil, 0 for
|
|
current buffer
|
|
|
|
display({lenses}, {bufnr}, {client_id}) *vim.lsp.codelens.display()*
|
|
Display the lenses using virtual text
|
|
|
|
Parameters: ~
|
|
• {lenses} (`lsp.CodeLens[]?`) lenses to display
|
|
• {bufnr} (`integer`)
|
|
• {client_id} (`integer`)
|
|
|
|
get({bufnr}) *vim.lsp.codelens.get()*
|
|
Return all lenses for the given buffer
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer number. 0 can be used for the current
|
|
buffer.
|
|
|
|
Return: ~
|
|
(`lsp.CodeLens[]`)
|
|
|
|
on_codelens({err}, {result}, {ctx}) *vim.lsp.codelens.on_codelens()*
|
|
|lsp-handler| for the method `textDocument/codeLens`
|
|
|
|
Parameters: ~
|
|
• {err} (`lsp.ResponseError?`)
|
|
• {result} (`lsp.CodeLens[]`)
|
|
• {ctx} (`lsp.HandlerContext`)
|
|
|
|
refresh({opts}) *vim.lsp.codelens.refresh()*
|
|
Refresh the lenses.
|
|
|
|
It is recommended to trigger this using an autocmd or via keymap.
|
|
|
|
Example: >vim
|
|
autocmd BufEnter,CursorHold,InsertLeave <buffer> lua vim.lsp.codelens.refresh({ bufnr = 0 })
|
|
<
|
|
|
|
Parameters: ~
|
|
• {opts} (`table?`) Optional fields
|
|
• {bufnr} (`integer?`) filter by buffer. All buffers if nil, 0
|
|
for current buffer
|
|
|
|
run() *vim.lsp.codelens.run()*
|
|
Run the code lens in the current line
|
|
|
|
save({lenses}, {bufnr}, {client_id}) *vim.lsp.codelens.save()*
|
|
Store lenses for a specific buffer and client
|
|
|
|
Parameters: ~
|
|
• {lenses} (`lsp.CodeLens[]?`) lenses to store
|
|
• {bufnr} (`integer`)
|
|
• {client_id} (`integer`)
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.inlay_hint *lsp-inlay_hint*
|
|
|
|
enable({enable}, {filter}) *vim.lsp.inlay_hint.enable()*
|
|
Enables or disables inlay hints for the {filter}ed scope.
|
|
|
|
To "toggle", pass the inverse of `is_enabled()`: >lua
|
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
|
<
|
|
|
|
Parameters: ~
|
|
• {enable} (`boolean?`) true/nil to enable, false to disable
|
|
• {filter} (`table?`) Optional filters |kwargs|, or `nil` for all.
|
|
• {bufnr} (`integer?`) Buffer number, or 0 for current
|
|
buffer, or nil for all.
|
|
|
|
get({filter}) *vim.lsp.inlay_hint.get()*
|
|
Get the list of inlay hints, (optionally) restricted by buffer or range.
|
|
|
|
Example usage: >lua
|
|
local hint = vim.lsp.inlay_hint.get({ bufnr = 0 })[1] -- 0 for current buffer
|
|
|
|
local client = vim.lsp.get_client_by_id(hint.client_id)
|
|
local resp = client.request_sync('inlayHint/resolve', hint.inlay_hint, 100, 0)
|
|
local resolved_hint = assert(resp and resp.result, resp.err)
|
|
vim.lsp.util.apply_text_edits(resolved_hint.textEdits, 0, client.encoding)
|
|
|
|
location = resolved_hint.label[1].location
|
|
client.request('textDocument/hover', {
|
|
textDocument = { uri = location.uri },
|
|
position = location.range.start,
|
|
})
|
|
<
|
|
|
|
Parameters: ~
|
|
• {filter} (`table?`) Optional filters |kwargs|:
|
|
• {bufnr} (`integer?`)
|
|
• {range} (`lsp.Range?`)
|
|
|
|
Return: ~
|
|
(`table[]`) A list of objects with the following fields:
|
|
• {bufnr} (`integer`)
|
|
• {client_id} (`integer`)
|
|
• {inlay_hint} (`lsp.InlayHint`)
|
|
|
|
is_enabled({filter}) *vim.lsp.inlay_hint.is_enabled()*
|
|
Query whether inlay hint is enabled in the {filter}ed scope
|
|
|
|
Parameters: ~
|
|
• {filter} (`table`) Optional filters |kwargs|, or `nil` for all.
|
|
• {bufnr} (`integer?`) Buffer number, or 0 for current
|
|
buffer, or nil for all.
|
|
|
|
Return: ~
|
|
(`boolean`)
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.semantic_tokens *lsp-semantic_tokens*
|
|
|
|
force_refresh({bufnr}) *vim.lsp.semantic_tokens.force_refresh()*
|
|
Force a refresh of all semantic tokens
|
|
|
|
Only has an effect if the buffer is currently active for semantic token
|
|
highlighting (|vim.lsp.semantic_tokens.start()| has been called for it)
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer?`) filter by buffer. All buffers if nil, current
|
|
buffer if 0
|
|
|
|
*vim.lsp.semantic_tokens.get_at_pos()*
|
|
get_at_pos({bufnr}, {row}, {col})
|
|
Return the semantic token(s) at the given position. If called without
|
|
arguments, returns the token under the cursor.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer?`) Buffer number (0 for current buffer, default)
|
|
• {row} (`integer?`) Position row (default cursor position)
|
|
• {col} (`integer?`) Position column (default cursor position)
|
|
|
|
Return: ~
|
|
(`table?`) List of tokens at position. Each token has the following
|
|
fields:
|
|
• line (integer) line number, 0-based
|
|
• start_col (integer) start column, 0-based
|
|
• end_col (integer) end column, 0-based
|
|
• type (string) token type as string, e.g. "variable"
|
|
• modifiers (table) token modifiers as a set. E.g., { static = true,
|
|
readonly = true }
|
|
• client_id (integer)
|
|
|
|
*vim.lsp.semantic_tokens.highlight_token()*
|
|
highlight_token({token}, {bufnr}, {client_id}, {hl_group}, {opts})
|
|
Highlight a semantic token.
|
|
|
|
Apply an extmark with a given highlight group for a semantic token. The
|
|
mark will be deleted by the semantic token engine when appropriate; for
|
|
example, when the LSP sends updated tokens. This function is intended for
|
|
use inside |LspTokenUpdate| callbacks.
|
|
|
|
Parameters: ~
|
|
• {token} (`table`) a semantic token, found as `args.data.token` in
|
|
|LspTokenUpdate|.
|
|
• {bufnr} (`integer`) the buffer to highlight
|
|
• {client_id} (`integer`) The ID of the |vim.lsp.Client|
|
|
• {hl_group} (`string`) Highlight group name
|
|
• {opts} (`table?`) Optional parameters:
|
|
• {priority}? (`integer`, default:
|
|
`vim.highlight.priorities.semantic_tokens + 3`)
|
|
Priority for the applied extmark.
|
|
|
|
start({bufnr}, {client_id}, {opts}) *vim.lsp.semantic_tokens.start()*
|
|
Start the semantic token highlighting engine for the given buffer with the
|
|
given client. The client must already be attached to the buffer.
|
|
|
|
NOTE: This is currently called automatically by
|
|
|vim.lsp.buf_attach_client()|. To opt-out of semantic highlighting with a
|
|
server that supports it, you can delete the semanticTokensProvider table
|
|
from the {server_capabilities} of your client in your |LspAttach| callback
|
|
or your configuration's `on_attach` callback: >lua
|
|
client.server_capabilities.semanticTokensProvider = nil
|
|
<
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`)
|
|
• {client_id} (`integer`)
|
|
• {opts} (`table?`) Optional keyword arguments
|
|
• debounce (integer, default: 200): Debounce token
|
|
requests to the server by the given number in
|
|
milliseconds
|
|
|
|
stop({bufnr}, {client_id}) *vim.lsp.semantic_tokens.stop()*
|
|
Stop the semantic token highlighting engine for the given buffer with the
|
|
given client.
|
|
|
|
NOTE: This is automatically called by a |LspDetach| autocmd that is set up
|
|
as part of `start()`, so you should only need this function to manually
|
|
disengage the semantic token engine without fully detaching the LSP client
|
|
from the buffer.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`)
|
|
• {client_id} (`integer`)
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.handlers *lsp-handlers*
|
|
|
|
hover({_}, {result}, {ctx}, {config}) *vim.lsp.handlers.hover()*
|
|
|lsp-handler| for the method "textDocument/hover" >lua
|
|
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(
|
|
vim.lsp.handlers.hover, {
|
|
-- Use a sharp border with `FloatBorder` highlights
|
|
border = "single",
|
|
-- add the title in hover float window
|
|
title = "hover"
|
|
}
|
|
)
|
|
<
|
|
|
|
Parameters: ~
|
|
• {result} (`lsp.Hover`)
|
|
• {ctx} (`lsp.HandlerContext`)
|
|
• {config} (`table`) Configuration table.
|
|
• border: (default=nil)
|
|
• Add borders to the floating window
|
|
• See |vim.lsp.util.open_floating_preview()| for more
|
|
options.
|
|
|
|
*vim.lsp.handlers.signature_help()*
|
|
signature_help({_}, {result}, {ctx}, {config})
|
|
|lsp-handler| for the method "textDocument/signatureHelp".
|
|
|
|
The active parameter is highlighted with |hl-LspSignatureActiveParameter|. >lua
|
|
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(
|
|
vim.lsp.handlers.signature_help, {
|
|
-- Use a sharp border with `FloatBorder` highlights
|
|
border = "single"
|
|
}
|
|
)
|
|
<
|
|
|
|
Parameters: ~
|
|
• {result} (`lsp.SignatureHelp`) Response from the language server
|
|
• {ctx} (`lsp.HandlerContext`) Client context
|
|
• {config} (`table`) Configuration table.
|
|
• border: (default=nil)
|
|
• Add borders to the floating window
|
|
• See |vim.lsp.util.open_floating_preview()| for more
|
|
options
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.util *lsp-util*
|
|
|
|
*vim.lsp.util.apply_text_document_edit()*
|
|
apply_text_document_edit({text_document_edit}, {index}, {offset_encoding})
|
|
Applies a `TextDocumentEdit`, which is a list of changes to a single
|
|
document.
|
|
|
|
Parameters: ~
|
|
• {text_document_edit} (`table`) a `TextDocumentEdit` object
|
|
• {index} (`integer`) Optional index of the edit, if from
|
|
a list of edits (or nil, if not from a list)
|
|
• {offset_encoding} (`string?`)
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentEdit
|
|
|
|
*vim.lsp.util.apply_text_edits()*
|
|
apply_text_edits({text_edits}, {bufnr}, {offset_encoding})
|
|
Applies a list of text edits to a buffer.
|
|
|
|
Parameters: ~
|
|
• {text_edits} (`table`) list of `TextEdit` objects
|
|
• {bufnr} (`integer`) Buffer id
|
|
• {offset_encoding} (`string`) utf-8|utf-16|utf-32
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textEdit
|
|
|
|
*vim.lsp.util.apply_workspace_edit()*
|
|
apply_workspace_edit({workspace_edit}, {offset_encoding})
|
|
Applies a `WorkspaceEdit`.
|
|
|
|
Parameters: ~
|
|
• {workspace_edit} (`table`) `WorkspaceEdit`
|
|
• {offset_encoding} (`string`) utf-8|utf-16|utf-32 (required)
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_applyEdit
|
|
|
|
buf_clear_references({bufnr}) *vim.lsp.util.buf_clear_references()*
|
|
Removes document highlights from a buffer.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer?`) Buffer id
|
|
|
|
*vim.lsp.util.buf_highlight_references()*
|
|
buf_highlight_references({bufnr}, {references}, {offset_encoding})
|
|
Shows a list of document highlights for a certain buffer.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`) Buffer id
|
|
• {references} (`table`) List of `DocumentHighlight` objects to
|
|
highlight
|
|
• {offset_encoding} (`string`) One of "utf-8", "utf-16", "utf-32".
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specification/#textDocumentContentChangeEvent
|
|
|
|
*vim.lsp.util.character_offset()*
|
|
character_offset({buf}, {row}, {col}, {offset_encoding})
|
|
Returns the UTF-32 and UTF-16 offsets for a position in a certain buffer.
|
|
|
|
Parameters: ~
|
|
• {buf} (`integer`) buffer number (0 for current)
|
|
• {row} (`integer`) 0-indexed line
|
|
• {col} (`integer`) 0-indexed byte offset in line
|
|
• {offset_encoding} (`string`) utf-8|utf-16|utf-32 defaults to
|
|
`offset_encoding` of first client of `buf`
|
|
|
|
Return: ~
|
|
(`integer`) `offset_encoding` index of the character in line {row}
|
|
column {col} in buffer {buf}
|
|
|
|
*vim.lsp.util.convert_input_to_markdown_lines()*
|
|
convert_input_to_markdown_lines({input}, {contents})
|
|
Converts any of `MarkedString` | `MarkedString[]` | `MarkupContent` into a
|
|
list of lines containing valid markdown. Useful to populate the hover
|
|
window for `textDocument/hover`, for parsing the result of
|
|
`textDocument/signatureHelp`, and potentially others.
|
|
|
|
Note that if the input is of type `MarkupContent` and its kind is
|
|
`plaintext`, then the corresponding value is returned without further
|
|
modifications.
|
|
|
|
Parameters: ~
|
|
• {input} (`lsp.MarkedString|lsp.MarkedString[]|lsp.MarkupContent`)
|
|
• {contents} (`table?`) List of strings to extend with converted lines.
|
|
Defaults to {}.
|
|
|
|
Return: ~
|
|
(`string[]`) extended with lines of converted markdown.
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_hover
|
|
|
|
*vim.lsp.util.convert_signature_help_to_markdown_lines()*
|
|
convert_signature_help_to_markdown_lines({signature_help}, {ft}, {triggers})
|
|
Converts `textDocument/signatureHelp` response to markdown lines.
|
|
|
|
Parameters: ~
|
|
• {signature_help} (`table`) Response of `textDocument/SignatureHelp`
|
|
• {ft} (`string?`) filetype that will be use as the `lang`
|
|
for the label markdown code block
|
|
• {triggers} (`table?`) list of trigger characters from the lsp
|
|
server. used to better determine parameter offsets
|
|
|
|
Return (multiple): ~
|
|
(`table?`) table list of lines of converted markdown.
|
|
(`table?`) table of active hl
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_signatureHelp
|
|
|
|
get_effective_tabstop({bufnr}) *vim.lsp.util.get_effective_tabstop()*
|
|
Returns indentation size.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer?`) Buffer handle, defaults to current
|
|
|
|
Return: ~
|
|
(`integer`) indentation size
|
|
|
|
See also: ~
|
|
• 'shiftwidth'
|
|
|
|
*vim.lsp.util.jump_to_location()*
|
|
jump_to_location({location}, {offset_encoding}, {reuse_win})
|
|
Jumps to a location.
|
|
|
|
Parameters: ~
|
|
• {location} (`table`) (`Location`|`LocationLink`)
|
|
• {offset_encoding} (`string?`) utf-8|utf-16|utf-32
|
|
• {reuse_win} (`boolean?`) Jump to existing window if buffer is
|
|
already open.
|
|
|
|
Return: ~
|
|
(`boolean`) `true` if the jump succeeded
|
|
|
|
*vim.lsp.util.locations_to_items()*
|
|
locations_to_items({locations}, {offset_encoding})
|
|
Returns the items with the byte position calculated correctly and in
|
|
sorted order, for display in quickfix and location lists.
|
|
|
|
The `user_data` field of each resulting item will contain the original
|
|
`Location` or `LocationLink` it was computed from.
|
|
|
|
The result can be passed to the {list} argument of |setqflist()| or
|
|
|setloclist()|.
|
|
|
|
Parameters: ~
|
|
• {locations} (`lsp.Location[]|lsp.LocationLink[]`)
|
|
• {offset_encoding} (`string`) offset_encoding for locations
|
|
utf-8|utf-16|utf-32 default to first client of
|
|
buffer
|
|
|
|
Return: ~
|
|
(`table[]`) A list of objects with the following fields:
|
|
• {filename} (`string`)
|
|
• {lnum} (`integer`) 1-indexed line number
|
|
• {col} (`integer`) 1-indexed column
|
|
• {text} (`string`)
|
|
• {user_data} (`lsp.Location|lsp.LocationLink`)
|
|
|
|
*vim.lsp.util.make_floating_popup_options()*
|
|
make_floating_popup_options({width}, {height}, {opts})
|
|
Creates a table with sensible default options for a floating window. The
|
|
table can be passed to |nvim_open_win()|.
|
|
|
|
Parameters: ~
|
|
• {width} (`integer`) window width (in character cells)
|
|
• {height} (`integer`) window height (in character cells)
|
|
• {opts} (`table`) optional
|
|
• offset_x (integer) offset to add to `col`
|
|
• offset_y (integer) offset to add to `row`
|
|
• border (string or table) override `border`
|
|
• focusable (string or table) override `focusable`
|
|
• zindex (string or table) override `zindex`, defaults to 50
|
|
• relative ("mouse"|"cursor") defaults to "cursor"
|
|
• anchor_bias ("auto"|"above"|"below") defaults to "auto"
|
|
• "auto": place window based on which side of the cursor
|
|
has more lines
|
|
• "above": place the window above the cursor unless there
|
|
are not enough lines to display the full window height.
|
|
• "below": place the window below the cursor unless there
|
|
are not enough lines to display the full window height.
|
|
|
|
Return: ~
|
|
(`table`) Options
|
|
|
|
*vim.lsp.util.make_formatting_params()*
|
|
make_formatting_params({options})
|
|
Creates a `DocumentFormattingParams` object for the current buffer and
|
|
cursor position.
|
|
|
|
Parameters: ~
|
|
• {options} (`table?`) with valid `FormattingOptions` entries
|
|
|
|
Return: ~
|
|
(`lsp.DocumentFormattingParams`) object
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_formatting
|
|
|
|
*vim.lsp.util.make_given_range_params()*
|
|
make_given_range_params({start_pos}, {end_pos}, {bufnr}, {offset_encoding})
|
|
Using the given range in the current buffer, creates an object that is
|
|
similar to |vim.lsp.util.make_range_params()|.
|
|
|
|
Parameters: ~
|
|
• {start_pos} (`integer[]?`) {row,col} mark-indexed position.
|
|
Defaults to the start of the last visual selection.
|
|
• {end_pos} (`integer[]?`) {row,col} mark-indexed position.
|
|
Defaults to the end of the last visual selection.
|
|
• {bufnr} (`integer?`) buffer handle or 0 for current,
|
|
defaults to current
|
|
• {offset_encoding} (`"utf-8"|"utf-16"|"utf-32"?`) defaults to
|
|
`offset_encoding` of first client of `bufnr`
|
|
|
|
Return: ~
|
|
(`table`) { textDocument = { uri = `current_file_uri` }, range = {
|
|
start = `start_position`, end = `end_position` } }
|
|
|
|
*vim.lsp.util.make_position_params()*
|
|
make_position_params({window}, {offset_encoding})
|
|
Creates a `TextDocumentPositionParams` object for the current buffer and
|
|
cursor position.
|
|
|
|
Parameters: ~
|
|
• {window} (`integer?`) window handle or 0 for current,
|
|
defaults to current
|
|
• {offset_encoding} (`string?`) utf-8|utf-16|utf-32|nil defaults to
|
|
`offset_encoding` of first client of buffer of
|
|
`window`
|
|
|
|
Return: ~
|
|
(`table`) `TextDocumentPositionParams` object
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams
|
|
|
|
*vim.lsp.util.make_range_params()*
|
|
make_range_params({window}, {offset_encoding})
|
|
Using the current position in the current buffer, creates an object that
|
|
can be used as a building block for several LSP requests, such as
|
|
`textDocument/codeAction`, `textDocument/colorPresentation`,
|
|
`textDocument/rangeFormatting`.
|
|
|
|
Parameters: ~
|
|
• {window} (`integer?`) window handle or 0 for current,
|
|
defaults to current
|
|
• {offset_encoding} (`"utf-8"|"utf-16"|"utf-32"?`) defaults to
|
|
`offset_encoding` of first client of buffer of
|
|
`window`
|
|
|
|
Return: ~
|
|
(`table`) { textDocument = { uri = `current_file_uri` }, range = {
|
|
start = `current_position`, end = `current_position` } }
|
|
|
|
*vim.lsp.util.make_text_document_params()*
|
|
make_text_document_params({bufnr})
|
|
Creates a `TextDocumentIdentifier` object for the current buffer.
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer?`) Buffer handle, defaults to current
|
|
|
|
Return: ~
|
|
(`table`) `TextDocumentIdentifier`
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentIdentifier
|
|
|
|
*vim.lsp.util.make_workspace_params()*
|
|
make_workspace_params({added}, {removed})
|
|
Create the workspace params
|
|
|
|
Parameters: ~
|
|
• {added} (`table`)
|
|
• {removed} (`table`)
|
|
|
|
*vim.lsp.util.open_floating_preview()*
|
|
open_floating_preview({contents}, {syntax}, {opts})
|
|
Shows contents in a floating window.
|
|
|
|
Parameters: ~
|
|
• {contents} (`table`) of lines to show in window
|
|
• {syntax} (`string`) of syntax to set for opened buffer
|
|
• {opts} (`table?`) with optional fields (additional keys are
|
|
filtered with |vim.lsp.util.make_floating_popup_options()|
|
|
before they are passed on to |nvim_open_win()|)
|
|
• {height}? (`integer`) Height of floating window
|
|
• {width}? (`integer`) Width of floating window
|
|
• {wrap}? (`boolean`, default: `true`) Wrap long lines
|
|
• {wrap_at}? (`integer`) Character to wrap at for
|
|
computing height when wrap is enabled
|
|
• {max_width}? (`integer`) Maximal width of floating
|
|
window
|
|
• {max_height}? (`integer`) Maximal height of floating
|
|
window
|
|
• {focus_id}? (`string`) If a popup with this id is
|
|
opened, then focus it
|
|
• {close_events}? (`table`) List of events that closes the
|
|
floating window
|
|
• {focusable}? (`boolean`, default: `true`) Make float
|
|
focusable.
|
|
• {focus}? (`boolean`, default: `true`) If `true`, and if
|
|
{focusable} is also `true`, focus an existing floating
|
|
window with the same {focus_id}
|
|
|
|
Return (multiple): ~
|
|
(`integer`) bufnr of newly created float window
|
|
(`integer`) winid of newly created float window preview window
|
|
|
|
preview_location({location}, {opts}) *vim.lsp.util.preview_location()*
|
|
Previews a location in a floating window
|
|
|
|
behavior depends on type of location:
|
|
• for Location, range is shown (e.g., function definition)
|
|
• for LocationLink, targetRange is shown (e.g., body of function
|
|
definition)
|
|
|
|
Parameters: ~
|
|
• {location} (`table`) a single `Location` or `LocationLink`
|
|
• {opts} (`table`)
|
|
|
|
Return (multiple): ~
|
|
(`integer?`) buffer id of float window
|
|
(`integer?`) window id of float window
|
|
|
|
rename({old_fname}, {new_fname}, {opts}) *vim.lsp.util.rename()*
|
|
Rename old_fname to new_fname
|
|
|
|
Existing buffers are renamed as well, while maintaining their bufnr.
|
|
|
|
It deletes existing buffers that conflict with the renamed file name only
|
|
when
|
|
• `opts` requests overwriting; or
|
|
• the conflicting buffers are not loaded, so that deleting them does not
|
|
result in data loss.
|
|
|
|
Parameters: ~
|
|
• {old_fname} (`string`)
|
|
• {new_fname} (`string`)
|
|
• {opts} (`table?`) Options:
|
|
• {overwrite}? (`boolean`)
|
|
• {ignoreIfExists}? (`boolean`)
|
|
|
|
*vim.lsp.util.show_document()*
|
|
show_document({location}, {offset_encoding}, {opts})
|
|
Shows document and optionally jumps to the location.
|
|
|
|
Parameters: ~
|
|
• {location} (`table`) (`Location`|`LocationLink`)
|
|
• {offset_encoding} (`string?`) utf-8|utf-16|utf-32
|
|
• {opts} (`table?`) options
|
|
• reuse_win (boolean) Jump to existing window if
|
|
buffer is already open.
|
|
• focus (boolean) Whether to focus/jump to location
|
|
if possible. Defaults to true.
|
|
|
|
Return: ~
|
|
(`boolean`) `true` if succeeded
|
|
|
|
*vim.lsp.util.stylize_markdown()*
|
|
stylize_markdown({bufnr}, {contents}, {opts})
|
|
Converts markdown into syntax highlighted regions by stripping the code
|
|
blocks and converting them into highlighted code. This will by default
|
|
insert a blank line separator after those code block regions to improve
|
|
readability.
|
|
|
|
This method configures the given buffer and returns the lines to set.
|
|
|
|
If you want to open a popup with fancy markdown, use
|
|
`open_floating_preview` instead
|
|
|
|
Parameters: ~
|
|
• {bufnr} (`integer`)
|
|
• {contents} (`table`) of lines to show in window
|
|
• {opts} (`table`) with optional fields
|
|
• height of floating window
|
|
• width of floating window
|
|
• wrap_at character to wrap at for computing height
|
|
• max_width maximal width of floating window
|
|
• max_height maximal height of floating window
|
|
• separator insert separator after code block
|
|
|
|
Return: ~
|
|
(`table`) stripped content
|
|
|
|
symbols_to_items({symbols}, {bufnr}) *vim.lsp.util.symbols_to_items()*
|
|
Converts symbols to quickfix list items.
|
|
|
|
Parameters: ~
|
|
• {symbols} (`table`) DocumentSymbol[] or SymbolInformation[]
|
|
• {bufnr} (`integer`)
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.log *lsp-log*
|
|
|
|
get_filename() *vim.lsp.log.get_filename()*
|
|
Returns the log filename.
|
|
|
|
Return: ~
|
|
(`string`) log filename
|
|
|
|
get_level() *vim.lsp.log.get_level()*
|
|
Gets the current log level.
|
|
|
|
Return: ~
|
|
(`integer`) current log level
|
|
|
|
set_format_func({handle}) *vim.lsp.log.set_format_func()*
|
|
Sets formatting function used to format logs
|
|
|
|
Parameters: ~
|
|
• {handle} (`function`) function to apply to logging arguments, pass
|
|
vim.inspect for multi-line formatting
|
|
|
|
set_level({level}) *vim.lsp.log.set_level()*
|
|
Sets the current log level.
|
|
|
|
Parameters: ~
|
|
• {level} (`string|integer`) One of `vim.lsp.log.levels`
|
|
|
|
should_log({level}) *vim.lsp.log.should_log()*
|
|
Checks whether the level is sufficient for logging.
|
|
|
|
Parameters: ~
|
|
• {level} (`integer`) log level
|
|
|
|
Return: ~
|
|
(`bool`) true if would log, false if not
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.rpc *lsp-rpc*
|
|
|
|
*vim.lsp.rpc.PublicClient*
|
|
|
|
Fields: ~
|
|
• {request} (`fun(method: string, params: table?, callback: fun(err: lsp.ResponseError?, result: any), notify_reply_callback: fun(integer)?):boolean,integer?`)
|
|
see |vim.lsp.rpc.request()|
|
|
• {notify} (`fun(method: string, params: any):boolean`) see
|
|
|vim.lsp.rpc.notify()|
|
|
• {is_closing} (`fun(): boolean`)
|
|
• {terminate} (`fun()`)
|
|
|
|
|
|
connect({host_or_path}, {port}) *vim.lsp.rpc.connect()*
|
|
Create a LSP RPC client factory that connects to either:
|
|
• a named pipe (windows)
|
|
• a domain socket (unix)
|
|
• a host and port via TCP
|
|
|
|
Return a function that can be passed to the `cmd` field for
|
|
|vim.lsp.start_client()| or |vim.lsp.start()|.
|
|
|
|
Parameters: ~
|
|
• {host_or_path} (`string`) host to connect to or path to a pipe/domain
|
|
socket
|
|
• {port} (`integer?`) TCP port to connect to. If absent the
|
|
first argument must be a pipe
|
|
|
|
Return: ~
|
|
(`fun(dispatchers: vim.lsp.rpc.Dispatchers): vim.lsp.rpc.PublicClient`)
|
|
|
|
format_rpc_error({err}) *vim.lsp.rpc.format_rpc_error()*
|
|
Constructs an error message from an LSP error object.
|
|
|
|
Parameters: ~
|
|
• {err} (`table`) The error object
|
|
|
|
Return: ~
|
|
(`string`) error_message The formatted error message
|
|
|
|
notify({method}, {params}) *vim.lsp.rpc.notify()*
|
|
Sends a notification to the LSP server.
|
|
|
|
Parameters: ~
|
|
• {method} (`string`) The invoked LSP method
|
|
• {params} (`table?`) Parameters for the invoked LSP method
|
|
|
|
Return: ~
|
|
(`boolean`) `true` if notification could be sent, `false` if not
|
|
|
|
*vim.lsp.rpc.request()*
|
|
request({method}, {params}, {callback}, {notify_reply_callback})
|
|
Sends a request to the LSP server and runs {callback} upon response.
|
|
|
|
Parameters: ~
|
|
• {method} (`string`) The invoked LSP method
|
|
• {params} (`table?`) Parameters for the invoked LSP
|
|
method
|
|
• {callback} (`fun(err: lsp.ResponseError?, result: any)`)
|
|
Callback to invoke
|
|
• {notify_reply_callback} (`fun(message_id: integer)?`) Callback to
|
|
invoke as soon as a request is no longer
|
|
pending
|
|
|
|
Return (multiple): ~
|
|
(`boolean`) success `true` if request could be sent, `false` if not
|
|
(`integer?`) message_id if request could be sent, `nil` if not
|
|
|
|
*vim.lsp.rpc.rpc_response_error()*
|
|
rpc_response_error({code}, {message}, {data})
|
|
Creates an RPC response table `error` to be sent to the LSP response.
|
|
|
|
Parameters: ~
|
|
• {code} (`integer`) RPC error code defined, see
|
|
`vim.lsp.protocol.ErrorCodes`
|
|
• {message} (`string?`) arbitrary message to send to server
|
|
• {data} (`any?`) arbitrary data to send to server
|
|
|
|
Return: ~
|
|
(`lsp.ResponseError`)
|
|
|
|
See also: ~
|
|
• lsp.ErrorCodes See `vim.lsp.protocol.ErrorCodes`
|
|
|
|
start({cmd}, {dispatchers}, {extra_spawn_params}) *vim.lsp.rpc.start()*
|
|
Starts an LSP server process and create an LSP RPC client object to
|
|
interact with it. Communication with the spawned process happens via
|
|
stdio. For communication via TCP, spawn a process manually and use
|
|
|vim.lsp.rpc.connect()|
|
|
|
|
Parameters: ~
|
|
• {cmd} (`string[]`) Command to start the LSP server.
|
|
• {dispatchers} (`table?`) Dispatchers for LSP message types.
|
|
• {notification}
|
|
(`fun(method: string, params: table)`)
|
|
• {server_request}
|
|
(`fun(method: string, params: table): any?, lsp.ResponseError?`)
|
|
• {on_exit}
|
|
(`fun(code: integer, signal: integer)`)
|
|
• {on_error} (`fun(code: integer, err: any)`)
|
|
• {extra_spawn_params} (`table?`) Additional context for the LSP server
|
|
process.
|
|
• {cwd}? (`string`) Working directory for the
|
|
LSP server process
|
|
• {detached}? (`boolean`) Detach the LSP server
|
|
process from the current process
|
|
• {env}? (`table<string,string>`) Additional
|
|
environment variables for LSP server process.
|
|
See |vim.system()|
|
|
|
|
Return: ~
|
|
(`vim.lsp.rpc.PublicClient`) Client RPC object, with these methods:
|
|
• `notify()` |vim.lsp.rpc.notify()|
|
|
• `request()` |vim.lsp.rpc.request()|
|
|
• `is_closing()` returns a boolean indicating if the RPC is closing.
|
|
• `terminate()` terminates the RPC client. See
|
|
|vim.lsp.rpc.PublicClient|.
|
|
|
|
|
|
==============================================================================
|
|
Lua module: vim.lsp.protocol *lsp-protocol*
|
|
|
|
*vim.lsp.protocol.make_client_capabilities()*
|
|
make_client_capabilities()
|
|
Gets a new ClientCapabilities object describing the LSP client
|
|
capabilities.
|
|
|
|
Return: ~
|
|
(`lsp.ClientCapabilities`)
|
|
|
|
Methods *vim.lsp.protocol.Methods*
|
|
LSP method names.
|
|
|
|
See also: ~
|
|
• https://microsoft.github.io/language-server-protocol/specification/#metaModel
|
|
|
|
*vim.lsp.protocol.resolve_capabilities()*
|
|
resolve_capabilities({server_capabilities})
|
|
Creates a normalized object describing LSP server capabilities.
|
|
|
|
Parameters: ~
|
|
• {server_capabilities} (`table`) Table of capabilities supported by
|
|
the server
|
|
|
|
Return: ~
|
|
(`lsp.ServerCapabilities?`) Normalized table of capabilities
|
|
|
|
|
|
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl:
|