Merge pull request #3117 from zoonfafer/vim-vimls
Add vim-language-server linter support
This commit is contained in:
commit
36e5337e30
14 changed files with 195 additions and 0 deletions
61
ale_linters/vim/vimls.vim
Normal file
61
ale_linters/vim/vimls.vim
Normal file
|
@ -0,0 +1,61 @@
|
|||
" Author: Jeffrey Lau - https://github.com/zoonfafer
|
||||
" Description: Vim Language Server integration for ALE
|
||||
|
||||
call ale#Set('vim_vimls_executable', 'vim-language-server')
|
||||
call ale#Set('vim_vimls_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
call ale#Set('vim_vimls_config', {})
|
||||
|
||||
function! ale_linters#vim#vimls#GetProjectRoot(buffer) abort
|
||||
let l:trigger_file_candidates = [
|
||||
\ '.vimrc',
|
||||
\ 'init.vim',
|
||||
\]
|
||||
|
||||
for l:candidate in l:trigger_file_candidates
|
||||
let l:trigger_file = fnamemodify(bufname(a:buffer), ':t')
|
||||
|
||||
if l:trigger_file is# l:candidate
|
||||
return fnamemodify(
|
||||
\ bufname(a:buffer),
|
||||
\ ':h',
|
||||
\)
|
||||
endif
|
||||
endfor
|
||||
|
||||
let l:trigger_dir_candidates = [
|
||||
\ 'autoload',
|
||||
\ 'plugin',
|
||||
\ '.git',
|
||||
\]
|
||||
|
||||
let l:path_upwards = ale#path#Upwards(fnamemodify(bufname(a:buffer), ':p:h'))
|
||||
|
||||
for l:path in l:path_upwards
|
||||
for l:candidate in l:trigger_dir_candidates
|
||||
let l:trigger_dir = ale#path#Simplify(
|
||||
\ l:path . '/' . l:candidate,
|
||||
\)
|
||||
|
||||
if isdirectory(l:trigger_dir)
|
||||
return fnamemodify(
|
||||
\ l:trigger_dir,
|
||||
\ ':p:h:h',
|
||||
\)
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('vim', {
|
||||
\ 'name': 'vimls',
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'lsp_config': {b -> ale#Var(b, 'vim_vimls_config')},
|
||||
\ 'executable': {b -> ale#node#FindExecutable(b, 'vim_vimls', [
|
||||
\ 'node_modules/.bin/vim-language-server',
|
||||
\ ])},
|
||||
\ 'command': '%e --stdio',
|
||||
\ 'language': 'vim',
|
||||
\ 'project_root': function('ale_linters#vim#vimls#GetProjectRoot'),
|
||||
\})
|
|
@ -485,6 +485,7 @@ Notes:
|
|||
* `vcom`
|
||||
* `xvhdl`
|
||||
* Vim
|
||||
* `vimls`
|
||||
* `vint`
|
||||
* Vim help^
|
||||
* `alex`!!
|
||||
|
|
|
@ -2,6 +2,61 @@
|
|||
ALE Vim Integration *ale-vim-options*
|
||||
|
||||
|
||||
===============================================================================
|
||||
vimls *ale-vim-vimls*
|
||||
|
||||
The `vim-language-server` is the engine that powers VimL editor support
|
||||
using the Language Server Protocol. See the installation instructions:
|
||||
https://github.com/iamcco/vim-language-server#install
|
||||
|
||||
g:ale_vim_vimls_executable *g:ale_vim_vimls_executable*
|
||||
*b:ale_vim_vimls_executable*
|
||||
Type: |String|
|
||||
Default: `'vim-language-server'`
|
||||
|
||||
This option can be set to change the executable path for vimls.
|
||||
|
||||
|
||||
g:ale_vim_vimls_config *g:ale_vim_vimls_config*
|
||||
*b:ale_vim_vimls_config*
|
||||
Type: |Dictionary|
|
||||
Default: `{}`
|
||||
|
||||
Dictionary containing configuration settings that will be passed to the
|
||||
language server. For example: >
|
||||
{
|
||||
\ 'vim': {
|
||||
\ 'iskeyword': '@,48-57,_,192-255,-#',
|
||||
\ 'vimruntime': '',
|
||||
\ 'runtimepath': '',
|
||||
\ 'diagnostic': {
|
||||
\ 'enable': v:true
|
||||
\ },
|
||||
\ 'indexes': {
|
||||
\ 'runtimepath': v:true,
|
||||
\ 'gap': 100,
|
||||
\ 'count': 3,
|
||||
\ 'projectRootPatterns' : ['.git', 'autoload', 'plugin']
|
||||
\ },
|
||||
\ 'suggest': {
|
||||
\ 'fromVimruntime': v:true,
|
||||
\ 'fromRuntimepath': v:false
|
||||
\ },
|
||||
\ }
|
||||
\}
|
||||
<
|
||||
Consult the vim-language-server documentation for more information about
|
||||
settings.
|
||||
|
||||
|
||||
g:ale_vim_vimls_use_global *g:ale_vim_vimls_use_global*
|
||||
*b:ale_vim_vimls_use_global*
|
||||
Type: |Number|
|
||||
Default: `get(g:, 'ale_use_global_executables', 0)`
|
||||
|
||||
See |ale-integrations-local-executables|
|
||||
|
||||
|
||||
===============================================================================
|
||||
vint *ale-vim-vint*
|
||||
|
||||
|
|
|
@ -2655,6 +2655,7 @@ documented in additional help files.
|
|||
vcom..................................|ale-vhdl-vcom|
|
||||
xvhdl.................................|ale-vhdl-xvhdl|
|
||||
vim.....................................|ale-vim-options|
|
||||
vimls.................................|ale-vim-vimls|
|
||||
vint..................................|ale-vim-vint|
|
||||
vim help................................|ale-vim-help-options|
|
||||
write-good............................|ale-vim-help-write-good|
|
||||
|
|
|
@ -494,6 +494,7 @@ formatting.
|
|||
* [vcom](https://www.mentor.com/products/fv/questa/)
|
||||
* [xvhdl](https://www.xilinx.com/products/design-tools/vivado.html)
|
||||
* Vim
|
||||
* [vimls](https://github.com/iamcco/vim-language-server)
|
||||
* [vint](https://github.com/Kuniwak/vint)
|
||||
* Vim help
|
||||
* [alex](https://github.com/wooorm/alex) :warning: :floppy_disk:
|
||||
|
|
76
test/command_callback/test_vim_vimls.vader
Normal file
76
test/command_callback/test_vim_vimls.vader
Normal file
|
@ -0,0 +1,76 @@
|
|||
" Author: Jeffrey Lau https://github.com/zoonfafer
|
||||
" Description: Tests for the Vim vimls linter
|
||||
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('vim', 'vimls')
|
||||
|
||||
After:
|
||||
if isdirectory(g:dir . '/.git')
|
||||
call delete(g:dir . '/.git', 'd')
|
||||
endif
|
||||
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(should set correct defaults):
|
||||
AssertLinter 'vim-language-server', ale#Escape('vim-language-server') . ' --stdio'
|
||||
|
||||
Execute(should set correct LSP values):
|
||||
call ale#test#SetFilename('vim_fixtures/path_with_autoload/test.vim')
|
||||
AssertLSPLanguage 'vim'
|
||||
AssertLSPOptions {}
|
||||
AssertLSPConfig {}
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/vim_fixtures/path_with_autoload')
|
||||
|
||||
Execute(should set correct project for .git/):
|
||||
let b:parent_dir = ale#path#Simplify(g:dir . '/..')
|
||||
let b:git_dir = b:parent_dir . '/.git'
|
||||
|
||||
call ale#test#SetFilename('vim_fixtures/test.vim')
|
||||
|
||||
if !isdirectory(b:git_dir)
|
||||
call mkdir(b:git_dir)
|
||||
endif
|
||||
|
||||
AssertLSPProject ale#path#Simplify(b:parent_dir)
|
||||
|
||||
call delete(b:git_dir, 'd')
|
||||
unlet! b:git_dir
|
||||
|
||||
Execute(should set correct project for plugin/):
|
||||
call ale#test#SetFilename('vim_fixtures/path_with_plugin/test.vim')
|
||||
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/vim_fixtures/path_with_plugin')
|
||||
|
||||
Execute(should accept configuration settings):
|
||||
AssertLSPConfig {}
|
||||
|
||||
let b:ale_vim_vimls_config = {'vim': {'foobar': v:true}}
|
||||
AssertLSPConfig {'vim': {'foobar': v:true}}
|
||||
|
||||
Execute(should set correct project for .vimrc):
|
||||
call ale#test#SetFilename('vim_fixtures/path_with_vimrc/.vimrc')
|
||||
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/vim_fixtures/path_with_vimrc')
|
||||
|
||||
Execute(should set correct project for init.vim):
|
||||
call ale#test#SetFilename('vim_fixtures/path_with_initvim/init.vim')
|
||||
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/vim_fixtures/path_with_initvim')
|
||||
|
||||
Execute(should use the local executable when available):
|
||||
call ale#test#SetFilename('vim_fixtures/file.vim')
|
||||
|
||||
AssertLinter ale#path#Simplify(g:dir . '/vim_fixtures/node_modules/.bin/vim-language-server'),
|
||||
\ ale#Escape(ale#path#Simplify(g:dir . '/vim_fixtures/node_modules/.bin/vim-language-server')) . ' --stdio'
|
||||
|
||||
Execute(should let the global executable to be used):
|
||||
let g:ale_vim_vimls_use_global = 1
|
||||
call ale#test#SetFilename('vim_fixtures/file.vim')
|
||||
|
||||
AssertLinter 'vim-language-server',
|
||||
\ ale#Escape('vim-language-server') . ' --stdio'
|
||||
|
||||
Execute(should let the executable to be configured):
|
||||
let g:ale_vim_vimls_executable = 'foobar'
|
||||
|
||||
AssertLinter 'foobar', ale#Escape('foobar') . ' --stdio'
|
0
test/command_callback/vim_fixtures/node_modules/.bin/vim-language-server
generated
vendored
Normal file
0
test/command_callback/vim_fixtures/node_modules/.bin/vim-language-server
generated
vendored
Normal file
Reference in a new issue