| # Neovim configuration guide for SPIR-V disassembly files |
| |
| This directory holds instructions to configure Neovim for SPIR-V assembly files (`.spvasm`) |
| |
| At the end, Neovim should support: |
| * Syntax highlighting |
| * Jump to definition |
| * Find all references |
| * Symbol renaming |
| * Operand hover information |
| * Formatting |
| * Completion suggestions for all Opcodes and Ids |
| |
| While the instructions here are specifically for Neovim, they should translate easily to vim. |
| |
| ## Dependencies |
| |
| In order to build and install the Visual Studio Code language server extension, you will need to install and have on your `PATH` the following dependencies: |
| * [`golang 1.16+`](https://golang.org/) |
| |
| ## File type detection |
| |
| Neovim's default config location is typically `~/.config/nvim` so the rest of the instructions assume that but it will need to be changed if your system is different. |
| |
| Tell neovim that `*.spvasm` files should be treated as `spvasm` filetype |
| ```bash |
| echo "au BufRead,BufNewFile *.spvasm set filetype=spvasm" > ~/.config/nvim/ftdetect/spvasm.vim |
| ``` |
| |
| ## Syntax Highlighting |
| |
| ### Generate the syntax highlighting file |
| ```bash |
| cd <spirv-tools dir> |
| mkdir -p build && cd build |
| # Any platform is fine, ninja is used an as example |
| cmake -G Ninja .. |
| ninja spirv-tools-vimsyntax |
| ``` |
| |
| ### Copy the syntax file |
| ```bash |
| cp spvasm.vim ~/.config/nvim/syntax/spvasm.vim |
| ``` |
| |
| ## Language Server |
| |
| ### Building the LSP (masOS / Linux) |
| |
| Run `build_lsp.sh` |
| Copy `spirvls` and `spirv.json` to a location in `$PATH` |
| |
| ```bash |
| cd <spirv-tools dir>/utils/vscode |
| ./build_lsp.sh |
| sudo cp spirvls/* /usr/local/bin/ |
| ``` |
| |
| ### Building the LSP (Windows) |
| |
| TODO |
| |
| ### Configuring Neovim |
| |
| Configuration will depend a lot on your installed plugins but assuming you are using [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) the following should be sufficient. |
| |
| ```lua |
| local lspconfig = require 'lspconfig' |
| local configs = require 'lspconfig.configs' |
| |
| if not configs.spvasm then |
| configs.spvasm = { |
| default_config = { |
| cmd = { 'spirvls' }, |
| filetypes = { 'spvasm' }, |
| root_dir = function(fname) |
| return '.' |
| end, |
| settings = {}, |
| }, |
| } |
| end |
| |
| lspconfig.spvasm.setup { |
| capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()), |
| } |
| ``` |