neovim: add scripts to install lsp servers

This commit is contained in:
Hoang Nguyen 2021-10-05 00:42:41 +07:00
parent ef76692015
commit 1f973f3850
No known key found for this signature in database
GPG Key ID: 813CF484F4993419
16 changed files with 235 additions and 17 deletions

View File

@ -70,6 +70,7 @@ function M.lsp_conf()
-- Server configurations --
---------------------------
-- https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md
local servers_path = vim.fn.stdpath('data') .. '/lsp'
-- C/C++
lspconf.clangd.setup {
@ -121,9 +122,9 @@ function M.lsp_conf()
on_attach = on_attach,
capabilities = capabilities,
cmd = {
vim.fn.stdpath('data') .. '/lsp/lua-language-server/bin/Linux/lua-language-server',
'-E',
vim.fn.stdpath('data') .. '/lsp/lua-language-server/main.lua'
servers_path .. '/sumneko_lua/bin/Linux/lua-language-server',
'-E', '-e', 'LANG=en',
servers_path .. '/sumneko_lua/main.lua'
},
settings = {
Lua = {
@ -145,18 +146,41 @@ function M.lsp_conf()
lspconf.gopls.setup {
on_attach = on_attach,
capabilities = capabilities,
cmd = {'gopls', '--remote=auto'},
cmd = {servers_path .. '/gopls/gopls', '--remote=auto'},
init_options = {
usePlaceholders = true,
completeUnimported = true
}
}
-- Yaml
-- lspconf.yamlls.setup {
-- on_attach = on_attach,
-- capabilities = capabilities,
-- cmd = {servers_path .. '/yamlls/node_modules/.bin/yaml-language-server', '--stdio'},
-- settings = {
-- redhat = {telemetry = {enabled = false}},
-- yaml = {format = {bracketSpacing = true}}
-- }
-- }
-- Tailwind
-- lspconf.tailwindcss.setup {
-- on_attach = on_attach,
-- capabilities = capabilities,
-- cmd = {servers_path .. '/tailwindcss/node_modules/.bin/tailwindcss-language-server', '--stdio'},
-- settings = {
-- tailwindCSS = {
-- emmetCompletions = true
-- }
-- }
-- }
-- Emmet
if not lspconf.emmet_ls then
require('lspconfig/configs').emmet_ls = {
default_config = {
cmd = {'emmet-ls', '--stdio'},
cmd = {servers_path .. '/emmet_ls/node_modules/.bin/emmet-ls', '--stdio'},
filetypes = {'html', 'css'},
root_dir = function(fname)
return vim.loop.cwd()
@ -167,15 +191,32 @@ function M.lsp_conf()
end
lspconf.emmet_ls.setup {capabilities = capabilities}
-- HTML
lspconf.html.setup {
on_attach = on_attach,
capabilities = capabilities,
cmd = {servers_path .. '/vscode/node_modules/.bin/vscode-html-language-server', '--stdio'},
filetypes = {'html', 'markdown'}
}
-- Others
local servers = {
'dockerls', 'bashls', 'pyright', 'tsserver',
'html', 'jsonls', 'cmake', 'sqls', 'rust_analyzer'
rust_analyzer = {'rust-analyzer'},
sqls = {servers_path .. '/sqls/sqls'},
cmake = {servers_path .. '/cmake/venv/bin/cmake-language-server'},
bashls = {servers_path .. '/bashls/node_modules/.bin/bash-language-server', 'start'},
dockerls = {servers_path .. '/dockerls/node_modules/.bin/docker-langserver', '--stdio'},
jsonls = {servers_path .. '/vscode/node_modules/.bin/vscode-json-language-server', '--stdio'},
cssls = {servers_path .. '/vscode/node_modules/.bin/vscode-css-language-server', '--stdio'},
pyright = {servers_path .. '/pyright/node_modules/.bin/pyright-langserver', '--stdio'},
-- vimls = {servers_path .. '/vimls/node_modules/.bin/vim-language-server', '--stdio'},
tsserver = {servers_path .. '/tsserver/node_modules/.bin/typescript-language-server', '--stdio'}
}
for _, server in ipairs(servers) do
for server, _ in pairs(servers) do
lspconf[server].setup {
on_attach = on_attach,
capabilities = capabilities
capabilities = capabilities,
cmd = servers[server]
}
end

View File

@ -145,7 +145,7 @@ return packer.startup(function(use)
-- LSP --
---------
local lsp = require('modules.lsp')
use { -- TODO: scripts to install/update lsp servers
use {
'neovim/nvim-lspconfig',
event = 'BufReadPre',
wants = 'lsp_signature.nvim',
@ -154,7 +154,7 @@ return packer.startup(function(use)
}
use {
'nanotee/sqls.nvim',
ft = {'sql', 'mysql', 'plsql'},
ft = {'sql', 'mysql'},
wants = 'nvim-lspconfig',
config = lsp.sqls_conf
}

View File

@ -0,0 +1,32 @@
#!/bin/sh
# TODO: consider forking 'kabouzeid/nvim-lspinstall' or 'anott03/nvim-lspinstall'
# instead of running scripts
if [ "$#" -ne 1 ]; then
echo "Usage:"
printf " - %s server_name: install specified server\n" "$0"
printf " - %s -lsp: install all lsp servers\n" "$0"
printf " - %s -dap: install all dap servers\n" "$0"
printf " - %s -lint: install everything\n" "$0"
exit 1
fi
nvim_script_dir=${XDG_CONFIG_HOME:-$HOME/.config}/nvim/scripts
if [ "$1" = "-lsp" ]; then
find "${nvim_script_dir}/lsp" -type f -exec '{}' \;
elif [ "$1" = '-dap' ]; then
find "${nvim_script_dir}/dap" -type f -exec '{}' \;
elif [ "$1" = '-lint' ]; then
find "${nvim_script_dir}/lint" -type f -exec '{}' \;
elif [ "$1" = '-all' ]; then
find "${nvim_script_dir}" -mindepth 2 -type f -exec '{}' \;
else
# Each server should have an unique name
server_path=$(find "${nvim_script_dir}" -mindepth 2 -type f -name "$1" | head -n 1)
if [ -z "${server_path}" ]; then
echo "Incorrect server name."
exit 1
fi
exec ${server_path}
fi

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/bashls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install bash-language-server@latest
cd ${current_path}

View File

@ -0,0 +1,13 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/cmake"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
python3 -m venv ${server_path}/venv
${server_path}/venv/bin/pip3 install -U pip
${server_path}/venv/bin/pip3 install -U cmake-language-server
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/dockerls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install dockerfile-language-server-nodejs@latest
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/emmet_ls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install emmet-ls@latest
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/gopls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
GOPATH="${server_path}" GOBIN="${server_path}" go install golang.org/x/tools/gopls@latest
GOPATH="${server_path}" GOBIN="${server_path}" go clean -modcache
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/pyright"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install pyright@latest
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/sqls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
GOPATH="${server_path}" GOBIN="${server_path}" go install github.com/lighttiger2505/sqls@latest
GOPATH="${server_path}" GOBIN="${server_path}" go clean -modcache
cd ${current_path}

View File

@ -1,17 +1,17 @@
#!/bin/sh -e
current_path="$PWD"
luals_path="$HOME/.local/share/nvim/lsp/lua-language-server"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/sumneko_lua"
# Clone / Update
if [ -d "$luals_path" ]; then
cd $luals_path
if [ -d "${server_path}" ]; then
cd ${server_path}
git pull --rebase
else
git clone https://github.com/sumneko/lua-language-server.git $luals_path
git clone https://github.com/sumneko/lua-language-server.git ${server_path}
fi
cd $luals_path
cd ${server_path}
git submodule update --init --recursive
# Build
@ -23,4 +23,4 @@ cd ../..
# The build process automatically exports path to `~/.profile`
rm -rf ~/.profile
cd $current_path
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/tailwindcss"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install @tailwindcss/language-server
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/tsserver"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install typescript@latest typescript-language-server@latest
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/vimls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && yarn init -y || true
yarn add vim-language-server@latest
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/vscode"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && npm init -y --scope=lsp || true
npm install vscode-langservers-extracted@latest
cd ${current_path}

View File

@ -0,0 +1,12 @@
#!/bin/sh -e
current_path="$PWD"
server_path="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/lsp/yamlls"
[ ! -d "${server_path}" ] && mkdir -p "${server_path}"
cd ${server_path}
[ ! -f package.json ] && yarn init -y || true
yarn add yaml-language-server@latest
cd ${current_path}