diff options
Diffstat (limited to 'runtime/doc/lsp.txt')
-rw-r--r-- | runtime/doc/lsp.txt | 876 |
1 files changed, 541 insertions, 335 deletions
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt index b934d2dfa0..33d65406a1 100644 --- a/runtime/doc/lsp.txt +++ b/runtime/doc/lsp.txt @@ -4,7 +4,7 @@ NVIM REFERENCE MANUAL -LSP client/framework *lsp* +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 @@ -23,14 +23,14 @@ QUICKSTART *lsp-quickstart* Nvim provides a LSP client, but the servers are provided by third parties. Follow these steps to get LSP features: - 1. Install the nvim-lsp plugin. It provides common configuration for + 1. Install the nvim-lspconfig plugin. It provides common configuration for various servers so you can get started quickly. - https://github.com/neovim/nvim-lsp + https://github.com/neovim/nvim-lspconfig 2. Install a language server. Try ":LspInstall <tab>" or use your system package manager to install the relevant language server: https://microsoft.github.io/language-server-protocol/implementors/servers/ 3. Add `nvim_lsp.xx.setup{…}` to your vimrc, where "xx" is the name of the - relevant config. See the nvim-lsp README for details. + relevant config. See the nvim-lspconfig README for details. To check LSP clients attached to the current buffer: > @@ -39,9 +39,10 @@ To check LSP clients attached to the current buffer: > *lsp-config* Inline diagnostics are enabled automatically, e.g. syntax errors will be annotated in the buffer. But you probably want to use other features like -go-to-definition, hover, etc. Example config: > +go-to-definition, hover, etc. Full list of features in |vim.lsp.buf|. + +Example config: > - nnoremap <silent> gd <cmd>lua vim.lsp.buf.declaration()<CR> nnoremap <silent> <c-]> <cmd>lua vim.lsp.buf.definition()<CR> nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR> nnoremap <silent> gD <cmd>lua vim.lsp.buf.implementation()<CR> @@ -50,6 +51,9 @@ go-to-definition, hover, etc. Example config: > nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR> nnoremap <silent> g0 <cmd>lua vim.lsp.buf.document_symbol()<CR> nnoremap <silent> gW <cmd>lua vim.lsp.buf.workspace_symbol()<CR> + nnoremap <silent> gd <cmd>lua vim.lsp.buf.declaration()<CR> + +Note: Language servers may have limited support for these features. Nvim provides the |vim.lsp.omnifunc| 'omnifunc' handler which allows |i_CTRL-X_CTRL-O| to consume LSP completion. Example config (note the use of @@ -353,9 +357,6 @@ buf_get_clients({bufnr}) *vim.lsp.buf_get_clients()* {bufnr} (optional, number): Buffer handle, or 0 for current -buf_get_full_text({bufnr}) *vim.lsp.buf_get_full_text()* - TODO: Documentation - buf_is_attached({bufnr}, {client_id}) *vim.lsp.buf_is_attached()* Checks if a buffer is attached for a particular client. @@ -416,71 +417,69 @@ buf_request_sync({bufnr}, {method}, {params}, {timeout_ms}) error, returns `(nil, err)` where `err` is a string describing the failure reason. -cancel_request({id}) *vim.lsp.cancel_request()* - TODO: Documentation - client() *vim.lsp.client* - LSP client object. + LSP client object. You can get an active client object via + |vim.lsp.get_client_by_id()| or + |vim.lsp.get_active_clients()|. • Methods: - • request(method, params, [callback]) Send a request to the - server. If callback is not specified, it will use + • request(method, params, [callback], bufnr) Sends a request + to the server. This is a thin wrapper around + {client.rpc.request} with some additional checking. If + {callback} is not specified, it will use {client.callbacks} to try to find a callback. If one is - not found there, then an error will occur. This is a thin - wrapper around {client.rpc.request} with some additional - checking. Returns a boolean to indicate if the - notification was successful. If it is false, then it will - always be false (the client has shutdown). If it was - successful, then it will return the request id as the - second result. You can use this with `notify("$/cancel", { - id = request_id })` to cancel the request. This helper is - made automatically with |vim.lsp.buf_request()| Returns: - status, [client_id] - • notify(method, params) This is just {client.rpc.notify}() - Returns a boolean to indicate if the notification was - successful. If it is false, then it will always be false - (the client has shutdown). Returns: status - • cancel_request(id) This is just - {client.rpc.notify}("$/cancelRequest", { id = id }) - Returns the same as `notify()` . - • stop([force]) Stop a client, optionally with force. By + not found there, 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. + • notify(method, params) 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(id) Cancels a request with a given request + id. Returns: same as `notify()` . + • stop([force]) 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. - • is_stopped() Returns true if the client is fully stopped. + • is_stopped() Checks whether a client is stopped. Returns: + true if the client is fully stopped. + • on_attach(bufnr) Runs the on_attach function from the + client's config if it was defined. • Members - • id (number): The id allocated to the client. - • name (string): If a name is specified on creation, that + • {id} (number): 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. - • offset_encoding (string): The encoding used for + • {rpc} (table): 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 - `on_init` method before text is sent to the server. - • callbacks (table): The callbacks used by the client as + `config` 's `on_init` method before text is sent to the + server. + • {callbacks} (table): The callbacks used by the client as described in |lsp-callbacks|. - • config (table): copy of the table that was passed by the + • {config} (table): copy of the table that was passed by the user to |vim.lsp.start_client()|. - • server_capabilities (table): Response from the server sent - on `initialize` describing the server's capabilities. - • resolved_capabilities (table): Normalized table of + • {server_capabilities} (table): Response from the server + sent on `initialize` describing the server's capabilities. + • {resolved_capabilities} (table): Normalized table of capabilities that we have detected based on the initialize response from the server in `server_capabilities` . client_is_stopped({client_id}) *vim.lsp.client_is_stopped()* - TODO: Documentation + Checks whether a client is stopped. - *vim.lsp.define_default_sign()* -define_default_sign({name}, {properties}) - TODO: Documentation - -err_message({...}) *vim.lsp.err_message()* - TODO: Documentation + Parameters: ~ + {client_id} (Number) - *vim.lsp.for_each_buffer_client()* -for_each_buffer_client({bufnr}, {callback}) - TODO: Documentation + Return: ~ + true if client is stopped, false otherwise. get_active_clients() *vim.lsp.get_active_clients()* Gets all active clients. @@ -489,8 +488,8 @@ get_active_clients() *vim.lsp.get_active_clients()* Table of |vim.lsp.client| objects get_client_by_id({client_id}) *vim.lsp.get_client_by_id()* - Gets an active client by id, or nil if the id is invalid or - the client is not yet initialized. + Gets a client by id, or nil if the id is invalid. + The returned client may not yet be fully initialized. Parameters: ~ {client_id} client id number @@ -499,25 +498,10 @@ get_client_by_id({client_id}) *vim.lsp.get_client_by_id()* |vim.lsp.client| object, or nil get_log_path() *vim.lsp.get_log_path()* - TODO: Documentation - -initialize() *vim.lsp.initialize()* - TODO: Documentation - -is_dir({filename}) *vim.lsp.is_dir()* - TODO: Documentation - -is_stopped() *vim.lsp.is_stopped()* - TODO: Documentation + Gets the path of the logfile used by the LSP client. -next_client_id() *vim.lsp.next_client_id()* - TODO: Documentation - -notification({method}, {params}) *vim.lsp.notification()* - TODO: Documentation - -notify({...}) *vim.lsp.notify()* - TODO: Documentation + Return: ~ + (String) Path to logfile. omnifunc({findstart}, {base}) *vim.lsp.omnifunc()* Implements 'omnifunc' compatible LSP completion. @@ -538,30 +522,6 @@ omnifunc({findstart}, {base}) *vim.lsp.omnifunc()* |complete-items| |CompleteDone| -on_error({code}, {err}) *vim.lsp.on_error()* - TODO: Documentation - -on_exit({code}, {signal}) *vim.lsp.on_exit()* - TODO: Documentation - -once({fn}) *vim.lsp.once()* - TODO: Documentation - -optional_validator({fn}) *vim.lsp.optional_validator()* - TODO: Documentation - -request({method}, {params}, {callback}, {bufnr}) *vim.lsp.request()* - TODO: Documentation - -resolve_bufnr({bufnr}) *vim.lsp.resolve_bufnr()* - TODO: Documentation - -resolve_callback({method}) *vim.lsp.resolve_callback()* - TODO: Documentation - -server_request({method}, {params}) *vim.lsp.server_request()* - TODO: Documentation - set_log_level({level}) *vim.lsp.set_log_level()* Sets the global log level for LSP logging. @@ -582,6 +542,9 @@ start_client({config}) *vim.lsp.start_client()* Parameters `cmd` and `root_dir` are required. + The following parameters describe fields in the {config} + table. + Parameters: ~ {root_dir} (required, string) Directory where the LSP server will base its rootUri on @@ -612,13 +575,13 @@ start_client({config}) *vim.lsp.start_client()* array. {callbacks} Map of language server method names to `function(err, method, params, client_id)` handler. Invoked for: - • Notifications from the server, where + • Notifications to the server, where `err` will always be `nil` . - • Requests initiated by the server. For - these you can respond by returning - two values: `result, err` where err - must be shaped like a RPC error, i.e. - `{ code, message, data? }` . Use + • Requests by the server. For these you + can respond by returning two values: + `result, err` where err must be + shaped like a RPC error, i.e. `{ + code, message, data? }` . Use |vim.lsp.rpc_response_error()| to help with this. • Default callback for client requests @@ -647,8 +610,9 @@ start_client({config}) *vim.lsp.start_client()* where `params` contains the parameters being sent to the server and `config` is the config that was passed to - `start_client()` . You can use this to - modify parameters before they are sent. + |vim.lsp.start_client()|. You can use + this to modify parameters before they + are sent. {on_init} Callback (client, initialize_result) invoked after LSP "initialize", where `result` is a table of `capabilities` @@ -680,9 +644,6 @@ start_client({config}) *vim.lsp.start_client()* error). Use `on_init` to do any actions once the client has been initialized. -stop({force}) *vim.lsp.stop()* - TODO: Documentation - stop_client({client_id}, {force}) *vim.lsp.stop_client()* Stops a client(s). @@ -690,7 +651,7 @@ stop_client({client_id}, {force}) *vim.lsp.stop_client()* object. To stop all clients: > - vim.lsp.stop_client(lsp.get_active_clients()) + vim.lsp.stop_client(vim.lsp.get_active_clients()) < By default asks the server to shutdown, unless stop was @@ -702,26 +663,10 @@ stop_client({client_id}, {force}) *vim.lsp.stop_client()* thereof {force} boolean (optional) shutdown forcefully - *vim.lsp.text_document_did_open_handler()* -text_document_did_open_handler({bufnr}, {client}) - TODO: Documentation - -unsupported_method({method}) *vim.lsp.unsupported_method()* - TODO: Documentation - -validate_client_config({config}) *vim.lsp.validate_client_config()* - TODO: Documentation - -validate_encoding({encoding}) *vim.lsp.validate_encoding()* - TODO: Documentation - ============================================================================== Lua module: vim.lsp.protocol *lsp-protocol* -ifnil({a}, {b}) *vim.lsp.protocol.ifnil()* - TODO: Documentation - *vim.lsp.protocol.make_client_capabilities()* make_client_capabilities() Gets a new ClientCapabilities object describing the LSP client @@ -739,28 +684,38 @@ resolve_capabilities({server_capabilities}) characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a` , `example.b` , but not `example.0` ) - *vim.lsp.protocol.transform_schema_comments()* -transform_schema_comments() - TODO: Documentation - - *vim.lsp.protocol.transform_schema_to_table()* -transform_schema_to_table() - TODO: Documentation - ============================================================================== Lua module: vim.lsp.buf *lsp-buf* clear_references() *vim.lsp.buf.clear_references()* - TODO: Documentation + Removes document highlights from current buffer. code_action({context}) *vim.lsp.buf.code_action()* - TODO: Documentation + Selects a code action from the input list that is available at + the current cursor position. + + Parameters: ~ + {context} (table, optional) Valid `CodeActionContext` + object + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction completion({context}) *vim.lsp.buf.completion()* Retrieves the completion items at the current cursor position. Can only be called in Insert mode. + Parameters: ~ + {context} (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.constants.CompletionTriggerKind| + declaration() *vim.lsp.buf.declaration()* Jumps to the declaration of the symbol under the cursor. @@ -782,22 +737,41 @@ document_symbol() *vim.lsp.buf.document_symbol()* window. execute_command({command}) *vim.lsp.buf.execute_command()* - TODO: Documentation + Executes an LSP server command. + + Parameters: ~ + {command} A valid `ExecuteCommandParams` object + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_executeCommand formatting({options}) *vim.lsp.buf.formatting()* Formats the current buffer. - The optional {options} table can be used to specify - FormattingOptions, a list of which is available at https://microsoft.github.io/language-server-protocol/specification#textDocument_formatting . Some unspecified options will be automatically derived from - the current Neovim options. + Parameters: ~ + {options} (optional, table) Can be used to specify + FormattingOptions. Some unspecified options + will be automatically derived from the current + Neovim options. + + See also: ~ + https://microsoft.github.io/language-server-protocol/specification#textDocument_formatting *vim.lsp.buf.formatting_sync()* formatting_sync({options}, {timeout_ms}) - Perform |vim.lsp.buf.formatting()| synchronously. + Performs |vim.lsp.buf.formatting()| synchronously. Useful for running on save, to make sure buffer is formatted prior to being saved. {timeout_ms} is passed on to - |vim.lsp.buf_request_sync()|. + |vim.lsp.buf_request_sync()|. Example: +> + + vim.api.nvim_command[[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_sync()]] +< + + Parameters: ~ + {options} Table with valid `FormattingOptions` entries + {timeout_ms} (number) Request timeout hover() *vim.lsp.buf.hover()* Displays hover information about the symbol under the cursor @@ -808,29 +782,61 @@ implementation() *vim.lsp.buf.implementation()* Lists all the implementations for the symbol under the cursor in the quickfix window. -npcall({fn}, {...}) *vim.lsp.buf.npcall()* - TODO: Documentation +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|. + +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|. + + *vim.lsp.buf.range_code_action()* +range_code_action({context}, {start_pos}, {end_pos}) + Performs |vim.lsp.buf.code_action()| for a given range. -ok_or_nil({status}, {...}) *vim.lsp.buf.ok_or_nil()* - TODO: Documentation + Parameters: ~ + {context} (table, optional) Valid `CodeActionContext` + object + {start_pos} ({number, number}, optional) mark-indexed + position. Defaults to the start of the last + visual selection. + {end_pos} ({number, number}, optional) mark-indexed + position. Defaults to the end of the last + visual selection. *vim.lsp.buf.range_formatting()* range_formatting({options}, {start_pos}, {end_pos}) - TODO: Documentation + Formats a given range. + + Parameters: ~ + {options} Table with valid `FormattingOptions` entries. + {start_pos} ({number, number}, optional) mark-indexed + position. Defaults to the end of the last + visual selection. references({context}) *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 + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references + rename({new_name}) *vim.lsp.buf.rename()* - Renames all references to the symbol under the cursor. If - {new_name} is not provided, the user will be prompted for a - new name using |input()|. + Renames all references to the symbol under the cursor. -request({method}, {params}, {callback}) *vim.lsp.buf.request()* - TODO: Documentation + Parameters: ~ + {new_name} (string) If not provided, the user will be + prompted for a new name using |input()|. server_ready() *vim.lsp.buf.server_ready()* + Checks whether the language servers attached to the current + buffer are ready. + Return: ~ `true` if server responds. @@ -846,115 +852,75 @@ workspace_symbol({query}) *vim.lsp.buf.workspace_symbol()* Lists all symbols in the current workspace in the quickfix window. - The list is filtered against the optional argument {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. - -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|. - -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|. - - -============================================================================== -Lua module: vim.lsp.callbacks *lsp-callbacks* - -err_message({...}) *vim.lsp.callbacks.err_message()* - TODO: Documentation + 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. - *vim.lsp.callbacks.location_callback()* -location_callback({_}, {method}, {result}) - TODO: Documentation + Parameters: ~ + {query} (string, optional) ============================================================================== Lua module: vim.lsp.log *lsp-log* get_filename() *vim.lsp.log.get_filename()* - TODO: Documentation + Returns the log filename. -path_join({...}) *vim.lsp.log.path_join()* - TODO: Documentation + Return: ~ + (string) log filename set_level({level}) *vim.lsp.log.set_level()* - TODO: Documentation - -should_log({level}) *vim.lsp.log.should_log()* - TODO: Documentation - - -============================================================================== -Lua module: vim.lsp.rpc *lsp-rpc* - -convert_NIL({v}) *vim.lsp.rpc.convert_NIL()* - TODO: Documentation + Sets the current log level. - *vim.lsp.rpc.create_and_start_client()* -create_and_start_client({cmd}, {cmd_args}, {handlers}, - {extra_spawn_params}) - TODO: Documentation + Parameters: ~ + {level} (string or number) One of `vim.lsp.log.levels` -encode_and_send({payload}) *vim.lsp.rpc.encode_and_send()* - TODO: Documentation +should_log({level}) *vim.lsp.log.should_log()* + Checks whether the level is sufficient for logging. -env_merge({env}) *vim.lsp.rpc.env_merge()* - Merges current process env with the given env and returns the - result as a list of "k=v" strings. -> + Parameters: ~ + {level} number log level - Example: -< + Return: ~ + (bool) true if would log, false if not - > in: { PRODUCTION="false", PATH="/usr/bin/", PORT=123, HOST="0.0.0.0", } - out: { "PRODUCTION=false", "PATH=/usr/bin/", "PORT=123", "HOST=0.0.0.0", } -< - *vim.lsp.rpc.format_message_with_content_length()* -format_message_with_content_length({encoded_message}) - TODO: Documentation +============================================================================== +Lua module: vim.lsp.rpc *lsp-rpc* format_rpc_error({err}) *vim.lsp.rpc.format_rpc_error()* - TODO: Documentation - -handle_body({body}) *vim.lsp.rpc.handle_body()* - TODO: Documentation - -is_dir({filename}) *vim.lsp.rpc.is_dir()* - TODO: Documentation - -json_decode({data}) *vim.lsp.rpc.json_decode()* - TODO: Documentation + Constructs an error message from an LSP error object. -json_encode({data}) *vim.lsp.rpc.json_encode()* - TODO: Documentation + Parameters: ~ + {err} (table) The error object -notification({method}, {params}) *vim.lsp.rpc.notification()* - TODO: Documentation + Return: ~ + (string) The formatted error message -on_error({errkind}, {...}) *vim.lsp.rpc.on_error()* - TODO: Documentation +notify({method}, {params}) *vim.lsp.rpc.notify()* + Sends a notification to the LSP server. -on_exit({code}, {signal}) *vim.lsp.rpc.on_exit()* - TODO: Documentation + Parameters: ~ + {method} (string) The invoked LSP method + {params} (table): Parameters for the invoked LSP method -onexit({code}, {signal}) *vim.lsp.rpc.onexit()* - TODO: Documentation + Return: ~ + (bool) `true` if notification could be sent, `false` if + not -parse_headers({header}) *vim.lsp.rpc.parse_headers()* - TODO: Documentation +request({method}, {params}, {callback}) *vim.lsp.rpc.request()* + Sends a request to the LSP server and runs {callback} upon + response. - *vim.lsp.rpc.pcall_handler()* -pcall_handler({errkind}, {status}, {head}, {...}) - TODO: Documentation + Parameters: ~ + {method} (string) The invoked LSP method + {params} (table) Parameters for the invoked LSP method + {callback} (function) Callback to invoke -request_parser_loop() *vim.lsp.rpc.request_parser_loop()* - TODO: Documentation + Return: ~ + (bool, number) `(true, message_id)` if request could be + sent, `false` if not *vim.lsp.rpc.rpc_response_error()* rpc_response_error({code}, {message}, {data}) @@ -966,48 +932,81 @@ rpc_response_error({code}, {message}, {data}) {message} (optional) arbitrary message to send to server {data} (optional) arbitrary data to send to server -send_notification({method}, {params}) *vim.lsp.rpc.send_notification()* - TODO: Documentation - - *vim.lsp.rpc.send_request()* -send_request({method}, {params}, {callback}) - TODO: Documentation + *vim.lsp.rpc.start()* +start({cmd}, {cmd_args}, {handlers}, {extra_spawn_params}) + Starts an LSP server process and create an LSP RPC client + object to interact with it. - *vim.lsp.rpc.send_response()* -send_response({request_id}, {err}, {result}) - TODO: Documentation + Parameters: ~ + {cmd} (string) Command to start the LSP + server. + {cmd_args} (table) List of additional string + arguments to pass to {cmd}. + {handlers} (table, optional) Handlers for LSP + message types. Valid handler names + are: + • `"notification"` + • `"server_request"` + • `"on_error"` + • `"on_exit"` + {extra_spawn_params} (table, optional) Additional context + for the LSP server process. May + contain: + • {cwd} (string) Working directory + for the LSP server process + • {env} (table) Additional + environment variables for LSP + server process -server_request({method}, {params}) *vim.lsp.rpc.server_request()* - TODO: Documentation + Return: ~ + Client RPC object. + Methods: + • `notify()` |vim.lsp.rpc.notify()| + • `request()` |vim.lsp.rpc.request()| -try_call({errkind}, {fn}, {...}) *vim.lsp.rpc.try_call()* - TODO: Documentation + Members: + • {pid} (number) The LSP server's PID. + • {handle} A handle for low-level interaction with the LSP + server process |vim.loop|. ============================================================================== Lua module: vim.lsp.util *lsp-util* - *vim.lsp.util.apply_syntax_to_region()* -apply_syntax_to_region({ft}, {start}, {finish}) - TODO: Documentation - *vim.lsp.util.apply_text_document_edit()* apply_text_document_edit({text_document_edit}) - TODO: Documentation + Parameters: ~ + {text_document_edit} (table) a `TextDocumentEdit` object + + 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}) - TODO: Documentation + Applies a list of text edits to a buffer. + + Parameters: ~ + {text_edits} (table) list of `TextEdit` objects + {buf_nr} (number) Buffer id *vim.lsp.util.apply_workspace_edit()* apply_workspace_edit({workspace_edit}) - TODO: Documentation + Applies a `WorkspaceEdit` . + + Parameters: ~ + {workspace_edit} (table) `WorkspaceEdit` buf_clear_diagnostics({bufnr}) *vim.lsp.util.buf_clear_diagnostics()* - TODO: Documentation + Clears diagnostics for a buffer. + + Parameters: ~ + {bufnr} (number) buffer id buf_clear_references({bufnr}) *vim.lsp.util.buf_clear_references()* - TODO: Documentation + Removes document highlights from a buffer. + + Parameters: ~ + {bufnr} buffer id buf_diagnostics_count({kind}) *vim.lsp.util.buf_diagnostics_count()* Returns the number of diagnostics of given kind for current @@ -1040,16 +1039,18 @@ buf_diagnostics_count({kind}) *vim.lsp.util.buf_diagnostics_count()* *vim.lsp.util.buf_diagnostics_save_positions()* buf_diagnostics_save_positions({bufnr}, {diagnostics}) - Saves the diagnostics (Diagnostic[]) into diagnostics_by_buf + Saves diagnostics into + vim.lsp.util.diagnostics_by_buf[{bufnr}]. Parameters: ~ - {bufnr} bufnr for which the diagnostics are for. - {diagnostics} Diagnostics[] received from the language - server. + {bufnr} (number) buffer id for which the + diagnostics are for + {diagnostics} list of `Diagnostic` s received from the + LSP server *vim.lsp.util.buf_diagnostics_signs()* buf_diagnostics_signs({bufnr}, {diagnostics}) - Place signs for each diagnostic in the sign column. + Places signs for each diagnostic in the sign column. Sign characters can be customized with the following commands: > @@ -1061,47 +1062,125 @@ buf_diagnostics_signs({bufnr}, {diagnostics}) *vim.lsp.util.buf_diagnostics_underline()* buf_diagnostics_underline({bufnr}, {diagnostics}) - TODO: Documentation + Highlights a list of diagnostics in a buffer by underlining + them. + + Parameters: ~ + {bufnr} (number) buffer id + {diagnostics} (list of `Diagnostic` s) *vim.lsp.util.buf_diagnostics_virtual_text()* buf_diagnostics_virtual_text({bufnr}, {diagnostics}) - TODO: Documentation + Given a list of diagnostics, sets the corresponding virtual + text for a buffer. + + Parameters: ~ + {bufnr} buffer id + {diagnostics} (table) list of `Diagnostic` s *vim.lsp.util.buf_highlight_references()* buf_highlight_references({bufnr}, {references}) - TODO: Documentation + Shows a list of document highlights for a certain buffer. + + Parameters: ~ + {bufnr} buffer id + {references} List of `DocumentHighlight` objects to + highlight character_offset({buf}, {row}, {col}) *vim.lsp.util.character_offset()* - TODO: Documentation + Returns the UTF-32 and UTF-16 offsets for a position in a + certain buffer. + + Parameters: ~ + {buf} buffer id (0 for current) + {row} 0-indexed line + {col} 0-indexed byte offset in line + + Return: ~ + (number, number) UTF-32 and UTF-16 index of the character + in line {row} column {col} in buffer {buf} *vim.lsp.util.close_preview_autocmd()* close_preview_autocmd({events}, {winnr}) - TODO: Documentation + Creates autocommands to close a preview window when events + happen. + + Parameters: ~ + {events} (table) list of events + {winnr} (number) window id of preview window + + See also: ~ + |autocmd-events| *vim.lsp.util.convert_input_to_markdown_lines()* convert_input_to_markdown_lines({input}, {contents}) - TODO: Documentation + 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. + + Parameters: ~ + {input} ( `MarkedString` | `MarkedString[]` | + `MarkupContent` ) + {contents} (table, optional, default `{}` ) List of + strings to extend with converted lines + + Return: ~ + {contents}, 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}) - TODO: Documentation + Converts `textDocument/SignatureHelp` response to markdown + lines. + + Parameters: ~ + {signature_help} Response of `textDocument/SignatureHelp` + + Return: ~ + list of lines of converted markdown. + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_signatureHelp *vim.lsp.util.diagnostics_group_by_line()* diagnostics_group_by_line({diagnostics}) - TODO: Documentation + Groups a list of diagnostics by line. + + Parameters: ~ + {diagnostics} (table) list of `Diagnostic` s + + Return: ~ + (table) dictionary mapping lines to lists of diagnostics + valid on those lines + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#diagnostic *vim.lsp.util.extract_completion_items()* extract_completion_items({result}) - TODO: Documentation + Can be used to extract the completion items from a `textDocument/completion` request, which may return one of `CompletionItem[]` , `CompletionList` or null. + + Parameters: ~ + {result} (table) The result of a + `textDocument/completion` request + + Return: ~ + (table) List of completion items + + See also: ~ + https://microsoft.github.io/language-server-protocol/specification#textDocument_completion *vim.lsp.util.fancy_floating_markdown()* fancy_floating_markdown({contents}, {opts}) - Convert markdown into syntax highlighted regions by stripping + 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. The result is shown - in a floating preview TODO: refactor to separate - stripping/converting and make use of open_floating_preview + in a floating preview. Parameters: ~ {contents} table of lines to show in window @@ -1110,25 +1189,37 @@ fancy_floating_markdown({contents}, {opts}) Return: ~ width,height size of float -find_window_by_var({name}, {value}) *vim.lsp.util.find_window_by_var()* - TODO: Documentation - focusable_float({unique_name}, {fn}) *vim.lsp.util.focusable_float()* - TODO: Documentation + Parameters: ~ + {unique_name} (string) Window variable + {fn} (function) should return create a new + window and return a tuple of + ({focusable_buffer_id}, {window_id}). if + {focusable_buffer_id} is a valid buffer id, + the newly created window will be the new + focus associated with the current buffer + via the tag `unique_name` . + + Return: ~ + (pbufnr, pwinnr) if `fn()` has created a new window; nil + otherwise *vim.lsp.util.focusable_preview()* focusable_preview({unique_name}, {fn}) - TODO: Documentation + Focuses/unfocuses the floating preview window associated with + the current buffer via the window variable `unique_name` . If + no such preview window exists, makes a new one. -get_completion_word({item}) *vim.lsp.util.get_completion_word()* - TODO: Documentation - - *vim.lsp.util.get_current_line_to_cursor()* -get_current_line_to_cursor() - TODO: Documentation + Parameters: ~ + {unique_name} (string) Window variable + {fn} (function) The return values of this + function will be passed directly to + |vim.lsp.util.open_floating_preview()|, in + the case that a new floating window should + be created get_effective_tabstop({bufnr}) *vim.lsp.util.get_effective_tabstop()* - Get visual width of tabstop. + Returns visual width of tabstop. Parameters: ~ {bufnr} (optional, number): Buffer handle, defaults to @@ -1140,52 +1231,125 @@ get_effective_tabstop({bufnr}) *vim.lsp.util.get_effective_tabstop()* See also: ~ |softtabstop| - *vim.lsp.util.get_line_byte_from_position()* -get_line_byte_from_position({bufnr}, {position}) - TODO: Documentation - get_line_diagnostics() *vim.lsp.util.get_line_diagnostics()* - TODO: Documentation + Gets list of diagnostics for the current line. + + Return: ~ + (table) list of `Diagnostic` tables + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#diagnostic *vim.lsp.util.get_severity_highlight_name()* get_severity_highlight_name({severity}) - TODO: Documentation + Gets the name of a severity's highlight group. + + Parameters: ~ + {severity} A member of + `vim.lsp.protocol.DiagnosticSeverity` + + Return: ~ + (string) Highlight group name jump_to_location({location}) *vim.lsp.util.jump_to_location()* - TODO: Documentation + Jumps to a location. + + Parameters: ~ + {location} ( `Location` | `LocationLink` ) + + Return: ~ + `true` if the jump succeeded locations_to_items({locations}) *vim.lsp.util.locations_to_items()* - TODO: Documentation + Returns the items with the byte position calculated correctly + and in sorted order, for display in quickfix and location + lists. + + Parameters: ~ + {locations} (table) list of `Location` s or + `LocationLink` s + + Return: ~ + (table) list of items *vim.lsp.util.make_floating_popup_options()* make_floating_popup_options({width}, {height}, {opts}) - TODO: Documentation + Creates a table with sensible default options for a floating + window. The table can be passed to |nvim_open_win()|. + + Parameters: ~ + {width} (number) window width (in character cells) + {height} (number) window height (in character cells) + {opts} (table, optional) + + Return: ~ + (table) Options *vim.lsp.util.make_formatting_params()* make_formatting_params({options}) - TODO: Documentation + Creates a `FormattingOptions` object for the current buffer + and cursor position. + + Parameters: ~ + {options} Table with valid `FormattingOptions` entries + + Return: ~ + `FormattingOptions 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}) + Using the given range in the current buffer, creates an object + that is similar to |vim.lsp.util.make_range_params()|. -make_position_param() *vim.lsp.util.make_position_param()* - TODO: Documentation + Parameters: ~ + {start_pos} ({number, number}, optional) mark-indexed + position. Defaults to the start of the last + visual selection. + {end_pos} ({number, number}, optional) mark-indexed + position. Defaults to the end of the last + visual selection. + + Return: ~ + { textDocument = { uri = `current_file_uri` }, range = { + start = `start_position` , end = `end_position` } } make_position_params() *vim.lsp.util.make_position_params()* - TODO: Documentation + Creates a `TextDocumentPositionParams` object for the current + buffer and cursor position. + + Return: ~ + `TextDocumentPositionParams` object + + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams make_range_params() *vim.lsp.util.make_range_params()* - TODO: Documentation + 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` . + + Return: ~ + { textDocument = { uri = `current_file_uri` }, range = { + start = `current_position` , end = `current_position` } } make_text_document_params() *vim.lsp.util.make_text_document_params()* - TODO: Documentation + Creates a `TextDocumentIdentifier` object for the current + buffer. -npcall({fn}, {...}) *vim.lsp.util.npcall()* - TODO: Documentation + Return: ~ + `TextDocumentIdentifier` -ok_or_nil({status}, {...}) *vim.lsp.util.ok_or_nil()* - TODO: Documentation + See also: ~ + https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentIdentifier *vim.lsp.util.open_floating_preview()* open_floating_preview({contents}, {filetype}, {opts}) - Show contents in a floating window + Shows contents in a floating window. Parameters: ~ {contents} table of lines to show in window @@ -1193,17 +1357,20 @@ open_floating_preview({contents}, {filetype}, {opts}) {opts} dictionary with optional fields Return: ~ - bufnr,winnr buffer and window number of floating window or - nil + bufnr,winnr buffer and window number of the newly created + floating preview window parse_snippet({input}) *vim.lsp.util.parse_snippet()* - TODO: Documentation + Parses snippets in a completion entry. -parse_snippet_rec({input}, {inner}) *vim.lsp.util.parse_snippet_rec()* - TODO: Documentation + Parameters: ~ + {input} (string) unparsed snippet + + Return: ~ + (string) parsed snippet preview_location({location}) *vim.lsp.util.preview_location()* - Preview a location in a floating windows + Previews a location in a floating window behavior depends on type of location: • for Location, range is shown (e.g., function definition) @@ -1211,52 +1378,91 @@ preview_location({location}) *vim.lsp.util.preview_location()* function definition) Parameters: ~ - {location} a single Location or LocationLink + {location} a single `Location` or `LocationLink` Return: ~ - bufnr,winnr buffer and window number of floating window or - nil - - *vim.lsp.util.remove_unmatch_completion_items()* -remove_unmatch_completion_items({items}, {prefix}) - TODO: Documentation + (bufnr,winnr) buffer and window number of floating window + or nil set_lines({lines}, {A}, {B}, {new_lines}) *vim.lsp.util.set_lines()* - TODO: Documentation + Replaces text in a range with new text. -set_loclist({items}) *vim.lsp.util.set_loclist()* - TODO: Documentation + CAUTION: Changes in-place! -set_qflist({items}) *vim.lsp.util.set_qflist()* - TODO: Documentation + Parameters: ~ + {lines} (table) Original list of strings + {A} (table) Start position; a 2-tuple of {line, + col} numbers + {B} (table) End position; a 2-tuple of {line, + col} numbers + {new_lines} A list of strings to replace the original -show_line_diagnostics() *vim.lsp.util.show_line_diagnostics()* - TODO: Documentation + Return: ~ + (table) The modified {lines} object -sort_by_key({fn}) *vim.lsp.util.sort_by_key()* - TODO: Documentation +set_loclist({items}) *vim.lsp.util.set_loclist()* + Fills current window's location list with given list of items. + Can be obtained with e.g. |vim.lsp.util.locations_to_items()|. -sort_completion_items({items}) *vim.lsp.util.sort_completion_items()* - TODO: Documentation + Parameters: ~ + {items} (table) list of items -split_lines({value}) *vim.lsp.util.split_lines()* - TODO: Documentation +set_qflist({items}) *vim.lsp.util.set_qflist()* + Fills quickfix list with given list of items. Can be obtained + with e.g. |vim.lsp.util.locations_to_items()|. + + Parameters: ~ + {items} (table) list of items + +show_line_diagnostics() *vim.lsp.util.show_line_diagnostics()* + Displays the diagnostics for the current line in a floating + hover window. symbols_to_items({symbols}, {bufnr}) *vim.lsp.util.symbols_to_items()* - Convert symbols to quickfix list items + Converts symbols to quickfix list items. Parameters: ~ {symbols} DocumentSymbol[] or SymbolInformation[] *vim.lsp.util.text_document_completion_list_to_complete_items()* text_document_completion_list_to_complete_items({result}, {prefix}) - TODO: Documentation + Turns the result of a `textDocument/completion` request into + vim-compatible |complete-items|. + + Parameters: ~ + {result} The result of a `textDocument/completion` call, + e.g. from |vim.lsp.buf.completion()|, which may + be one of `CompletionItem[]` , `CompletionList` + or `null` + {prefix} (string) the prefix to filter the completion + items + + Return: ~ + { matches = complete-items table, incomplete = bool } + + See also: ~ + |complete-items| trim_empty_lines({lines}) *vim.lsp.util.trim_empty_lines()* - TODO: Documentation + Removes empty lines from the beginning and end. + + Parameters: ~ + {lines} (table) list of lines to trim + + Return: ~ + (table) trimmed list of lines *vim.lsp.util.try_trim_markdown_code_blocks()* try_trim_markdown_code_blocks({lines}) - TODO: Documentation + Accepts markdown lines and tries to reduce them to a filetype + if they comprise just a single code block. + + CAUTION: Modifies the input in-place! + + Parameters: ~ + {lines} (table) list of lines + + Return: ~ + (string) filetype or 'markdown' if it was unchanged. vim:tw=78:ts=8:ft=help:norl: |