Populates project-wide lsp diagnostcs, regardless of what files are opened.
This post goes into details of lsp diagnostics and how this plugin works.
Demo
Here you can see that even though a single file gets opened, the diagnostics are populated for other files as well.
workspace_diagnostics.mp4
Package manager | Snippet |
---|---|
use {"artemave/workspace-diagnostics.nvim"} |
|
Plug "artemave/workspace-diagnostics.nvim" |
|
require("lazy").setup({"artemave/workspace-diagnostics.nvim"}) |
Populate workspace diagnostcs when an lsp client is attached:
require('lspconfig').tsserver.setup({
on_attach = function(client, bufnr)
...
require("workspace-diagnostics").populate_workspace_diagnostics(client, bufnr)
...
end
})
Despite its placement, populate_workspace_diagnostics
will actually do the work only once per client.
Alternatively, you can trigger it explicitly via a keybinding. E.g., the following code maps <space>x
to populate workspace diagnostics:
vim.api.nvim_set_keymap('n', '<space>x', '', {
noremap = true,
callback = function()
for _, client in ipairs(vim.lsp.buf_get_clients()) do
require("workspace-diagnostics").populate_workspace_diagnostics(client, 0)
end
end
})
Caveat: this only populates diagnostics for the files that share type with the current buffer. E.g., in a rails project, if you run this in a javascript file, you'll get diagnostics for all javascript files, but not ruby files.
You can configure a different function that returns a list of project files (it defaults to the output of git ls-files
).
require("workspace-diagnostics").setup({
workspace_files = function()
return { 'index.js', 'lib/banana.js' }
end
})
Some lsp clients do not advertise filetypes they cover, which makes it impossible for this plugin to select relevant project files. In this case, you'll see a warning, and you'll need to explicitly add filetypes
when setting up the client. E.g.:
require("roslyn").setup({
config = {
filetypes = { 'cs' },
},
})
PRs and issues are always welcome. Make sure to provide as much context as possible when opening one.
To run make lint
locally, you'd need to install stylua:
cargo install stylua --features lua52