diff options
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | autoload/lsp_settings.vim | 21 | ||||
-rw-r--r-- | autoload/lsp_settings/profile.vim | 43 | ||||
-rw-r--r-- | installer/install-eslint-language-server.cmd | 13 | ||||
-rwxr-xr-x | installer/install-eslint-language-server.sh | 15 | ||||
-rw-r--r-- | plugin/lsp_settings.vim | 1 | ||||
-rw-r--r-- | settings.json | 12 | ||||
-rw-r--r-- | settings/eslint-language-server.vim | 32 |
8 files changed, 137 insertions, 3 deletions
@@ -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 |