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 | |
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
-rw-r--r-- | ale_linters/javascript/jscs.vim | 60 | ||||
-rw-r--r-- | doc/ale-javascript.txt | 19 | ||||
-rw-r--r-- | test/command_callback/test_jscs_command_callback.vader | 25 | ||||
-rw-r--r-- | test/handler/test_jscs_handler.vader | 25 |
4 files changed, 126 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', \}) + diff --git a/doc/ale-javascript.txt b/doc/ale-javascript.txt index 97ad709a..4abc6298 100644 --- a/doc/ale-javascript.txt +++ b/doc/ale-javascript.txt @@ -169,6 +169,25 @@ g:ale_javascript_flow_use_global *g:ale_javascript_flow_use_global* =============================================================================== +jscs *ale-javascript-jscs* + +g:ale_javascript_jscs_executable *g:ale_javascript_jscs_executable* + *b:ale_javascript_jscs_executable* + Type: |String| + Default: `'jscs'` + + See |ale-integrations-local-executables| + + +g:ale_javascript_jscs_use_global *g:ale_javascript_jscs_use_global* + *b:ale_javascript_jscs_use_global* + Type: |Number| + Default: `0` + + See |ale-integrations-local-executables| + + +=============================================================================== jshint *ale-javascript-jshint* g:ale_javascript_jshint_executable *g:ale_javascript_jshint_executable* diff --git a/test/command_callback/test_jscs_command_callback.vader b/test/command_callback/test_jscs_command_callback.vader new file mode 100644 index 00000000..8245337e --- /dev/null +++ b/test/command_callback/test_jscs_command_callback.vader @@ -0,0 +1,25 @@ +Before: + runtime ale_linters/javascript/jscs.vim + +After: + call ale#linter#Reset() + let g:ale_javascript_jscs_executable = 'jscs' + +Execute(Should return the correct default values): + AssertEqual + \ 'jscs', + \ ale_linters#javascript#jscs#GetExecutable(bufnr('')) + AssertEqual + \ '''jscs'' --reporter inline --no-colors -', + \ ale_linters#javascript#jscs#GetCommand(bufnr('')) + + +Execute(Should allow using a custom executable): + let g:ale_javascript_jscs_executable = 'foobar' + + AssertEqual + \ 'foobar', + \ ale_linters#javascript#jscs#GetExecutable(bufnr('')) + AssertEqual + \ '''foobar'' --reporter inline --no-colors -', + \ ale_linters#javascript#jscs#GetCommand(bufnr('')) diff --git a/test/handler/test_jscs_handler.vader b/test/handler/test_jscs_handler.vader new file mode 100644 index 00000000..81e91d8e --- /dev/null +++ b/test/handler/test_jscs_handler.vader @@ -0,0 +1,25 @@ + +Execute(jscs should parse lines correctly): + AssertEqual + \ [ + \ { + \ 'lnum': 1, + \ 'col': 7, + \ 'text': 'disallowVar: Variable declarations should use `let` or `const` not `var`', + \ }, + \ { + \ 'lnum': 3, + \ 'col': 21, + \ 'text': 'disallowTrailingWhitespace: Illegal trailing whitespace', + \ }, + \ { + \ 'lnum': 5, + \ 'col': 9, + \ 'text': 'disallowUnusedVariables: Variable `hello` is not used', + \ }, + \ ], + \ ale_linters#javascript#jscs#Handle(347, [ + \ 'foobar.js: line 1, col 7, disallowVar: Variable declarations should use `let` or `const` not `var`', + \ 'foobar.js: line 3, col 21, disallowTrailingWhitespace: Illegal trailing whitespace', + \ 'foobar.js: line 5, col 9, disallowUnusedVariables: Variable `hello` is not used', + \ ]) |