Include executable checks in ALEInfo

This commit is contained in:
w0rp 2017-08-23 21:41:29 +01:00
parent 0507503aa7
commit 623fdf212c
3 changed files with 80 additions and 30 deletions

View File

@ -70,6 +70,45 @@ function! s:EchoGlobalVariables() abort
endfor endfor
endfunction endfunction
" Echo a command that was run.
function! s:EchoCommand(item) abort
let l:status_message = a:item.status
" Include the exit code in output if we have it.
if a:item.status is# 'finished'
let l:status_message .= ' - exit code ' . a:item.exit_code
endif
echom '(' . l:status_message . ') ' . string(a:item.command)
if g:ale_history_log_output && has_key(a:item, 'output')
if empty(a:item.output)
echom ''
echom '<<<NO OUTPUT RETURNED>>>'
echom ''
else
echom ''
echom '<<<OUTPUT STARTS>>>'
for l:line in a:item.output
echom l:line
endfor
echom '<<<OUTPUT ENDS>>>'
echom ''
endif
endif
endfunction
" Echo the results of an executable check.
function! s:EchoExecutable(item) abort
echom printf(
\ '(executable check - %s) %s',
\ a:item.status ? 'success' : 'failure',
\ a:item.command,
\)
endfunction
function! s:EchoCommandHistory() abort function! s:EchoCommandHistory() abort
let l:buffer = bufnr('%') let l:buffer = bufnr('%')
@ -78,31 +117,10 @@ function! s:EchoCommandHistory() abort
endif endif
for l:item in g:ale_buffer_info[l:buffer].history for l:item in g:ale_buffer_info[l:buffer].history
let l:status_message = l:item.status if l:item.job_id is# 'executable'
call s:EchoExecutable(l:item)
" Include the exit code in output if we have it. else
if l:item.status is# 'finished' call s:EchoCommand(l:item)
let l:status_message .= ' - exit code ' . l:item.exit_code
endif
echom '(' . l:status_message . ') ' . string(l:item.command)
if g:ale_history_log_output && has_key(l:item, 'output')
if empty(l:item.output)
echom ''
echom '<<<NO OUTPUT RETURNED>>>'
echom ''
else
echom ''
echom '<<<OUTPUT STARTS>>>'
for l:line in l:item.output
echom l:line
endfor
echom '<<<OUTPUT ENDS>>>'
echom ''
endif
endif endif
endfor endfor
endfunction endfunction

View File

@ -16,22 +16,34 @@ if !has_key(s:, 'lsp_linter_map')
let s:lsp_linter_map = {} let s:lsp_linter_map = {}
endif endif
let s:executable_cache_map = {} if !has_key(s:, 'executable_cache_map')
let s:executable_cache_map = {}
endif
function! ale#engine#ResetExecutableCache() abort
let s:executable_cache_map = {}
endfunction
" Check if files are executable, and if they are, remember that they are " Check if files are executable, and if they are, remember that they are
" for subsequent calls. We'll keep checking until programs can be executed. " for subsequent calls. We'll keep checking until programs can be executed.
function! s:IsExecutable(executable) abort function! ale#engine#IsExecutable(buffer, executable) abort
if has_key(s:executable_cache_map, a:executable) if has_key(s:executable_cache_map, a:executable)
return 1 return 1
endif endif
let l:result = 0
if executable(a:executable) if executable(a:executable)
let s:executable_cache_map[a:executable] = 1 let s:executable_cache_map[a:executable] = 1
return 1 let l:result = 1
endif endif
return 0 if g:ale_history_enabled
call ale#history#Add(a:buffer, l:result, 'executable', a:executable)
endif
return l:result
endfunction endfunction
function! ale#engine#InitBufferInfo(buffer) abort function! ale#engine#InitBufferInfo(buffer) abort
@ -755,7 +767,7 @@ function! s:RunLinter(buffer, linter) abort
else else
let l:executable = ale#linter#GetExecutable(a:buffer, a:linter) let l:executable = ale#linter#GetExecutable(a:buffer, a:linter)
if s:IsExecutable(l:executable) if ale#engine#IsExecutable(a:buffer, l:executable)
return s:InvokeChain(a:buffer, a:linter, 0, []) return s:InvokeChain(a:buffer, a:linter, 0, [])
endif endif
endif endif

View File

@ -7,6 +7,7 @@ Before:
let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout'} let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout'}
let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout'} let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout'}
call ale#engine#ResetExecutableCache()
call ale#linter#Reset() call ale#linter#Reset()
let g:ale_linters = {} let g:ale_linters = {}
let g:ale_linter_aliases = {} let g:ale_linter_aliases = {}
@ -351,3 +352,22 @@ Execute (ALEInfo command history should print command output if logging is on):
\ '', \ '',
\ '<<<NO OUTPUT RETURNED>>>', \ '<<<NO OUTPUT RETURNED>>>',
\]) \])
Execute (ALEInfo should include executable checks in the history):
let g:ale_buffer_info[bufnr('')] = {'history': []}
call ale#linter#Define('testft', g:testlinter1)
call ale#engine#IsExecutable(bufnr(''), 'echo')
call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable')
call CheckInfo([
\ ' Current Filetype: testft.testft2',
\ 'Available Linters: [''testlinter1'']',
\ ' Enabled Linters: [''testlinter1'']',
\ ' Linter Variables:',
\ '',
\] + g:globals_lines + g:command_header + [
\ '',
\ '(executable check - success) echo',
\ '(executable check - failure) TheresNoWayThisIsExecutable',
\])