Neovim LSP with Linux Kernel
Ricardo B. Marliere
ricardo at marliere.net
Tue Sep 19 08:46:09 EDT 2023
On 23/09/19 12:45PM, Maciej Wieczór-Retman wrote:
> On 2023-09-19 at 06:24:24 -0300, Ricardo B. Marliere wrote:
> >On 23/09/19 09:45AM, Maciej Wieczór-Retman wrote:
> >> Hi,
> >> I'm using neovim for a long time now and I've been using ccls as the LSP
> >> for anything in C. It's working very well with userspace programs (with
> >> "bear -- make" to generate compile_commands.json) but it seems to take
> >> up a lot of CPU power whenever I reboot and open any kernel code.
> >>
> >> The kernel provides it's own way to get compile_commands.json and I
> >> understand that ccls needs a bit of time to index these thousands of
> >> files.
> >>
> >> But does anyone know if there is a way to avoid indexing files so often?
> >> Or maybe is there a better LSP for C? I couldn't really find anything
> >> else and I'm running Arch Linux which suggests it's the recommended one
> >> for C.
> >
> >Hey there Maciej!
> >
> >I've been using clangd with no problems, the indexing is expensive but
> >after that it's a breeze. Are you cleaning your tree very often?
>
> Yes, quite often lately. Does it affect the indexing? I'll try using
> output directory for .o files and binaries and I'll clean that less, maybe
> that will help. Thanks.
I think this is what's causing the constant re-indexing, then. Maybe use
a 'static' tree-dir just for browsing the code using the LSP? The output
directory is a good idea, I'll try it out aswell - thanks!
>
> >(...)
> >local lspconfig = require("lspconfig")
> >local get_servers = require("mason-lspconfig").get_installed_servers
> >for _, server_name in ipairs(get_servers()) do
> > if server_name == "clangd" then
> > local compile_commands = vim.fn.getcwd() .. "/compile_commands.json"
> > if vim.fn.filereadable(compile_commands) == 1 then
> > lspconfig[server_name].setup({
> > on_attach = LSPAttach,
> > capabilities = LSPCapabilities,
> > offset_encoding = "utf-16",
> > })
> > end
> > else
> > lspconfig[server_name].setup({
> > on_attach = LSPAttach,
> > capabilities = LSPCapabilities,
> > offset_encoding = "utf-16",
> > })
> > end
> >end
> >
>
> I see you're using mason-lspconfig. Is the default nvim-lspconfig worse
> somehow? I picked it because it seemed pretty simple and I wanted to
> start with something straight forward but maybe mason handles some stuff
> better?
Mason is just a nice frontend for installing LSPs, DAPs, Linters and
Formatters. I use it because sometimes I like to explore the available
tooling :)
I shared that snippet only to show the usecase of setting up all
installed servers and starting clangd only if there is a
compile_commands.json available. Thought it could be helpful.
Good luck,
- Ricardo
More information about the Kernelnewbies
mailing list