Add support for ink-language-server
This commit add support for ink-language-server, which it does by largely copying and pasting from the pure-language-server PR that was merged recently. The most interesting things to note are: - ink-language-server is distributed upstream via npm, which is why we search through node_modules - With some coaxing, it can be installed globally - which is why we search for a global binary. - Ink is a funky language, and users will likely need to add initialization options. - I am not incredibly familiar with vimscript; and I may not have done some of the buffer searching correctly.
This commit is contained in:
parent
dd1e1025b8
commit
ab0bf61512
7 changed files with 103 additions and 0 deletions
35
ale_linters/ink/ls.vim
Normal file
35
ale_linters/ink/ls.vim
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
" Author: Andreww Hayworth <ahayworth@gmail.com>
|
||||||
|
" Description: Integrate ALE with ink-language-server
|
||||||
|
|
||||||
|
call ale#Set('ink_ls_executable', 'ink-language-server')
|
||||||
|
call ale#Set('ink_ls_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('ink_ls_initialization_options', {})
|
||||||
|
|
||||||
|
function! ale_linters#ink#ls#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'ink_ls', [
|
||||||
|
\ 'ink-language-server',
|
||||||
|
\ 'node_modules/.bin/ink-language-server',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ink#ls#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#ink#ls#GetExecutable(a:buffer)
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' --stdio'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ink#ls#FindProjectRoot(buffer) abort
|
||||||
|
let l:main_file = get(ale#Var(a:buffer, 'ink_ls_initialization_options'), 'mainStoryPath', 'main.ink')
|
||||||
|
let l:config = ale#path#ResolveLocalPath(a:buffer, l:main_file, expand('#' . a:buffer . ':p'))
|
||||||
|
|
||||||
|
return ale#path#Dirname(l:config)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ink', {
|
||||||
|
\ 'name': 'ink-language-server',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': function('ale_linters#ink#ls#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#ink#ls#GetCommand'),
|
||||||
|
\ 'project_root': function('ale_linters#ink#ls#FindProjectRoot'),
|
||||||
|
\ 'initialization_options': {b -> ale#Var(b, 'ink_ls_initialization_options')},
|
||||||
|
\})
|
40
doc/ale-ink.txt
Normal file
40
doc/ale-ink.txt
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
===============================================================================
|
||||||
|
ALE Ink Integration *ale-ink-options*
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
ink-language-server *ale-ink-language-server*
|
||||||
|
|
||||||
|
Ink Language Server
|
||||||
|
(https://github.com/ephraim/ink-language-server)
|
||||||
|
|
||||||
|
g:ale_ink_ls_executable g:ale_ink_ls_executable
|
||||||
|
b:ale_ink_ls_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `'ink-language-server'`
|
||||||
|
|
||||||
|
Ink language server executable.
|
||||||
|
|
||||||
|
g:ale_ink_ls_initialization_options
|
||||||
|
g:ale_ink_ls_initialization_options
|
||||||
|
b:ale_ink_ls_initialization_options
|
||||||
|
Type: |Dictionary|
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
Dictionary containing configuration settings that will be passed to the
|
||||||
|
language server at startup. For certain platforms and certain story
|
||||||
|
structures, the defaults will suffice. However, many projects will need to
|
||||||
|
change these settings - see the ink-language-server website for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
An example of setting non-default options:
|
||||||
|
{
|
||||||
|
\ 'ink': {
|
||||||
|
\ 'mainStoryPath': 'init.ink',
|
||||||
|
\ 'inklecateExecutablePath': '/usr/local/bin/inklecate',
|
||||||
|
\ 'runThroughMono': v:false
|
||||||
|
\ }
|
||||||
|
\}
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
|
@ -198,6 +198,8 @@ Notes:
|
||||||
* `write-good`
|
* `write-good`
|
||||||
* Idris
|
* Idris
|
||||||
* `idris`
|
* `idris`
|
||||||
|
* Ink
|
||||||
|
* `ink-language-server`
|
||||||
* ISPC
|
* ISPC
|
||||||
* `ispc`!!
|
* `ispc`!!
|
||||||
* Java
|
* Java
|
||||||
|
|
|
@ -2123,6 +2123,8 @@ documented in additional help files.
|
||||||
write-good............................|ale-html-write-good|
|
write-good............................|ale-html-write-good|
|
||||||
idris...................................|ale-idris-options|
|
idris...................................|ale-idris-options|
|
||||||
idris.................................|ale-idris-idris|
|
idris.................................|ale-idris-idris|
|
||||||
|
ink.....................................|ale-ink-options|
|
||||||
|
ink-language-server...................|ale-ink-language-server|
|
||||||
ispc....................................|ale-ispc-options|
|
ispc....................................|ale-ispc-options|
|
||||||
ispc..................................|ale-ispc-ispc|
|
ispc..................................|ale-ispc-ispc|
|
||||||
java....................................|ale-java-options|
|
java....................................|ale-java-options|
|
||||||
|
|
|
@ -207,6 +207,8 @@ formatting.
|
||||||
* [write-good](https://github.com/btford/write-good)
|
* [write-good](https://github.com/btford/write-good)
|
||||||
* Idris
|
* Idris
|
||||||
* [idris](http://www.idris-lang.org/)
|
* [idris](http://www.idris-lang.org/)
|
||||||
|
* Ink
|
||||||
|
* [ink-language-server](https://github.com/ephread/ink-language-server)
|
||||||
* ISPC
|
* ISPC
|
||||||
* [ispc](https://ispc.github.io/) :floppy_disk:
|
* [ispc](https://ispc.github.io/) :floppy_disk:
|
||||||
* Java
|
* Java
|
||||||
|
|
0
test/command_callback/ink_paths/story/main.ink
Normal file
0
test/command_callback/ink_paths/story/main.ink
Normal file
22
test/command_callback/test_ink_ls_command_callbacks.vader
Normal file
22
test/command_callback/test_ink_ls_command_callbacks.vader
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('ink', 'ls')
|
||||||
|
set ft=ink
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(should set correct defaults):
|
||||||
|
AssertLinter 'ink-language-server', ale#Escape('ink-language-server') . ' --stdio'
|
||||||
|
|
||||||
|
Execute(should set correct LSP values):
|
||||||
|
call ale#test#SetFilename('ink_paths/story/main.ink')
|
||||||
|
|
||||||
|
AssertLSPLanguage 'ink'
|
||||||
|
AssertLSPOptions {}
|
||||||
|
AssertLSPConfig {}
|
||||||
|
AssertLSPProject ale#path#Simplify(g:dir . '/ink_paths/story')
|
||||||
|
|
||||||
|
Execute(should accept configuration settings):
|
||||||
|
AssertLSPConfig {}
|
||||||
|
let b:ale_ink_ls_initialization_options = {'ink': {'runThroughMono': v:true}}
|
||||||
|
AssertLSPOptions {'ink': {'runThroughMono': v:true}}
|
Reference in a new issue