|  | 
|  | 1 | +local configs = require 'nvim_lsp/configs' | 
|  | 2 | +local util = require 'nvim_lsp/util' | 
|  | 3 | +local server_name = 'omnisharp' | 
|  | 4 | +local bin_name = 'run' | 
|  | 5 | + | 
|  | 6 | +local function make_installer() | 
|  | 7 | +  local install_dir = util.path.join{util.base_install_dir, server_name} | 
|  | 8 | + | 
|  | 9 | +  local url = 'linux-x64' | 
|  | 10 | + | 
|  | 11 | +  if vim.fn.has('win32') == 1 then | 
|  | 12 | +    url = 'win-x64' | 
|  | 13 | +    bin_name = 'Omnisharp.exe' | 
|  | 14 | +  elseif vim.fn.has('mac') == 1 then | 
|  | 15 | +    url = 'osx' | 
|  | 16 | +  end | 
|  | 17 | +  local bin_path = util.path.join{install_dir, bin_name} | 
|  | 18 | + | 
|  | 19 | +  local download_target = util.path.join{install_dir, string.format("omnisharp-%s.zip", url)} | 
|  | 20 | +  local extract_cmd = string.format("unzip '%s' -d '%s'", download_target, install_dir) | 
|  | 21 | +  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) | 
|  | 22 | +  local make_executable_cmd = string.format("chmod u+x '%s'", bin_path) | 
|  | 23 | + | 
|  | 24 | +  local X = {} | 
|  | 25 | +  function X.install() | 
|  | 26 | +    local install_info = X.info() | 
|  | 27 | +    if install_info.is_installed then | 
|  | 28 | +      print(server_name, "is already installed") | 
|  | 29 | +      return | 
|  | 30 | +    end | 
|  | 31 | +    if not (util.has_bins("curl")) then | 
|  | 32 | +      error('Need "curl" to install this.') | 
|  | 33 | +      return | 
|  | 34 | +    end | 
|  | 35 | +    vim.fn.mkdir(install_dir, 'p') | 
|  | 36 | +    vim.fn.system(download_cmd) | 
|  | 37 | +    vim.fn.system(extract_cmd) | 
|  | 38 | +    vim.fn.system(make_executable_cmd) | 
|  | 39 | +  end | 
|  | 40 | +  function X.info() | 
|  | 41 | +    return { | 
|  | 42 | +      is_installed = util.path.exists(bin_path); | 
|  | 43 | +      install_dir = install_dir; | 
|  | 44 | +      cmd = { bin_path, "--languageserver" }; | 
|  | 45 | +    } | 
|  | 46 | +  end | 
|  | 47 | +  function X.configure(config) | 
|  | 48 | +    local install_info = X.info() | 
|  | 49 | +    if install_info.is_installed then | 
|  | 50 | +      config.cmd = install_info.cmd | 
|  | 51 | +    end | 
|  | 52 | +  end | 
|  | 53 | +  return X | 
|  | 54 | +end | 
|  | 55 | + | 
|  | 56 | +local installer = make_installer() | 
|  | 57 | + | 
|  | 58 | +configs[server_name] = { | 
|  | 59 | +  default_config = { | 
|  | 60 | +    cmd = installer.info().cmd; | 
|  | 61 | +    filetypes = {"cs", "vb"}; | 
|  | 62 | +    root_dir = util.root_pattern("*.csproj", "*.sln"); | 
|  | 63 | +    on_new_config = function(config) | 
|  | 64 | +      installer.configure(config) | 
|  | 65 | +    end; | 
|  | 66 | +    init_options = { | 
|  | 67 | +    }; | 
|  | 68 | +  }; | 
|  | 69 | +  -- on_new_config = function(new_config) end; | 
|  | 70 | +  -- on_attach = function(client, bufnr) end; | 
|  | 71 | +  docs = { | 
|  | 72 | +    description = [[ | 
|  | 73 | +https://github.com/omnisharp/omnisharp-roslyn | 
|  | 74 | +OmniSharp server based on Roslyn workspaces | 
|  | 75 | +]]; | 
|  | 76 | +    default_config = { | 
|  | 77 | +      root_dir = [[root_pattern(".csproj", ".sln", ".git")]]; | 
|  | 78 | +    }; | 
|  | 79 | +  }; | 
|  | 80 | +} | 
|  | 81 | + | 
|  | 82 | +configs[server_name].install = installer.install | 
|  | 83 | +configs[server_name].install_info = installer.info | 
|  | 84 | +-- vim:et ts=2 sw=2 | 
0 commit comments