diff options
author | Jonathan Boudreau <jonathan.boudreau.92@gmail.com> | 2017-07-08 13:37:21 -0400 |
---|---|---|
committer | w0rp <w0rp@users.noreply.github.com> | 2017-07-08 18:37:21 +0100 |
commit | 7def00d5a90059b9776e1bf41ea32bd90deb6007 (patch) | |
tree | cb80683654da29e82d2c8befd758f9badfe5806c /ale_linters/javascript/jscs.vim | |
parent | dd5806662a96c664953871b726bb1d8add949648 (diff) | |
download | ale-7def00d5a90059b9776e1bf41ea32bd90deb6007.zip |
Use different reporter to support older versions of jscs (#737)
* Use different reporter to support older versions of jscs
* Add test and make more consistent with other code
* Add documentation for jscs
* Add more test coverage
Diffstat (limited to 'ale_linters/javascript/jscs.vim')
-rw-r--r-- | ale_linters/javascript/jscs.vim | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/ale_linters/javascript/jscs.vim b/ale_linters/javascript/jscs.vim index aef607ec..b3f826cf 100644 --- a/ale_linters/javascript/jscs.vim +++ b/ale_linters/javascript/jscs.vim @@ -1,9 +1,63 @@ " Author: Chris Kyrouac - https://github.com/fijshion " Description: jscs for JavaScript files +call ale#Set('javascript_jscs_executable', 'jscs') +call ale#Set('javascript_jscs_use_global', 0) + +function! ale_linters#javascript#jscs#GetExecutable(buffer) abort + return ale#node#FindExecutable(a:buffer, 'javascript_jscs', [ + \ 'node_modules/.bin/jscs', + \]) +endfunction + +function! ale_linters#javascript#jscs#GetCommand(buffer) abort + " Search for a local JShint config locaation, and default to a global one. + let l:jscs_config = ale#path#ResolveLocalPath( + \ a:buffer, + \ '.jscsrc', + \ get(g:, 'ale_jscs_config_loc', '') + \) + + let l:command = ale#Escape(ale_linters#javascript#jscs#GetExecutable(a:buffer)) + let l:command .= ' --reporter inline --no-colors' + + if !empty(l:jscs_config) + let l:command .= ' --config ' . ale#Escape(l:jscs_config) + endif + + let l:command .= ' -' + + return l:command +endfunction + +function! ale_linters#javascript#jscs#Handle(buffer, lines) abort + " Matches patterns looking like the following + " + " foobar.js: line 2, col 1, Expected indentation of 1 characters + " + let l:pattern = '^.*:\s\+line \(\d\+\),\s\+col\s\+\(\d\+\),\s\+\(.*\)$' + let l:output = [] + let l:m = ale#util#GetMatches(a:lines, [l:pattern]) + + for l:match in l:m + let l:text = l:match[3] + + let l:obj = { + \ 'lnum': l:match[1] + 0, + \ 'col': l:match[2] + 0, + \ 'text': l:match[3] + \} + + call add(l:output, l:obj) + endfor + + return l:output +endfunction + call ale#linter#Define('javascript', { \ 'name': 'jscs', -\ 'executable': 'jscs', -\ 'command': 'jscs -r unix -n -', -\ 'callback': 'ale#handlers#unix#HandleAsError', +\ 'executable_callback': 'ale_linters#javascript#jscs#GetExecutable', +\ 'command_callback': 'ale_linters#javascript#jscs#GetCommand', +\ 'callback': 'ale_linters#javascript#jscs#Handle', \}) + |