blob: a73977efc34f727c26be2510f406b3985a0f7676 [file] [log] [blame] [view]
# 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()),
}
```