Canonical repository: https://git.sr.ht/~klahr/quadrate.nvim
Neovim plugin for the Quadrate programming language with LSP support and tree-sitter syntax highlighting.
- Syntax Highlighting: Tree-sitter parser (recommended) or Vim regex fallback
- LSP Integration: Full language server support via nvim-lspconfig
- Auto-completion: Built-in instructions and user-defined functions
- Diagnostics: Real-time error detection
- Go to Definition: Navigate to function and variable definitions
- Find References: Find all usages of a symbol
- Rename Symbol: Scoped renaming of variables and functions
- Document Formatting: Format code with
<space>f - Signature Help: Function signatures while typing
- Document Highlight: Highlight other occurrences of symbol under cursor
- Code Folding: LSP-based folding for functions and blocks
- Neovim 0.8+ (for LSP support)
- nvim-lspconfig plugin
- quadlsp binary (from the Quadrate compiler)
- nvim-treesitter plugin
- tree-sitter-cli (
npm install -g tree-sitter-cli)
# From the Quadrate repository
git clone https://git.sr.ht/~klahr/quadrate
cd quadrate
make release && sudo make installOr use a local build:
make debug
# Binary at: build/debug/cmd/quadlsp/quadlsp{
'quadrate-lang/quadrate.nvim',
dependencies = { 'neovim/nvim-lspconfig' },
}use {
'quadrate-lang/quadrate.nvim',
requires = { 'neovim/nvim-lspconfig' },
}Plug 'quadrate-lang/quadrate.nvim'Clone and symlink:
git clone https://git.sr.ht/~klahr/quadrate.nvim ~/.local/share/nvim/site/pack/plugins/start/quadrate.nvimOr symlink individual files:
ln -s /path/to/quadrate.nvim/ftdetect/quadrate.vim ~/.config/nvim/ftdetect/
ln -s /path/to/quadrate.nvim/plugin/quadrate.lua ~/.config/nvim/plugin/
ln -s /path/to/quadrate.nvim/syntax/quadrate.vim ~/.config/nvim/syntax/
ln -s /path/to/quadrate.nvim/indent/quadrate.vim ~/.config/nvim/indent/The plugin auto-configures LSP when loaded. No additional setup required if quadlsp is in your PATH.
If using a local build, configure before the plugin loads:
-- In your init.lua, before loading the plugin
require('quadrate').setup({
lsp = {
path = '/path/to/quadrate/build/debug/cmd/quadlsp/quadlsp'
}
})To configure LSP manually:
vim.g.quadrate_no_auto_setup = trueThen call setup yourself:
require('lspconfig').quadlsp.setup(require('quadrate').get_lsp_opts())require('quadrate').setup({
lint = {
enabled = true, -- Enable/disable linting
path = 'quadlint' -- Path to linter binary
}
})Tree-sitter provides faster and more accurate syntax highlighting.
cd /path/to/quadrate.nvim/tree-sitter-quadrate
tree-sitter generatecp -r tree-sitter-quadrate ~/.config/nvim/
# Or symlink
ln -s /path/to/quadrate.nvim/tree-sitter-quadrate ~/.config/nvim/tree-sitter-quadrate:TSInstallInfo quadrate
:TSBufEnable highlightDefault mappings (defined in plugin/quadrate.lua):
| Key | Action |
|---|---|
K |
Hover documentation |
gd |
Go to definition |
gD |
Go to declaration |
gi |
Go to implementation |
gr |
Find references |
<space>f |
Format document |
<space>rn |
Rename symbol |
<space>ca |
Code actions |
<space>e |
Show diagnostics |
[d |
Previous diagnostic |
]d |
Next diagnostic |
<C-k> |
Signature help (normal and insert mode) |
<space>D |
Type definition |
<space>wa |
Add workspace folder |
<space>wr |
Remove workspace folder |
<space>wl |
List workspace folders |
<space>q |
Set location list with diagnostics |
If you prefer coc.nvim, add to your coc-settings.json (:CocConfig):
{
"languageserver": {
"quadrate": {
"command": "quadlsp",
"filetypes": ["quadrate"],
"rootPatterns": [".git/"],
"settings": {}
}
}
}Check if quadlsp is accessible:
which quadlspEnable LSP debug logs:
vim.lsp.set_log_level('debug')
:lua vim.cmd('e ' .. vim.lsp.get_log_path())Check LSP status:
:LspInfo- Verify LSP is attached:
:LspInfo - Check omnifunc:
:set omnifunc? - Try manual completion:
<C-x><C-o>
Diagnostics update on file open/save:
- Save the file:
:w - Check diagnostics:
:lua vim.diagnostic.open_float()
Patches welcome!
Email: ~klahr/quadrate@lists.sr.ht GitHub: https://github.com/quadrate-lang/quadrate.nvim
GNU General Public License v3.0
See LICENSE for full terms.
- Quadrate Language: https://git.sr.ht/~klahr/quadrate
- Documentation: https://quad.r8.rs
- nvim-lspconfig: https://github.com/neovim/nvim-lspconfig
- nvim-treesitter: https://github.com/nvim-treesitter/nvim-treesitter