| Title: About Language Server Protocol and Kakoune text editor | |
| Author: Solène | |
| Date: 24 November 2020 | |
| Tags: kakoune editor openbsd | |
| Description: | |
| In this article I will explain how to install a lsp plugin for kakoune | |
| to add language specific features such as autocompletion, syntax error | |
| reporting, easier navigation to definitions and more. | |
| The principle is to use "Language Server Protocol" (LSP) to communicate | |
| between the editor and a daemon specific to a programming language. | |
| This can be also done with emacs, vim and neovim using the according | |
| plugins. | |
| Language Server Protocol on Wikipedia | |
| For python, _pyls_ would be used while for C or C++ it would be | |
| _clangd_. | |
| The how-to will use OpenBSD as a base. The package names may certainly | |
| vary for other systems. | |
| ## Pre-requisites | |
| We need _kak-lsp_ which requires rust and cargo. We will need git too | |
| to fetch the sources, and obviously kakoune. | |
| ```shell command | |
| # pkg_add kakoune rust git | |
| ``` | |
| ## Building | |
| Official building steps documentation | |
| I recommend using a dedicated build user when building programs from | |
| sources, without a real audit you can't know what happens exactly in | |
| the build process. Mistakes could be done and do nasty things with your | |
| data. | |
| ```shell command | |
| $ git clone https://github.com/kak-lsp/kak-lsp | |
| $ cd kak-lsp | |
| $ cargo install --locked --force --path . | |
| ``` | |
| ## Configuration | |
| There are a few steps. kak-lsp has its own configuration file but the | |
| default one is good enough and kakoune must be configured to run the | |
| kak-lsp program when needed. | |
| Take care about the second command if you built from another user, you | |
| have to fix the path. | |
| ```shell command | |
| $ mkdir -p ~/.config/kak-lsp | |
| $ cp kak-lsp.toml ~/.config/kak-lsp/ | |
| ``` | |
| This configuration file tells what program must be used depending of | |
| the programming language required. | |
| ```Configuration file sample | |
| [language.python] | |
| filetypes = ["python"] | |
| roots = ["requirements.txt", "setup.py", ".git", ".hg"] | |
| command = "pyls" | |
| offset_encoding = "utf-8" | |
| ``` | |
| Taking the configuration block for python, we can see the command used | |
| is _pyls_. | |
| For kakoune configuration, we need a simple configuration in | |
| ~/.config/kak/kakrc | |
| ```Configuration file sample | |
| eval %sh{/usr/local/bin/kak-lsp --kakoune -s $kak_session} | |
| hook global WinSetOption filetype=(rust|python|go|javascript|typescript|c|cpp) … | |
| lsp-enable-window | |
| } | |
| ``` | |
| Note that I used the full path of kak-lsp binary in the configuration | |
| file, this is due to a rust issue on OpenBSD. | |
| Link to Rust issue on github | |
| ## Trying with python | |
| To support python programs you need to install python-language-server | |
| which is available in pip. There are no package for it on OpenBSD. If | |
| you install the program with pip, take care to have the binary in your | |
| $PATH (either by extending $PATH to ~/.local/bin/ or by copying the | |
| binary in /usr/local/bin/ or whatever suits you). | |
| The pip command would be the following (your pip binary name may | |
| change): | |
| ```shell command | |
| $ pip3.8 install --user 'python-language-server[all]' | |
| ``` | |
| Then, opening python source file should activate the analyzer | |
| automatically. If you add a mistake, you should see `!` or `*` in the | |
| most left column. | |
| ## Trying with C | |
| To support C programs, clangd binary is required. On OpenBSD it is | |
| provided by the clang-tools-extra package. If clangd is in your $PATH | |
| then you should have working support. | |
| ## Using kak-lsp | |
| Now that it is installed and working, you may want to read the | |
| documentation. | |
| kak-lsp usage | |
| I didn't look deep for now, the autocompletion automatically but may be | |
| slow in some situation. | |
| Default keybindings for "gr" and "gd" are made respectively for "jump | |
| to reference" and "jump to definition". | |
| Typing "diag" in the command prompt runs "lsp-diagnostics" which will | |
| open a new buffer explaining where errors are warnings are located in | |
| your source file. This is very useful to fix errors before compiling or | |
| running the program. | |
| ## Debugging | |
| The official documentation explains well how you can check what is | |
| wrong with the setup. It consists into starting kak-lsp in a terminal | |
| and kakoune separately and check kak-lsp output. This helped me a lot. | |
| Official troubleshooting guide | |