From 7def00d5a90059b9776e1bf41ea32bd90deb6007 Mon Sep 17 00:00:00 2001 From: Jonathan Boudreau Date: Sat, 8 Jul 2017 13:37:21 -0400 Subject: 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 --- ale_linters/javascript/jscs.vim | 60 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) (limited to 'ale_linters/javascript/jscs.vim') 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', \}) + -- cgit v1.2.3