I'm trying to set up the csharp-ls LSP for use in neovim for C# files. My init.lua file looks like this:
vim.lsp.config(
    'csharp-ls',
    {
        cmd = { 'csharp-ls' },
        filetypes = { 'cs' },
        root_markers = { '*.sln', '*.csproj' },
    }
)
vim.lsp.enable('csharp-ls', false)
vim.lsp.enable('csharp-ls', true)
I'm opening a file called Program.cs in a directory that has these files:
Console1.csproj
Console1.sln
Program.cs
When I run :checkhealth in neovim I'm getting this showing that root is nil:
vim.lsp: Active Clients ~
- csharp-ls (id: 1)
  - Version: 0.18.0.0
  - Root directory: nil
  - Command: { "csharp-ls" }
  - Settings: {}
  - Attached buffers: 1
vim.lsp: Enabled Configurations ~
- csharp-ls:
  - cmd: { "csharp-ls" }
  - filetypes: cs
  - root_markers: *.sln, *.csproj
How do I get it to detect the .sln file as the root of the project?
The root_markers property does not support globs. So if you have a file called Console1.sln *.sln is not going to find it. The way I found to work around this is to set the root directory to a function like this:
vim.lsp.config(
  'csharp-ls',
  {
    cmd = { 'csharp-ls' },
    filetypes = { 'cs' },
    root_dir = vim.fs.root(
      0, 
      function(name, path)
        return name:match('%.sln$') ~= nil
      end)
  }
)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With