Neovim LSP with Linux Kernel

Maciej Wieczór-Retman maciej.wieczor-retman at intel.com
Tue Sep 19 06:45:16 EDT 2023


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.

>(...)
>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?

-- 
Kind regards
Maciej Wieczór-Retman



More information about the Kernelnewbies mailing list