diff options
-rw-r--r-- | autoload/lsp_settings.vim | 22 | ||||
-rw-r--r-- | installer/npm_install.cmd | 7 | ||||
-rwxr-xr-x | installer/npm_install.sh | 15 | ||||
-rw-r--r-- | settings/clojure-lsp.vim | 3 | ||||
-rw-r--r-- | settings/typescript-language-server.vim | 2 | ||||
-rwxr-xr-x | test/run.sh | 31 | ||||
-rwxr-xr-x | test/send.py | 42 |
7 files changed, 29 insertions, 93 deletions
diff --git a/autoload/lsp_settings.vim b/autoload/lsp_settings.vim index f8c145d..d59d4ed 100644 --- a/autoload/lsp_settings.vim +++ b/autoload/lsp_settings.vim @@ -24,23 +24,27 @@ function! s:first_one(cmd) abort endfunction function! lsp_settings#exec_path(cmd) abort + let l:s = split(a:cmd, ':') + let l:dir = len(l:s) >= 1 ? l:s[0] : '' + let l:cmd = len(l:s) >= 2 ? l:s[1] : l:s[0] + let l:paths = split($PATH, has('win32') ? ';' : ':') let l:paths = join(l:paths, ',') - let l:path = globpath(l:paths, a:cmd) + let l:path = globpath(l:paths, l:cmd) if !has('win32') if !empty(l:path) return s:first_one(l:path) endif else - let l:path = globpath(l:paths, a:cmd . '.exe') + let l:path = globpath(l:paths, l:cmd . '.exe') if !empty(l:path) return s:first_one(l:path) endif - let l:path = globpath(l:paths, a:cmd . '.cmd') + let l:path = globpath(l:paths, l:cmd . '.cmd') if !empty(l:path) return s:first_one(l:path) endif - let l:path = globpath(l:paths, a:cmd . '.bat') + let l:path = globpath(l:paths, l:cmd . '.bat') if !empty(l:path) return s:first_one(l:path) endif @@ -51,19 +55,19 @@ function! lsp_settings#exec_path(cmd) abort let l:paths = join(l:paths, ',') . ',' endif let l:servers_dir = get(g:, 'lsp_settings_servers_dir', s:servers_dir) - let l:paths .= l:servers_dir . '/' . a:cmd + let l:paths .= l:servers_dir . '/' . l:dir if !has('win32') - return s:first_one(globpath(l:paths, a:cmd)) + return s:first_one(globpath(l:paths, l:cmd)) endif - let l:path = globpath(l:paths, a:cmd . '.exe') + let l:path = globpath(l:paths, l:cmd . '.exe') if !empty(l:path) return s:first_one(l:path) endif - let l:path = globpath(l:paths, a:cmd . '.cmd') + let l:path = globpath(l:paths, l:cmd . '.cmd') if !empty(l:path) return s:first_one(l:path) endif - let l:path = globpath(l:paths, a:cmd . '.bat') + let l:path = globpath(l:paths, l:cmd . '.bat') if !empty(l:path) return s:first_one(l:path) endif diff --git a/installer/npm_install.cmd b/installer/npm_install.cmd index 5f1d9bb..8521869 100644 --- a/installer/npm_install.cmd +++ b/installer/npm_install.cmd @@ -3,9 +3,12 @@ if "x%1" equ "x" goto :EOF
if "x%2" equ "x" goto :EOF
-call npm init -y
+if not exist package.json (
+ call npm init -y
+
+ echo {"name":""}>package.json
+)
-echo {"name":""}>package.json
call npm install "%2"
diff --git a/installer/npm_install.sh b/installer/npm_install.sh index 198666c..84073da 100755 --- a/installer/npm_install.sh +++ b/installer/npm_install.sh @@ -5,13 +5,14 @@ set -e -npm init -y - -# Avoid the problem of not being able to install the same package as name in package.json. -# Create an empty package.json. -cat <<EOF >package.json -{"name": ""} -EOF +# Supporting multiple npm packages(e.g. typescript-language-server uses typescript-language-server and tsserver). +# If package.json exists, skip calling npm init. +if [ ! -f package.json ]; then + # Avoid the problem of not being able to install the same package as name in package.json. + # Create an empty package.json. + npm init -y + echo '{"name": ""}' >package.json +fi npm install "$2" ln -s "./node_modules/.bin/$1" . diff --git a/settings/clojure-lsp.vim b/settings/clojure-lsp.vim index f50e637..2b96ee9 100644 --- a/settings/clojure-lsp.vim +++ b/settings/clojure-lsp.vim @@ -3,7 +3,8 @@ augroup vimlsp_settings_clojure_lsp LspRegisterServer { \ 'name': 'clojure-lsp', \ 'cmd': {server_info->lsp_settings#get('clojure-lsp', 'cmd', [lsp_settings#exec_path('clojure-lsp')])}, - \ 'root_uri':{server_info->lsp_settings#get('clojure-lsp', 'root_uri', lsp_settings#root_uri(['.git/']))}, + \ 'root_uri':{server_info->lsp_settings#get('clojure-lsp', 'root_uri', lsp_settings#root_uri([ + \ '.lein/', '.shadow-cljs/', '.git/', 'project.clj', 'deps.edn', 'shadow-cljs.edn']))}, \ 'initialization_options': lsp_settings#get('clojure-lsp', 'initialization_options', v:null), \ 'whitelist': lsp_settings#get('clojure-lsp', 'whitelist', ['clojure']), \ 'blacklist': lsp_settings#get('clojure-lsp', 'blacklist', []), diff --git a/settings/typescript-language-server.vim b/settings/typescript-language-server.vim index 534a151..a75567c 100644 --- a/settings/typescript-language-server.vim +++ b/settings/typescript-language-server.vim @@ -2,7 +2,7 @@ augroup vimlsp_settings_typescript_language_server au! LspRegisterServer { \ 'name': 'typescript-language-server', - \ 'cmd': {server_info->lsp_settings#get('typescript-language-server', 'cmd', [lsp_settings#exec_path('typescript-language-server'), '--stdio', '--tsserver-path', lsp_settings#exec_path('tsserver')])}, + \ 'cmd': {server_info->lsp_settings#get('typescript-language-server', 'cmd', [lsp_settings#exec_path('typescript-language-server'), '--stdio', '--tsserver-path', lsp_settings#exec_path('typescript-language-server:tsserver')])}, \ 'root_uri':{server_info->lsp_settings#get('typescript-language-server', 'root_uri', lsp_settings#root_uri(['.git/', 'package.json']))}, \ 'initialization_options': lsp_settings#get('typescript-language-server', 'initialization_options', {"diagnostics": "true"}), \ 'whitelist': lsp_settings#get('typescript-language-server', 'whitelist', ['javascript', 'javascriptreact', 'typescript', 'typescriptreact']), diff --git a/test/run.sh b/test/run.sh deleted file mode 100755 index 7da9443..0000000 --- a/test/run.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -set -e - -usage() { - cat <<USAGE -Usage: $0 [pattern] [args] -Examples -$0 pyls -$0 "pyls|kotlin" -$0 bash start -USAGE -} - -if [ $# == 0 ]; then - usage - exit 1 -fi - -test_installer() { - set -e - "./installer/install-$1.sh" - ./test/send.py | "./servers/$1/$1" $2 - ret="$?" - printf "\n\nresult=%s" $ret -} -export -f test_installer - -jq ".[][].command" -r -c <./settings.json | sort | uniq | - grep -E "$1" | - xargs -I% bash -c "test_installer % $2" diff --git a/test/send.py b/test/send.py deleted file mode 100755 index 78b89aa..0000000 --- a/test/send.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -import json -import sys - - -def send(message: dict): - raw = json.dumps(message) - message = "Content-Length: " + str(len(raw)) + "\r\n\r\n" + raw - sys.stdout.write(message) - - -initialize = { - "jsonrpc": "2.0", - "id": 1, - "method": "initialize", - "params": {"processId": None, "rootUri": None, "capabilities": {}}, -} -send(initialize) - -initialized = { - "jsonrpc": "2.0", - "id": 2, - "method": "initialized", - "params": {}, -} -send(initialized) - -shutdown = { - "jsonrpc": "2.0", - "id": 3, - "method": "shutdown", - "params": {}, -} -send(shutdown) - -_exit = { - "jsonrpc": "2.0", - "id": 4, - "method": "exit", - "params": {}, -} -send(_exit) |