aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--autoload/lsp_settings.vim21
-rw-r--r--autoload/lsp_settings/profile.vim43
-rw-r--r--installer/install-eslint-language-server.cmd13
-rwxr-xr-xinstaller/install-eslint-language-server.sh15
-rw-r--r--plugin/lsp_settings.vim1
-rw-r--r--settings.json12
-rw-r--r--settings/eslint-language-server.vim32
8 files changed, 137 insertions, 3 deletions
diff --git a/README.md b/README.md
index 8dae690..e55d929 100644
--- a/README.md
+++ b/README.md
@@ -179,8 +179,11 @@ If you have some Language Servers and want to use specified the server:
```vim
let g:lsp_settings_perl = 'slp'
+let g:lsp_settings_typescript = ['typescript-language-server', 'eslint-language-server']
```
+When the servers are specifed in a list, these will be started at all.
+
If you want to disable Language Server:
```vim
diff --git a/autoload/lsp_settings.vim b/autoload/lsp_settings.vim
index d9a6a5b..f1b163e 100644
--- a/autoload/lsp_settings.vim
+++ b/autoload/lsp_settings.vim
@@ -391,6 +391,8 @@ function! s:vim_lsp_load_or_suggest(ft) abort
command! -nargs=1 LspRegisterServer autocmd User lsp_setup call lsp#register_server(<args>)
endif
+ let l:default = get(g:, 'lsp_settings_' . a:ft, '')
+
let l:found = 0
let l:disabled = 0
@@ -399,10 +401,19 @@ function! s:vim_lsp_load_or_suggest(ft) abort
let l:disabled += 1
continue
endif
- let l:default = get(g:, 'lsp_settings_' . a:ft, '')
- if !empty(l:default) && l:default != l:server.command
+
+ if type(l:default) ==# v:t_list
+ if len(l:default) ># 0 && index(l:default, l:server.command) == -1
+ continue
+ endif
+ elseif type(l:default) ==# v:t_string
+ if !empty(l:default) && l:default != l:server.command
+ continue
+ endif
+ else
continue
endif
+
let l:command = lsp_settings#get(l:server.command, 'cmd', [])
if empty(l:command) && !lsp_settings#executable(l:server.command)
let l:script = printf('%s/%s.vim', s:checkers_dir, l:server.command)
@@ -429,7 +440,11 @@ function! s:vim_lsp_load_or_suggest(ft) abort
exe 'source' l:script
let l:found += 1
let s:ftmap[a:ft] = 1
- break
+
+ " If default server is specified as list, continue to look next.
+ if type(l:default) !=# v:t_list
+ break
+ endif
endif
endfor
diff --git a/autoload/lsp_settings/profile.vim b/autoload/lsp_settings/profile.vim
index a035032..98bf7b2 100644
--- a/autoload/lsp_settings/profile.vim
+++ b/autoload/lsp_settings/profile.vim
@@ -29,3 +29,46 @@ function! lsp_settings#profile#edit_local() abort
setlocal nomodified
endif
endfunction
+
+let s:color_map = {
+\ 'exited': 'Error',
+\ 'starting': 'MoreMsg',
+\ 'failed': 'WarningMsg',
+\ 'running': 'Keyword',
+\ 'not running': 'NonText'
+\}
+
+function! lsp_settings#profile#status() abort
+ let l:settings = lsp_settings#settings()
+ let l:active_servers = lsp#get_whitelisted_servers()
+
+ let l:servers = []
+ for l:ft in keys(l:settings)
+ for l:v in l:settings[l:ft]
+ if index(l:servers, l:v.command) ==# -1
+ call add(l:servers, l:v.command)
+ endif
+ endfor
+ endfor
+
+ for l:server in uniq(sort(l:servers))
+ if index(l:active_servers, l:server) != -1
+ let l:status = lsp#get_server_status(l:server)
+ echon l:server . ': '
+ exec 'echohl' s:color_map[l:status]
+ echon l:status
+ echohl None
+ elseif lsp_settings#executable(l:server)
+ echon l:server . ': '
+ echohl vimFilter
+ echon 'not running'
+ echohl None
+ else
+ echon l:server . ': '
+ echohl vimOption
+ echon 'not installed'
+ echohl None
+ endif
+ echo ''
+ endfor
+endfunction
diff --git a/installer/install-eslint-language-server.cmd b/installer/install-eslint-language-server.cmd
new file mode 100644
index 0000000..846638d
--- /dev/null
+++ b/installer/install-eslint-language-server.cmd
@@ -0,0 +1,13 @@
+@echo off
+
+git clone "https://github.com/microsoft/vscode-eslint" .
+git checkout release/1.9.1
+call npm install
+call npm run compile:server
+
+echo @echo off ^
+
+node %%~dp0\server\out\eslintServer.js --stdio %%* ^
+
+> eslint-language-server.cmd
+
diff --git a/installer/install-eslint-language-server.sh b/installer/install-eslint-language-server.sh
new file mode 100755
index 0000000..05beeb3
--- /dev/null
+++ b/installer/install-eslint-language-server.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+git clone "https://github.com/microsoft/vscode-eslint" .
+git checkout release/1.9.1
+npm install
+npm run compile:server
+
+cat <<EOF >eslint-language-server
+#!/usr/bin/env bash
+
+DIR=\$(cd \$(dirname \$0); pwd)
+node \$DIR/server/out/eslintServer.js --stdio \$*
+EOF
+
+chmod +x eslint-language-server
diff --git a/plugin/lsp_settings.vim b/plugin/lsp_settings.vim
index 5898982..ed9cc73 100644
--- a/plugin/lsp_settings.vim
+++ b/plugin/lsp_settings.vim
@@ -10,6 +10,7 @@ let g:lsp_settings_root_markers = get(g:, 'lsp_settings_root_markers', [
\ '.bzr/'
\ ])
+command! -nargs=0 LspSettingsStatus call lsp_settings#profile#status()
command! -nargs=0 LspSettingsLocalEdit call lsp_settings#profile#edit_local()
call lsp_settings#init()
diff --git a/settings.json b/settings.json
index b132865..a47845d 100644
--- a/settings.json
+++ b/settings.json
@@ -241,6 +241,12 @@
"requires": [
"npm"
]
+ },
+ {
+ "command": "eslint-language-server",
+ "requires": [
+ "git", "npm"
+ ]
}
],
"javascriptreact": [
@@ -557,6 +563,12 @@
"requires": [
"npm"
]
+ },
+ {
+ "command": "eslint-language-server",
+ "requires": [
+ "git", "npm"
+ ]
}
],
"typescriptreact": [
diff --git a/settings/eslint-language-server.vim b/settings/eslint-language-server.vim
new file mode 100644
index 0000000..eed9082
--- /dev/null
+++ b/settings/eslint-language-server.vim
@@ -0,0 +1,32 @@
+augroup vimlsp_settings_eslint_language_server
+ au!
+ LspRegisterServer {
+ \ 'name': 'eslint-language-server',
+ \ 'cmd': {server_info->lsp_settings#get('eslint-language-server', 'cmd', [lsp_settings#exec_path('eslint-language-server'), '--stdio'])},
+ \ 'root_uri':{server_info->lsp_settings#get('eslint-language-server', 'root_uri', lsp_settings#root_uri(['package.json', 'tsconfig.json']))},
+ \ 'initialization_options': lsp_settings#get('eslint-language-server', 'initialization_options', {'diagnostics': 'true'}),
+ \ 'whitelist': lsp_settings#get('eslint-language-server', 'whitelist', ['javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'typescript.tsx']),
+ \ 'blacklist': lsp_settings#get('eslint-language-server', 'blacklist', []),
+ \ 'config': lsp_settings#get('eslint-language-server', 'config', lsp_settings#server_config('eslint-language-server')),
+ \ 'workspace_config': {
+ \ 'validate': v:true,
+ \ 'packageManager': 'npm',
+ \ 'autoFix': v:true,
+ \ 'autoFixOnSave': v:true,
+ \ 'options': {},
+ \ 'run': 'onType',
+ \ 'nodePath': v:null,
+ \ 'quiet': v:false,
+ \ 'workspaceFolder': v:null,
+ \ 'codeAction': {
+ \ 'disableRuleComment': {
+ \ 'enable': v:true,
+ \ 'location': 'separateLine'
+ \ },
+ \ 'showDocumentation': {
+ \ 'enable': v:true
+ \ }
+ \ }
+ \ },
+ \ }
+augroup END