Fix #735 - Support old versions of Flow by only adding --respect-pragma for supported versions
This commit is contained in:
parent
130928590b
commit
7ce960ae51
@ -10,7 +10,12 @@ function! ale_linters#javascript#flow#GetExecutable(buffer) abort
|
|||||||
\])
|
\])
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#javascript#flow#GetCommand(buffer) abort
|
function! ale_linters#javascript#flow#VersionCheck(buffer) abort
|
||||||
|
return ale#Escape(ale_linters#javascript#flow#GetExecutable(a:buffer))
|
||||||
|
\ . ' --version'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#flow#GetCommand(buffer, version_lines) abort
|
||||||
let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig')
|
let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig')
|
||||||
|
|
||||||
if empty(l:flow_config)
|
if empty(l:flow_config)
|
||||||
@ -18,8 +23,21 @@ function! ale_linters#javascript#flow#GetCommand(buffer) abort
|
|||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let l:use_respect_pragma = 1
|
||||||
|
|
||||||
|
" If we can parse the version number, then only use --respect-pragma
|
||||||
|
" if the version is >= 0.36.0, which added the argument.
|
||||||
|
for l:match in ale#util#GetMatches(a:version_lines, '\v\d+\.\d+\.\d+$')
|
||||||
|
let l:use_respect_pragma = ale#semver#GreaterOrEqual(
|
||||||
|
\ ale#semver#Parse(l:match[0]),
|
||||||
|
\ [0, 36, 0]
|
||||||
|
\)
|
||||||
|
endfor
|
||||||
|
|
||||||
return ale#Escape(ale_linters#javascript#flow#GetExecutable(a:buffer))
|
return ale#Escape(ale_linters#javascript#flow#GetExecutable(a:buffer))
|
||||||
\ . ' check-contents --respect-pragma --json --from ale %s'
|
\ . ' check-contents'
|
||||||
|
\ . (l:use_respect_pragma ? ' --respect-pragma': '')
|
||||||
|
\ . ' --json --from ale %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#javascript#flow#Handle(buffer, lines) abort
|
function! ale_linters#javascript#flow#Handle(buffer, lines) abort
|
||||||
@ -74,6 +92,10 @@ endfunction
|
|||||||
call ale#linter#Define('javascript', {
|
call ale#linter#Define('javascript', {
|
||||||
\ 'name': 'flow',
|
\ 'name': 'flow',
|
||||||
\ 'executable_callback': 'ale_linters#javascript#flow#GetExecutable',
|
\ 'executable_callback': 'ale_linters#javascript#flow#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#javascript#flow#GetCommand',
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#javascript#flow#VersionCheck'},
|
||||||
|
\ {'callback': 'ale_linters#javascript#flow#GetCommand'},
|
||||||
|
\ ],
|
||||||
\ 'callback': 'ale_linters#javascript#flow#Handle',
|
\ 'callback': 'ale_linters#javascript#flow#Handle',
|
||||||
|
\ 'add_newline': 1,
|
||||||
\})
|
\})
|
||||||
|
@ -387,6 +387,16 @@ function! s:RunJob(options) abort
|
|||||||
let l:read_buffer = 0
|
let l:read_buffer = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Add a newline to commands which need it.
|
||||||
|
" This is only used for Flow for now, and is not documented.
|
||||||
|
if l:linter.add_newline
|
||||||
|
if has('win32')
|
||||||
|
let l:command = l:command . '; echo.'
|
||||||
|
else
|
||||||
|
let l:command = l:command . '; echo'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
let l:command = ale#job#PrepareCommand(l:command)
|
let l:command = ale#job#PrepareCommand(l:command)
|
||||||
let l:job_options = {
|
let l:job_options = {
|
||||||
\ 'mode': 'nl',
|
\ 'mode': 'nl',
|
||||||
|
@ -50,6 +50,7 @@ function! ale#linter#PreProcess(linter) abort
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let l:obj = {
|
let l:obj = {
|
||||||
|
\ 'add_newline': get(a:linter, 'add_newline', 0),
|
||||||
\ 'name': get(a:linter, 'name'),
|
\ 'name': get(a:linter, 'name'),
|
||||||
\ 'lsp': get(a:linter, 'lsp', ''),
|
\ 'lsp': get(a:linter, 'lsp', ''),
|
||||||
\}
|
\}
|
||||||
|
@ -8,10 +8,21 @@ Execute(flow should return a command to run if a .flowconfig file exists):
|
|||||||
silent! cd /testplugin/test
|
silent! cd /testplugin/test
|
||||||
:e! flow/a/sub/dummy
|
:e! flow/a/sub/dummy
|
||||||
|
|
||||||
AssertEqual '''flow'' check-contents --respect-pragma --json --from ale %s', ale_linters#javascript#flow#GetCommand(bufnr('%'))
|
AssertEqual '''flow'' check-contents --respect-pragma --json --from ale %s', ale_linters#javascript#flow#GetCommand(bufnr('%'), [])
|
||||||
|
|
||||||
|
Execute(flow should should not use --respect-pragma for old versions):
|
||||||
|
silent! cd /testplugin/test
|
||||||
|
:e! flow/a/sub/dummy
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ '''flow'' check-contents --json --from ale %s',
|
||||||
|
\ ale_linters#javascript#flow#GetCommand(bufnr('%'), [
|
||||||
|
\ 'Warning: `flow --version` is deprecated in favor of `flow version`',
|
||||||
|
\ 'Flow, a static type checker for JavaScript, version 0.27.0',
|
||||||
|
\ ])
|
||||||
|
|
||||||
Execute(flow should not return a command to run if no .flowconfig file exists):
|
Execute(flow should not return a command to run if no .flowconfig file exists):
|
||||||
silent! cd /testplugin/test
|
silent! cd /testplugin/test
|
||||||
:e! flow/b/sub/dummy
|
:e! flow/b/sub/dummy
|
||||||
|
|
||||||
AssertEqual '', ale_linters#javascript#flow#GetCommand(bufnr('%'))
|
AssertEqual '', ale_linters#javascript#flow#GetCommand(bufnr('%'), [])
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Before:
|
Before:
|
||||||
Save g:ale_linters, g:ale_linter_aliases
|
Save g:ale_linters, g:ale_linter_aliases
|
||||||
|
|
||||||
let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': ''}
|
let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': '', 'add_newline': 0}
|
||||||
let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout', 'read_buffer': 0, 'lint_file': 1, 'aliases': [], 'lsp': ''}
|
let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout', 'read_buffer': 0, 'lint_file': 1, 'aliases': [], 'lsp': '', 'add_newline': 0}
|
||||||
call ale#linter#Reset()
|
call ale#linter#Reset()
|
||||||
|
|
||||||
After:
|
After:
|
||||||
@ -105,7 +105,7 @@ Execute (The local alias option shouldn't completely replace the global one):
|
|||||||
AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
|
AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
|
||||||
|
|
||||||
Execute (Linters should be loaded from disk appropriately):
|
Execute (Linters should be loaded from disk appropriately):
|
||||||
AssertEqual [{'name': 'testlinter', 'output_stream': 'stdout', 'executable': 'testlinter', 'command': 'testlinter', 'callback': 'testCB', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': ''}], ale#linter#Get('testft')
|
AssertEqual [{'name': 'testlinter', 'output_stream': 'stdout', 'executable': 'testlinter', 'command': 'testlinter', 'callback': 'testCB', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': '', 'add_newline': 0}], ale#linter#Get('testft')
|
||||||
|
|
||||||
|
|
||||||
Execute (Linters for later filetypes should replace the former ones):
|
Execute (Linters for later filetypes should replace the former ones):
|
||||||
@ -123,5 +123,5 @@ Execute (Linters for later filetypes should replace the former ones):
|
|||||||
\})
|
\})
|
||||||
|
|
||||||
AssertEqual [
|
AssertEqual [
|
||||||
\ {'output_stream': 'stdout', 'lint_file': 0, 'read_buffer': 1, 'name': 'eslint', 'executable': 'x', 'lsp': '', 'aliases': [], 'command': 'x', 'callback': 'x'}
|
\ {'output_stream': 'stdout', 'lint_file': 0, 'read_buffer': 1, 'name': 'eslint', 'executable': 'x', 'lsp': '', 'aliases': [], 'command': 'x', 'callback': 'x', 'add_newline': 0}
|
||||||
\], ale#linter#Get('javascript.typescript')
|
\], ale#linter#Get('javascript.typescript')
|
||||||
|
Loading…
Reference in New Issue
Block a user