summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-07-02 13:17:24 +0100
committerw0rp <devw0rp@gmail.com>2017-07-02 13:17:24 +0100
commit857ca941d214a65b2168429bcd3b12df26f13a67 (patch)
treec50ee0783783dade90e7cfa6a8ba6945ff1b116c /autoload
parentb731bd77abca29064600c01ad8df7d7d1033fc7a (diff)
downloadale-857ca941d214a65b2168429bcd3b12df26f13a67.zip
Support an 'stdio' type for linter defintions, and require a command for LSP connections via programs
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/completion.vim9
-rw-r--r--autoload/ale/engine.vim13
-rw-r--r--autoload/ale/linter.vim38
3 files changed, 32 insertions, 28 deletions
diff --git a/autoload/ale/completion.vim b/autoload/ale/completion.vim
index 5f2346ea..c14dcd14 100644
--- a/autoload/ale/completion.vim
+++ b/autoload/ale/completion.vim
@@ -171,11 +171,10 @@ endfunction
function! s:GetCompletionsForTSServer(linter) abort
let l:buffer = bufnr('')
- let l:executable = has_key(a:linter, 'executable_callback')
- \ ? ale#util#GetFunction(a:linter.executable_callback)(l:buffer)
- \ : a:linter.executable
- let l:command = ale#job#PrepareCommand(l:executable)
-
+ let l:executable = ale#linter#GetExecutable(l:buffer, a:linter)
+ let l:command = ale#job#PrepareCommand(
+ \ ale#linter#GetCommand(l:buffer, a:linter),
+ \)
let l:id = ale#lsp#StartProgram(
\ l:executable,
\ l:command,
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index cee74911..acfc030a 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -502,11 +502,8 @@ function! ale#engine#ProcessChain(buffer, linter, chain_index, input) abort
let l:input = []
let l:chain_index += 1
endwhile
- elseif has_key(a:linter, 'command_callback')
- " If there is a callback for generating a command, call that instead.
- let l:command = ale#util#GetFunction(a:linter.command_callback)(a:buffer)
else
- let l:command = a:linter.command
+ let l:command = ale#linter#GetCommand(a:buffer, a:linter)
endif
if empty(l:command)
@@ -563,7 +560,9 @@ endfunction
function! s:CheckWithTSServer(buffer, linter, executable) abort
let l:info = g:ale_buffer_info[a:buffer]
- let l:command = ale#job#PrepareCommand(a:executable)
+ let l:command = ale#job#PrepareCommand(
+ \ ale#linter#GetCommand(a:buffer, a:linter),
+ \)
let l:id = ale#lsp#StartProgram(
\ a:executable,
\ l:command,
@@ -598,9 +597,7 @@ endfunction
function! ale#engine#Invoke(buffer, linter) abort
if empty(a:linter.lsp) || a:linter.lsp ==# 'tsserver'
- let l:executable = has_key(a:linter, 'executable_callback')
- \ ? ale#util#GetFunction(a:linter.executable_callback)(a:buffer)
- \ : a:linter.executable
+ let l:executable = ale#linter#GetExecutable(a:buffer, a:linter)
" Run this program if it can be executed.
if s:IsExecutable(l:executable)
diff --git a/autoload/ale/linter.vim b/autoload/ale/linter.vim
index 3c2ddd35..3419f5af 100644
--- a/autoload/ale/linter.vim
+++ b/autoload/ale/linter.vim
@@ -63,25 +63,18 @@ function! ale#linter#PreProcess(linter) abort
throw '`callback` must be defined with a callback to accept output'
endif
- let l:needs_executable = 0
- let l:needs_address = 0
- let l:needs_command = 0
-
- if l:obj.lsp ==# 'tsserver'
- let l:needs_executable = 1
- elseif l:obj.lsp ==# 'lsp'
- let l:needs_address = 1
- elseif !empty(l:obj.lsp)
+ let l:needs_address = l:obj.lsp ==# 'socket'
+ let l:needs_executable = l:obj.lsp !=# 'socket'
+ let l:needs_command = l:obj.lsp !=# 'socket'
+
+ if index(['', 'socket', 'stdio', 'tsserver'], l:obj.lsp) < 0
throw '`lsp` must be either `''lsp''` or `''tsserver''` if defined'
- else
- let l:needs_executable = 1
- let l:needs_command = 1
endif
if !l:needs_executable
if has_key(a:linter, 'executable')
\|| has_key(a:linter, 'executable_callback')
- throw '`executable` and `executable_callback` cannot be used when lsp == ''lsp'''
+ throw '`executable` and `executable_callback` cannot be used when lsp == ''socket'''
endif
elseif has_key(a:linter, 'executable_callback')
let l:obj.executable_callback = a:linter.executable_callback
@@ -103,7 +96,7 @@ function! ale#linter#PreProcess(linter) abort
if has_key(a:linter, 'command')
\|| has_key(a:linter, 'command_callback')
\|| has_key(a:linter, 'command_chain')
- throw '`command` and `command_callback` and `command_chain` cannot be used when `lsp` is set'
+ throw '`command` and `command_callback` and `command_chain` cannot be used when lsp == ''socket'''
endif
elseif has_key(a:linter, 'command_chain')
let l:obj.command_chain = a:linter.command_chain
@@ -167,7 +160,7 @@ function! ale#linter#PreProcess(linter) abort
if !l:needs_address
if has_key(a:linter, 'address_callback')
- throw '`address_callback` cannot be used when lsp != ''lsp'''
+ throw '`address_callback` cannot be used when lsp != ''socket'''
endif
elseif has_key(a:linter, 'address_callback')
let l:obj.address_callback = a:linter.address_callback
@@ -334,3 +327,18 @@ function! ale#linter#Get(original_filetypes) abort
return reverse(l:combined_linters)
endfunction
+
+" Given a buffer and linter, get the executable String for the linter.
+function! ale#linter#GetExecutable(buffer, linter) abort
+ return has_key(a:linter, 'executable_callback')
+ \ ? ale#util#GetFunction(a:linter.executable_callback)(a:buffer)
+ \ : a:linter.executable
+endfunction
+
+" Given a buffer and linter, get the command String for the linter.
+" The command_chain key is not supported.
+function! ale#linter#GetCommand(buffer, linter) abort
+ return has_key(a:linter, 'command_callback')
+ \ ? ale#util#GetFunction(a:linter.command_callback)(a:buffer)
+ \ : a:linter.command
+endfunction