3 releases (breaking)
0.3.0 | May 21, 2024 |
---|---|
0.2.0 | May 18, 2024 |
0.1.0 | May 17, 2024 |
#112 in Text editors
218 downloads per month
3MB
517 lines
🐽 Bacon Language Server 🐽
LSP Server wrapper for the exceptional Bacon exposing textDocument/diagnostic and workspace/diagnostic capabilities.
See bacon-ls
🐽 blog post: https://lmno.lol/crisidev/bacon-language-server
bacon-ls
🐽 is meant to be easy to include in your IDE configuration.
Features - ✅ done 🕖 in progress 🌍 future
- 🔥
bacon-ls
🐽 does not startbacon
for you, it requires it running in another terminal - ✅ Implement LSP server interface for
textDocument/diagnostic
andworkspace/diagnostic
- ✅ Manual Neovim configuration
- ✅ Manual LazyVim configuration
- 🕖 Automatic NeoVim configuration
- ✅ Add
bacon-ls
to nvim-lspconfig - https://github.com/neovim/nvim-lspconfig/pull/3160 - 🕖 Add
bacon
andbacon-ls
to mason.nvim - https://github.com/mason-org/mason-registry/pull/5774 - 🕖 Add
bacon-ls
to LazyVim Rust extras - https://github.com/LazyVim/LazyVim/pull/3212
- ✅ Add
- ✅ Add compiler hints to Bacon export locations - https://github.com/Canop/bacon/pull/187 https://github.com/Canop/bacon/pull/188
- 🌍 VsCode extension and configuration
- 🌍 Emacs configuration
Installation
First, install Bacon and bacon-ls
🐽
❯❯❯ cargo install --locked bacon bacon-ls
Configure Bacon export-locations settings with bacon-ls
🐽 export format:
[export]
enabled = true
path = ".bacon-locations"
line_format = "{kind}:{path}:{line}:{column}:{message}"
Configuration
The language server can be configured using the appropriate LSP protocol and supports the following values:
locationsFile
Bacon export filename, default.bacon-locations
.waitTimeSeconds
Maximum time in seconds the LSP server waits for Bacon to update the export file before loading the new diagnostics, default10
.
Neovim - LazyVim
return {
{
"neovim/nvim-lspconfig",
opts = {
diagnostics = {
update_in_insert = true,
},
servers = {
rust_analyzer = { enable = false },
bacon_ls = {
enable = true
settings = {
-- locationsFile = ".locations",
-- waitTimeSeconds = 5
},
},
},
},
},
{
"mrcjkb/rustaceanvim",
opts = {
default_settings = {
["rust-analyzer"] = {
diagnostics = { enable = false },
checkOnSave = { enable = false },
},
},
},
},
}
Neovim - Manual
NeoVim requires nvim-lspconfig to be configured and rust-analyzer diagnostics must be turned off for Bacon-Ls 🐽 to properly function.
bacon-ls
is part of nvim-lspconfig
from commit
6d2ae9f
and it can be configured like any other LSP server works best when
vim.diagnostics.Opts.update_in_insert
is set to true
.
require("lspconfig.configs").bacon_ls.setup({
autostart=true,
settings = {
-- locationsFile = ".locations",
-- waitTimeSeconds = 5
},
})
For rust-analyzer
, these 2 options must be turned off:
rust-analyzer.checkOnSave.enable = false
rust-analyzer.diagnostics.enable = false
How does it work?
bacon-ls
🐽 reads the diagnostics location list generated
by Bacon's export-locations
and exposes them on STDIO over the LSP protocol to be consumed
by the client diagnostics.
It requires Bacon to be running alongside to ensure regular updates of the export locations.
The LSP client reads them as response to textDocument/diagnostic
and workspace/diagnostic
.
Thanks
bacon-ls
🐽 has been inspired by typos-lsp.
Dependencies
~10–19MB
~254K SLoC