Flow linter improvements (#176)

* Fix flow linter to provide filename of the buffer

Related #173

* Fix flow linter not to fail on empty response

* Various improvement to message parsing
This commit is contained in:
Andrey Popp 2016-11-21 12:53:18 +03:00 committed by w0rp
parent 713a6910d4
commit d700da8cb8

View File

@ -21,11 +21,15 @@ endfunction
function! ale_linters#javascript#flow#GetCommand(buffer) abort function! ale_linters#javascript#flow#GetCommand(buffer) abort
return ale_linters#javascript#flow#GetExecutable(a:buffer) return ale_linters#javascript#flow#GetExecutable(a:buffer)
\ . ' check-contents --respect-pragma --json --from ale' \ . ' check-contents --respect-pragma --json --from ale %s'
endfunction endfunction
function! ale_linters#javascript#flow#Handle(buffer, lines) function! ale_linters#javascript#flow#Handle(buffer, lines)
let l:flow_output = json_decode(join(a:lines, '')) let l:str = join(a:lines, '')
if l:str ==# ''
return []
endif
let l:flow_output = json_decode(l:str)
if has_key(l:flow_output, 'errors') if has_key(l:flow_output, 'errors')
let l:output = [] let l:output = []
@ -34,19 +38,29 @@ function! ale_linters#javascript#flow#Handle(buffer, lines)
" Each error is broken up into parts " Each error is broken up into parts
let l:text = '' let l:text = ''
let l:line = 0 let l:line = 0
let l:col = 0
for l:message in l:error.message for l:message in l:error.message
" Comments have no line of column information " Comments have no line of column information
if l:message.line + 0 if has_key(l:message, 'loc') && l:line ==# 0
let l:line = l:message.line + 0 let l:line = l:message.loc.start.line + 0
let l:col = l:message.loc.start.column + 0
endif endif
if l:text ==# ''
let l:text = l:message.descr . ':'
else
let l:text = l:text . ' ' . l:message.descr let l:text = l:text . ' ' . l:message.descr
endif
endfor endfor
if has_key(l:error, 'operation')
let l:text = l:text . ' See also: ' . l:error.operation.descr
endif
call add(l:output, { call add(l:output, {
\ 'bufnr': a:buffer, \ 'bufnr': a:buffer,
\ 'lnum': l:line, \ 'lnum': l:line,
\ 'vcol': 0, \ 'vcol': 0,
\ 'col': 0, \ 'col': l:col,
\ 'text': l:text, \ 'text': l:text,
\ 'type': l:error.level ==# 'error' ? 'E' : 'W', \ 'type': l:error.level ==# 'error' ? 'E' : 'W',
\}) \})