aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/lsp_settings.vim22
-rw-r--r--installer/npm_install.cmd7
-rwxr-xr-xinstaller/npm_install.sh15
-rw-r--r--settings/clojure-lsp.vim3
-rw-r--r--settings/typescript-language-server.vim2
-rwxr-xr-xtest/run.sh31
-rwxr-xr-xtest/send.py42
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)