aboutsummaryrefslogtreecommitdiffstats
path: root/lua/lspconfig/omnisharp.lua
diff options
context:
space:
mode:
authorHirokazu Hata <h.hata.ai.t@gmail.com>2020-09-06 17:49:21 +0900
committerHirokazu Hata <h.hata.ai.t@gmail.com>2020-09-06 17:49:21 +0900
commitddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de (patch)
treec301c7a765535dcb5387d76cc71e28d845dcce23 /lua/lspconfig/omnisharp.lua
parentMerge pull request #238 from steelsojka/angular-ls (diff)
downloadnvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.tar
nvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.tar.gz
nvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.tar.bz2
nvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.tar.lz
nvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.tar.xz
nvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.tar.zst
nvim-lspconfig-ddcd9e6aae50d6397e43e4fc9ba0cf7a82cc79de.zip
Rename nvim_lsp to lspconfig
Diffstat (limited to 'lua/lspconfig/omnisharp.lua')
-rw-r--r--lua/lspconfig/omnisharp.lua84
1 files changed, 84 insertions, 0 deletions
diff --git a/lua/lspconfig/omnisharp.lua b/lua/lspconfig/omnisharp.lua
new file mode 100644
index 00000000..a608537d
--- /dev/null
+++ b/lua/lspconfig/omnisharp.lua
@@ -0,0 +1,84 @@
+local configs = require 'lspconfig/configs'
+local util = require 'lspconfig/util'
+local server_name = 'omnisharp'
+local bin_name = 'run'
+
+local function make_installer()
+ local install_dir = util.path.join{util.base_install_dir, server_name}
+ local pid = vim.fn.getpid()
+ local url = 'linux-x64'
+
+ if vim.fn.has('win32') == 1 then
+ url = 'win-x64'
+ bin_name = 'Omnisharp.exe'
+ elseif vim.fn.has('mac') == 1 then
+ url = 'osx'
+ end
+ local bin_path = util.path.join{install_dir, bin_name}
+
+ local download_target = util.path.join{install_dir, string.format("omnisharp-%s.zip", url)}
+ local extract_cmd = string.format("unzip '%s' -d '%s'", download_target, install_dir)
+ local download_cmd = string.format('curl -fLo "%s" --create-dirs "https://github.com/OmniSharp/omnisharp-roslyn/releases/latest/download/omnisharp-%s.zip"', download_target, url)
+ local make_executable_cmd = string.format("chmod u+x '%s'", bin_path)
+
+ local X = {}
+ function X.install()
+ local install_info = X.info()
+ if install_info.is_installed then
+ print(server_name, "is already installed")
+ return
+ end
+ if not (util.has_bins("curl")) then
+ error('Need "curl" to install this.')
+ return
+ end
+ vim.fn.mkdir(install_dir, 'p')
+ vim.fn.system(download_cmd)
+ vim.fn.system(extract_cmd)
+ vim.fn.system(make_executable_cmd)
+ end
+ function X.info()
+ return {
+ is_installed = util.path.exists(bin_path);
+ install_dir = install_dir;
+ cmd = { bin_path, "--languageserver" , "--hostPID", tostring(pid)};
+ }
+ end
+ function X.configure(config)
+ local install_info = X.info()
+ if install_info.is_installed then
+ config.cmd = install_info.cmd
+ end
+ end
+ return X
+end
+
+local installer = make_installer()
+
+configs[server_name] = {
+ default_config = {
+ cmd = installer.info().cmd;
+ filetypes = {"cs", "vb"};
+ root_dir = util.root_pattern("*.csproj", "*.sln");
+ on_new_config = function(config)
+ installer.configure(config)
+ end;
+ init_options = {
+ };
+ };
+ -- on_new_config = function(new_config) end;
+ -- on_attach = function(client, bufnr) end;
+ docs = {
+ description = [[
+https://github.com/omnisharp/omnisharp-roslyn
+OmniSharp server based on Roslyn workspaces
+]];
+ default_config = {
+ root_dir = [[root_pattern(".csproj", ".sln", ".git")]];
+ };
+ };
+}
+
+configs[server_name].install = installer.install
+configs[server_name].install_info = installer.info
+-- vim:et ts=2 sw=2