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
This commit is contained in:
		
							parent
							
								
									dd5806662a
								
							
						
					
					
						commit
						7def00d5a9
					
				| @ -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', | ||||
| \}) | ||||
| 
 | ||||
|  | ||||
| @ -168,6 +168,25 @@ g:ale_javascript_flow_use_global             *g:ale_javascript_flow_use_global* | ||||
|   See |ale-integrations-local-executables| | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 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* | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										25
									
								
								test/command_callback/test_jscs_command_callback.vader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								test/command_callback/test_jscs_command_callback.vader
									
									
									
									
									
										Normal file
									
								
							| @ -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('')) | ||||
							
								
								
									
										25
									
								
								test/handler/test_jscs_handler.vader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								test/handler/test_jscs_handler.vader
									
									
									
									
									
										Normal file
									
								
							| @ -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', | ||||
|   \ ]) | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonathan Boudreau
						Jonathan Boudreau