| # 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()), | |
| } | |
| ``` |