From 3364c6bbddfb5ffdc56a6688ce1865e23cf327d4 Mon Sep 17 00:00:00 2001 From: William Boman Date: Fri, 12 Aug 2022 22:17:23 +0200 Subject: fix(omnisharp_mono): add dedicated server entry for omnisharp_mono (#32) This is done in order to separate the .NET and Mono variants, making them both equally accessible (you have to jump through hoops to use the non-default [Mono] variant atm). --- README.md | 1 + lua/mason-lspconfig/init.lua | 8 +++++- lua/mason-lspconfig/mappings/filetype.lua | 4 +-- lua/mason-lspconfig/mappings/server.lua | 1 + lua/mason-lspconfig/server_config_extensions.lua | 5 ++++ .../server_configurations/julials/init.lua | 12 +------- .../server_configurations/omnisharp/README.md | 13 ++++----- .../server_configurations/omnisharp/init.lua | 4 +-- .../server_configurations/omnisharp_mono/init.lua | 5 ++++ .../lua/mason-scripts/mason-lspconfig/generate.lua | 33 +++++++++++++--------- 10 files changed, 49 insertions(+), 37 deletions(-) create mode 100644 lua/mason-lspconfig/server_config_extensions.lua create mode 100644 lua/mason-lspconfig/server_configurations/omnisharp_mono/init.lua diff --git a/README.md b/README.md index f4332c9..89b7970 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ local DEFAULT_SETTINGS = { | C | `clangd` | | C# | `csharp_ls` | | C# [(docs)][omnisharp] | `omnisharp` | +| C# [(docs)][omnisharp] | `omnisharp_mono` | | C++ | `clangd` | | CMake | `cmake` | | CSS | `cssls` | diff --git a/lua/mason-lspconfig/init.lua b/lua/mason-lspconfig/init.lua index d6482b3..b57effe 100644 --- a/lua/mason-lspconfig/init.lua +++ b/lua/mason-lspconfig/init.lua @@ -11,7 +11,13 @@ function M.setup(config) settings.set(config) end - require "mason-lspconfig.lspconfig_hook"() + local ok, err = pcall(function() + require "mason-lspconfig.lspconfig_hook"() + require "mason-lspconfig.server_config_extensions"() + end) + if not ok then + log.error("Failed to set up lspconfig integration.", err) + end if #settings.current.ensure_installed > 0 then require "mason-lspconfig.ensure_installed"() diff --git a/lua/mason-lspconfig/mappings/filetype.lua b/lua/mason-lspconfig/mappings/filetype.lua index 959ecb8..fe3ba6b 100644 --- a/lua/mason-lspconfig/mappings/filetype.lua +++ b/lua/mason-lspconfig/mappings/filetype.lua @@ -22,7 +22,7 @@ return { cmake = { "cmake" }, cpp = { "clangd" }, crystal = { "crystalline" }, - cs = { "csharp_ls", "omnisharp" }, + cs = { "csharp_ls", "omnisharp", "omnisharp_mono" }, css = { "cssls", "emmet_ls", "stylelint_lsp", "tailwindcss" }, cucumber = { "cucumber_language_server" }, cuda = { "clangd" }, @@ -144,7 +144,7 @@ return { ["typescript.tsx"] = { "angularls", "denols", "eslint", "rome", "tsserver" }, typescriptreact = { "angularls", "cssmodules_ls", "denols", "emmet_ls", "eslint", "graphql", "rome", "stylelint_lsp", "tailwindcss", "tsserver" }, vala = { "vala_ls" }, - vb = { "omnisharp" }, + vb = { "omnisharp", "omnisharp_mono" }, verilog = { "svlangserver", "svls", "verible" }, vim = { "vimls" }, visualforce = { "visualforce_ls" }, diff --git a/lua/mason-lspconfig/mappings/server.lua b/lua/mason-lspconfig/mappings/server.lua index d4cb423..518c5a9 100644 --- a/lua/mason-lspconfig/mappings/server.lua +++ b/lua/mason-lspconfig/mappings/server.lua @@ -68,6 +68,7 @@ M.lspconfig_to_package = { ["nimls"] = "nimlsp", ["ocamllsp"] = "ocaml-lsp", ["omnisharp"] = "omnisharp", + ["omnisharp_mono"] = "omnisharp-mono", ["opencl_ls"] = "opencl-language-server", ["perlnavigator"] = "perlnavigator", ["phpactor"] = "phpactor", diff --git a/lua/mason-lspconfig/server_config_extensions.lua b/lua/mason-lspconfig/server_config_extensions.lua new file mode 100644 index 0000000..2bdffc9 --- /dev/null +++ b/lua/mason-lspconfig/server_config_extensions.lua @@ -0,0 +1,5 @@ +return function() + local configs = require "lspconfig.configs" + + configs.omnisharp_mono = require "lspconfig.server_configurations.omnisharp" +end diff --git a/lua/mason-lspconfig/server_configurations/julials/init.lua b/lua/mason-lspconfig/server_configurations/julials/init.lua index 6166e35..e5bc6c4 100644 --- a/lua/mason-lspconfig/server_configurations/julials/init.lua +++ b/lua/mason-lspconfig/server_configurations/julials/init.lua @@ -31,20 +31,10 @@ return function(install_dir) end config.cmd = { - "julia", - "--startup-file=no", - "--history-file=no", - "--depwarn=no", - ("--project=%s"):format(path.concat { install_dir, "scripts", "environments", "languageserver" }), - path.concat { install_dir, "nvim-lsp.jl" }, + "julia-lsp", vim.env.JULIA_DEPOT_PATH or "", - path.concat { install_dir, "symbolstorev5" }, env_path, } end, - cmd_env = { - JULIA_DEPOT_PATH = path.concat { install_dir, "lsdepot" }, - JULIA_LOAD_PATH = platform.is.win and ";" or ":", - }, } end diff --git a/lua/mason-lspconfig/server_configurations/omnisharp/README.md b/lua/mason-lspconfig/server_configurations/omnisharp/README.md index 7825578..2b7e601 100644 --- a/lua/mason-lspconfig/server_configurations/omnisharp/README.md +++ b/lua/mason-lspconfig/server_configurations/omnisharp/README.md @@ -1,16 +1,15 @@ # omnisharp -## How to enable Omnisharp Mono +## How to use Omnisharp Mono -By default, the `omnisharp` server will use the `dotnet` (NET6) runtime to run the server. -To run the server using the Mono runtime, set the `use_modern_net` setting to `false`, like so: +The `omnisharp` server will use the `dotnet` (NET6) runtime to run the server. To run the server using the Mono runtime, +use the `omnisharp_mono` server instead (**this requires the `omnisharp-mono` package to be installed**). -__This requires the `omnisharp-mono` package to be installed.__ +**Note:** The `omnisharp_mono` server configuration doesn't exist in `lspconfig` but is provided by `mason-lspconfig`. +This is done in order to separate the .NET and Mono variants, making both easily accessible. ```lua local lspconfig = require("lspconfig") -lspconfig.omnisharp.setup { - use_modern_net = false -} +lspconfig.omnisharp_mono.setup {} ``` diff --git a/lua/mason-lspconfig/server_configurations/omnisharp/init.lua b/lua/mason-lspconfig/server_configurations/omnisharp/init.lua index 274ff18..466bdfc 100644 --- a/lua/mason-lspconfig/server_configurations/omnisharp/init.lua +++ b/lua/mason-lspconfig/server_configurations/omnisharp/init.lua @@ -1,5 +1,5 @@ -return function(install_dir, config) +return function() return { - cmd = { config.use_modern_net == false and "omnisharp-mono" or "omnisharp" }, + cmd = { "omnisharp" }, } end diff --git a/lua/mason-lspconfig/server_configurations/omnisharp_mono/init.lua b/lua/mason-lspconfig/server_configurations/omnisharp_mono/init.lua new file mode 100644 index 0000000..9512146 --- /dev/null +++ b/lua/mason-lspconfig/server_configurations/omnisharp_mono/init.lua @@ -0,0 +1,5 @@ +return function() + return { + cmd = { "omnisharp-mono" }, + } +end diff --git a/scripts/lua/mason-scripts/mason-lspconfig/generate.lua b/scripts/lua/mason-scripts/mason-lspconfig/generate.lua index 88fdc9d..464de50 100644 --- a/scripts/lua/mason-scripts/mason-lspconfig/generate.lua +++ b/scripts/lua/mason-scripts/mason-lspconfig/generate.lua @@ -1,3 +1,7 @@ +require "mason-lspconfig.server_config_extensions"() +local Optional = require "mason-core.optional" + +local lspconfig = require "lspconfig" local a = require "mason-core.async" local path = require "mason-core.path" local _ = require "mason-core.functional" @@ -7,16 +11,13 @@ local script_utils = require "mason-scripts.utils" local DOCS_DIR = path.concat { vim.loop.cwd(), "doc" } local MASON_LSPCONFIG_DIR = path.concat { vim.loop.cwd(), "lua", "mason-lspconfig" } -local function get_lspconfig(name) - return require(("lspconfig.server_configurations.%s"):format(name)) -end - ---@async local function create_lspconfig_filetype_map() local filetype_map = {} for _, server_name in ipairs(_.keys(lspconfig_server_mapping.lspconfig_to_package)) do - local config = get_lspconfig(server_name) + local config = + assert(lspconfig[server_name], ("Failed to get config for %s"):format(server_name)).document_config for _, filetype in ipairs(config.default_config.filetypes or {}) do if not filetype_map[filetype] then filetype_map[filetype] = {} @@ -39,10 +40,9 @@ local function ensure_valid_package_name_translations() local registry = require "mason-registry" for lspconfig_server, mason_package in pairs(server_mappings.lspconfig_to_package) do - local lspconfig_ok, server_config = - pcall(require, ("lspconfig.server_configurations.%s"):format(lspconfig_server)) + local server_config = lspconfig[lspconfig_server] local mason_ok, pkg = pcall(registry.get_package, mason_package) - assert(lspconfig_ok and server_config ~= nil, lspconfig_server .. " is not a valid lspconfig server name.") + assert(server_config ~= nil, lspconfig_server .. " is not a valid lspconfig server name.") assert(mason_ok and pkg ~= nil, mason_package .. " is not a valid Mason package name.") end end @@ -52,13 +52,18 @@ local function create_server_mapping_docs() local server_mappings = require "mason-lspconfig.mappings.server" local table_body = _.compose( - _.map(function(pair) + _.filter_map(function(pair) local lspconfig_name, mason_name = assert(pair[1]), assert(pair[2]) - return string.format( - "| [%s](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#%s) | %s |", - lspconfig_name, - lspconfig_name, - mason_name + if not pcall(require, ("lspconfig.server_configurations.%s"):format(lspconfig_name)) then + return Optional.empty() + end + return Optional.of( + string.format( + "| [%s](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#%s) | %s |", + lspconfig_name, + lspconfig_name, + mason_name + ) ) end), _.sort_by(_.head), -- cgit v1.2.3-70-g09d2