From 8f088abfc43f964e65b1fbcb64b8d665a0a2da29 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 16 Feb 2021 16:15:24 +0100 Subject: Support user choice and other improvements * Add support for user choices by piping the available choices through lspc.menu_cmd which must be a dmenu|vis-menu|fzf like tool. * Mention all commands and options in the README * Add support for textDocument/references * Support opening new location in a horizonatl or vertical split * Internal refactoring * Group binding, vis command and event code * Return error messages and use vis:info only in vis commands * Fix a bug on unexpected server termination --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 8 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index f9e49d2..0ee4c45 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ vis-lspc currently supports: * `textDocument/completion` * `textDocument/declaration` * `textDocument/definition` +* `textDocument/references` * `textDocument/typeDefinition` * `textDocument/implementation` @@ -32,11 +33,26 @@ Currently only clangd is available and somewhat tested. There should be a mapping between vis syntax/lexer names and LSP [languageId](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentItem). For example the syntax for C code in vis is called 'ansi_c' and in LSP 'c'. +## Requirements + +* vis must be compiled with the Lua [communicate API](https://github.com/martanne/vis/pull/675). +* Optional: the json implementation of your choice + * must be usable by calling `require('json')` + * must provide `json.encode, json.decode` + +## Installation + +1. Clone this repository into your vis plugins directory +2. Load the plugin in your `visrc.lua` with `require('plugins/vis-lspc')` + + ## Usage Note that till `textDocument/didChange` is implemented vis-lspc is hardly usable. But if you are brave there are some default key bindings: +### Default Bindings + Normal mode: - start a language server for win.syntax - open win.file with a running language server @@ -45,17 +61,39 @@ But if you are brave there are some default key bindings: Normal and Insert mode: - get completions -## Requirements -* vis must be compiled with the Lua [communicate API](https://github.com/martanne/vis/pull/675). -* Optional: the json implementation of your choice - * must be usable by calling `require('json')` - * must provide `json.encode, json.decode` +### Available commands -## Installation + # language-server management: + lspc-start-server [syntax] - start a language server for syntax or win.syntax + lspc-stop-server [syntax] - stop the language server for syntax or win.syntax -1. Clone this repository into your vis plugins directory -2. Load the plugin in your `visrc.lua` with `require('plugins/vis-lspc')` + # file registration: + lspc-open - register the file in the current window + lspc-close - unregister the file in the current window + + # navigation commands (they all operate on the symbol under the main cursor): + lspc-completion - syntax completion + lspc-references [e | vsplit | hsplit] - select and open a reference + lspc-declaration [e | vsplit | hsplit] - select and open a declaration + lspc-definition [e | vsplit | hsplit] - open the definition + lspc-typeDeclaration [e | vsplit | hsplit] - select and open a type declaration + lspc-implementation [e | vsplit | hsplit] - I actually have no idea what this does + + lspc-back - navigate back in the goto history + +### Available configuration fields + +The module table returned by `require('plugins/vis-lspc')` can be use to configure +some aspects of vis-lspc. + +Available fields are: + +* `name = 'vis-lspc'` - the name vis-lspc introduces itself to a language server +* `logging = false` - enable logging only useful for debugging vis-lspc +* `log_file = 'vis-lspc.log'` - file vis-lspc writes all log messages to +* `autostart = true` - try to start a language server in WIN_OPEN +* `menu_cmd = 'fzf' or 'vis-menu'` - program to prompt for user choices ## License -- cgit v1.2.3