Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add omnisharp language server #291

Merged
merged 5 commits into from
Aug 30, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions lua/nvim_lsp/omnisharp.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
local configs = require 'nvim_lsp/configs'
local util = require 'nvim_lsp/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 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" };
}
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
2 changes: 1 addition & 1 deletion lua/nvim_lsp/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ function M.root_pattern(...)
local patterns = vim.tbl_flatten {...}
local function matcher(path)
for _, pattern in ipairs(patterns) do
if M.path.exists(M.path.join(path, pattern)) then
if M.path.exists(vim.fn.glob(M.path.join(path, pattern))) then
return path
end
end
Expand Down