diff options
Diffstat (limited to '.config/nvim/lsp/roslyn_ls.lua')
| -rw-r--r-- | .config/nvim/lsp/roslyn_ls.lua | 237 | 
1 files changed, 0 insertions, 237 deletions
diff --git a/.config/nvim/lsp/roslyn_ls.lua b/.config/nvim/lsp/roslyn_ls.lua deleted file mode 100644 index e332443..0000000 --- a/.config/nvim/lsp/roslyn_ls.lua +++ /dev/null @@ -1,237 +0,0 @@ ----@brief ---- ---- https://github.com/dotnet/roslyn --- --- To install the server, compile from source or download as nuget package. --- Go to `https://dev.azure.com/azure-public/vside/_artifacts/feed/vs-impl/NuGet/Microsoft.CodeAnalysis.LanguageServer.<platform>/overview` --- replace `<platform>` with one of the following `linux-x64`, `osx-x64`, `win-x64`, `neutral` (for more info on the download location see https://github.com/dotnet/roslyn/issues/71474#issuecomment-2177303207). --- Download and extract it (nuget's are zip files). --- - if you chose `neutral` nuget version, then you have to change the `cmd` like so: ---   cmd = { ---     'dotnet', ---     '<my_folder>/Microsoft.CodeAnalysis.LanguageServer.dll', ---     '--logLevel', -- this property is required by the server ---     'Information', ---     '--extensionLogDirectory', -- this property is required by the server ---     fs.joinpath(uv.os_tmpdir(), 'roslyn_ls/logs'), ---     '--stdio', ---   }, ---   where `<my_folder>` has to be the folder you extracted the nuget package to. --- - for all other platforms put the extracted folder to neovim's PATH (`vim.env.PATH`) - -local uv = vim.uv -local fs = vim.fs - -local group = vim.api.nvim_create_augroup('lspconfig.roslyn_ls', { clear = true }) - ----@param client vim.lsp.Client ----@param target string -local function on_init_sln(client, target) -  vim.notify('Initializing: ' .. target, vim.log.levels.TRACE, { title = 'roslyn_ls' }) -  ---@diagnostic disable-next-line: param-type-mismatch -  client:notify('solution/open', { -    solution = vim.uri_from_fname(target), -  }) -end - ----@param client vim.lsp.Client ----@param project_files string[] -local function on_init_project(client, project_files) -  vim.notify('Initializing: projects', vim.log.levels.TRACE, { title = 'roslyn_ls' }) -  ---@diagnostic disable-next-line: param-type-mismatch -  client:notify('project/open', { -    projects = vim.tbl_map(function(file) -      return vim.uri_from_fname(file) -    end, project_files), -  }) -end - ----@param client vim.lsp.Client -local function refresh_diagnostics(client) -  local buffers = vim.lsp.get_buffers_by_client_id(client.id) -  for _, buf in ipairs(buffers) do -    if vim.api.nvim_buf_is_loaded(buf) then -      client:request( -        vim.lsp.protocol.Methods.textDocument_diagnostic, -        { textDocument = vim.lsp.util.make_text_document_params(buf) }, -        nil, -        buf -      ) -    end -  end -end - -local function roslyn_handlers() -  return { -    ['workspace/projectInitializationComplete'] = function(_, _, ctx) -      vim.notify('Roslyn project initialization complete', vim.log.levels.INFO, { title = 'roslyn_ls' }) -      local client = assert(vim.lsp.get_client_by_id(ctx.client_id)) -      refresh_diagnostics(client) -      return vim.NIL -    end, -    ['workspace/_roslyn_projectNeedsRestore'] = function(_, result, ctx) -      local client = assert(vim.lsp.get_client_by_id(ctx.client_id)) - -      ---@diagnostic disable-next-line: param-type-mismatch -      client:request('workspace/_roslyn_restore', result, function(err, response) -        if err then -          vim.notify(err.message, vim.log.levels.ERROR, { title = 'roslyn_ls' }) -        end -        if response then -          for _, v in ipairs(response) do -            vim.notify(v.message, vim.log.levels.INFO, { title = 'roslyn_ls' }) -          end -        end -      end) - -      return vim.NIL -    end, -    ['razor/provideDynamicFileInfo'] = function(_, _, _) -      vim.notify( -        'Razor is not supported.\nPlease use https://github.com/tris203/rzls.nvim', -        vim.log.levels.WARN, -        { title = 'roslyn_ls' } -      ) -      return vim.NIL -    end, -  } -end - ----@type vim.lsp.Config -return { -  name = 'roslyn_ls', -  offset_encoding = 'utf-8', -  cmd = { -    'Microsoft.CodeAnalysis.LanguageServer', -    '--logLevel', -    'Information', -    '--extensionLogDirectory', -    fs.joinpath(uv.os_tmpdir(), 'roslyn_ls/logs'), -    '--stdio', -  }, -  filetypes = { 'cs' }, -  handlers = roslyn_handlers(), - -  commands = { -    ['roslyn.client.completionComplexEdit'] = function(command, ctx) -      local client = assert(vim.lsp.get_client_by_id(ctx.client_id)) -      local args = command.arguments or {} -      local uri, edit = args[1], args[2] - -      if uri and edit and edit.newText and edit.range then -        local workspace_edit = { -          changes = { -            [uri.uri] = { -              { -                range = edit.range, -                newText = edit.newText, -              }, -            }, -          }, -        } -        vim.lsp.util.apply_workspace_edit(workspace_edit, client.offset_encoding) -      else -        vim.notify('roslyn_ls: completionComplexEdit args not understood: ' .. vim.inspect(args), vim.log.levels.WARN) -      end -    end, -  }, - -  root_dir = function(bufnr, cb) -    local bufname = vim.api.nvim_buf_get_name(bufnr) -    -- don't try to find sln or csproj for files from libraries -    -- outside of the project -    if not bufname:match('^' .. fs.joinpath('/tmp/MetadataAsSource/')) then -      -- try find solutions root first -      local root_dir = fs.root(bufnr, function(fname, _) -        return fname:match('%.sln[x]?$') ~= nil -      end) - -      if not root_dir then -        -- try find projects root -        root_dir = fs.root(bufnr, function(fname, _) -          return fname:match('%.csproj$') ~= nil -        end) -      end - -      if root_dir then -        cb(root_dir) -      end -    end -  end, -  on_init = { -    function(client) -      local root_dir = client.config.root_dir - -      -- try load first solution we find -      for entry, type in fs.dir(root_dir) do -        if type == 'file' and (vim.endswith(entry, '.sln') or vim.endswith(entry, '.slnx')) then -          on_init_sln(client, fs.joinpath(root_dir, entry)) -          return -        end -      end - -      -- if no solution is found load project -      for entry, type in fs.dir(root_dir) do -        if type == 'file' and vim.endswith(entry, '.csproj') then -          on_init_project(client, { fs.joinpath(root_dir, entry) }) -        end -      end -    end, -  }, - -  on_attach = function(client, bufnr) -    -- avoid duplicate autocmds for same buffer -    if vim.api.nvim_get_autocmds({ buffer = bufnr, group = group })[1] then -      return -    end - -    vim.api.nvim_create_autocmd({ 'BufWritePost', 'InsertLeave' }, { -      group = group, -      buffer = bufnr, -      callback = function() -        refresh_diagnostics(client) -      end, -      desc = 'roslyn_ls: refresh diagnostics', -    }) -  end, - -  capabilities = { -    -- HACK: Doesn't show any diagnostics if we do not set this to true -    textDocument = { -      diagnostic = { -        dynamicRegistration = true, -      }, -    }, -  }, -  settings = { -    ['csharp|background_analysis'] = { -      dotnet_analyzer_diagnostics_scope = 'fullSolution', -      dotnet_compiler_diagnostics_scope = 'fullSolution', -    }, -    ['csharp|inlay_hints'] = { -      csharp_enable_inlay_hints_for_implicit_object_creation = true, -      csharp_enable_inlay_hints_for_implicit_variable_types = true, -      csharp_enable_inlay_hints_for_lambda_parameter_types = true, -      csharp_enable_inlay_hints_for_types = true, -      dotnet_enable_inlay_hints_for_indexer_parameters = true, -      dotnet_enable_inlay_hints_for_literal_parameters = true, -      dotnet_enable_inlay_hints_for_object_creation_parameters = true, -      dotnet_enable_inlay_hints_for_other_parameters = true, -      dotnet_enable_inlay_hints_for_parameters = true, -      dotnet_suppress_inlay_hints_for_parameters_that_differ_only_by_suffix = true, -      dotnet_suppress_inlay_hints_for_parameters_that_match_argument_name = true, -      dotnet_suppress_inlay_hints_for_parameters_that_match_method_intent = true, -    }, -    ['csharp|symbol_search'] = { -      dotnet_search_reference_assemblies = true, -    }, -    ['csharp|completion'] = { -      dotnet_show_name_completion_suggestions = true, -      dotnet_show_completion_items_from_unimported_namespaces = true, -      dotnet_provide_regex_completions = true, -    }, -    ['csharp|code_lens'] = { -      dotnet_enable_references_code_lens = true, -    }, -  }, -}  |