diff options
| author | Ashkan Kiani <ashkan.k.kiani@gmail.com> | 2019-11-15 17:26:22 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-15 17:26:22 -0800 |
| commit | 5686a90890105e6271307e86b472f729af1cc4f8 (patch) | |
| tree | 7d691ac0e7ea2feb58c5862dd52a1c8bfbef6fb4 /lua/nvim_lsp/tsserver.lua | |
| parent | [docgen] Update README.md (diff) | |
| download | nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.tar nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.tar.gz nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.tar.bz2 nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.tar.lz nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.tar.xz nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.tar.zst nvim-lspconfig-5686a90890105e6271307e86b472f729af1cc4f8.zip | |
Redo installation. (#17)
* Redo installation.
Servers which want to be auto installed should specify
skeleton[name].install()
and it will be automatically added to the list of installable servers.
- Add :LspInstall and :LspInstallInfo
- Auto generate docs for servers with .install() available.
- Add util.npm_installer
- Refactor utf8 capabilities common config into a single function
- Add contribution notes.
- Also expose util.base_install_dir for other installers potentially
- Fix tsserver's arguments and add javascript filetypes
Diffstat (limited to 'lua/nvim_lsp/tsserver.lua')
| -rw-r--r-- | lua/nvim_lsp/tsserver.lua | 97 |
1 files changed, 20 insertions, 77 deletions
diff --git a/lua/nvim_lsp/tsserver.lua b/lua/nvim_lsp/tsserver.lua index e9f5031f..32c289da 100644 --- a/lua/nvim_lsp/tsserver.lua +++ b/lua/nvim_lsp/tsserver.lua @@ -1,76 +1,40 @@ local skeleton = require 'nvim_lsp/skeleton' local util = require 'nvim_lsp/util' local lsp = vim.lsp -local fn = vim.fn -local api = vim.api -local need_bins = util.need_bins - -local default_capabilities = lsp.protocol.make_client_capabilities() -default_capabilities.offsetEncoding = {"utf-8", "utf-16"} +local server_name = "tsserver" local bin_name = "typescript-language-server" -local install_dir = util.path.join(fn.stdpath("cache"), "nvim_lsp", "typescript-language-server") - -local function get_install_info() - local bin_dir = util.path.join(install_dir, "node_modules", ".bin") - local bins = { bin_dir = bin_dir; install_dir = install_dir; } - bins.tsserver = util.path.join(bin_dir, bin_name) - bins.is_installed = need_bins(bins.tsserver) - return bins -end - -local global_commands = { - TsServerInstall = { - function() - if get_install_info().is_installed then - return print('typescript-language-server is already installed') - end - skeleton.tsserver.install() - end; - description = 'Install typescript-language-server and its dependencies to stdpath("cache")/nvim_lsp/typescript-language-server'; - }; - TsServerInstallInfo = { - function() - local install_info = get_install_info() - if not install_info.is_installed then - return print('typescript-language-server is not installed') - end - print(vim.inspect(install_info)) - end; - description = 'Print installation infor for `typescript-language-server`' - } -}; - -util.create_module_commands("typescript-language-server", global_commands) - +local installer = util.npm_installer { + server_name = server_name; + packages = { "typescript-language-server" }; + binaries = {bin_name}; +} -skeleton.tsserver = { - default_config = { - cmd = {bin_name}; - filetypes = {"typescript", "typescriptreact", "typescript.tsx"}; +skeleton[server_name] = { + default_config = util.utf8_config { + cmd = {bin_name, "--stdio"}; + filetypes = {"javascript", "javascriptreact", "javascript.jsx", "typescript", "typescriptreact", "typescript.tsx"}; root_dir = util.root_pattern("package.json"); log_level = lsp.protocol.MessageType.Warning; settings = {}; - capabilities = default_capabilities; - on_init = function(client, result) - if result.offsetEncoding then - client.offset_encoding = result.offsetEncoding - end - end }; - commands = global_commands; on_new_config = function(new_config) - local install_info = get_install_info() + local install_info = installer.info() if install_info.is_installed then - new_config.cmd = {install_info.tsserver} + if type(new_config.cmd) == 'table' then + -- Try to preserve any additional args from upstream changes. + new_config.cmd[1] = install_info.binaries[bin_name] + else + new_config.cmd = {install_info.binaries[bin_name]} + end end end; docs = { description = [[ https://github.com/theia-ide/typescript-language-server -typescript-language-server can be installed via `:TsServerInstall` or by yourself with `npm`: +`typescript-language-server` can be installed via `:LspInstall tsserver` or by yourself with `npm`: ```sh npm install -g typescript-language-server ``` @@ -83,27 +47,6 @@ npm install -g typescript-language-server }; } -function skeleton.tsserver.install() - if not need_bins(bin_name) then return end - if not need_bins("sh", "npm", "mkdir", "cd") then - vim.api.nvim_err_writeln('Installation requires "sh", "npm", "mkdir", "cd"') - return - end - local install_info = get_install_info() - if install_info.is_installed then - return - end - local cmd = io.popen("sh", "w") - local install_script = ([[ -set -eo pipefail -mkdir -p "{{install_dir}}" -cd "{{install_dir}}" -npm install typescript-language-server -]]):gsub("{{(%S+)}}", install_info) - print(install_script) - cmd:write(install_script) - cmd:close() -end - -skeleton.tsserver.get_install_info = get_install_info +skeleton[server_name].install = installer.install +skeleton[server_name].install_info = installer.info -- vim:et ts=2 sw=2 |
