Add standard linter
This commit is contained in:
parent
744d7d789f
commit
119695bd08
@ -68,7 +68,7 @@ name. That seems to be the fairest way to arrange this table.
|
|||||||
| Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [go build](https://golang.org/cmd/go/) |
|
| Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [go build](https://golang.org/cmd/go/) |
|
||||||
| Haskell | [ghc](https://www.haskell.org/ghc/), [hlint](https://hackage.haskell.org/package/hlint) |
|
| Haskell | [ghc](https://www.haskell.org/ghc/), [hlint](https://hackage.haskell.org/package/hlint) |
|
||||||
| HTML | [HTMLHint](http://htmlhint.com/), [tidy](http://www.html-tidy.org/) |
|
| HTML | [HTMLHint](http://htmlhint.com/), [tidy](http://www.html-tidy.org/) |
|
||||||
| JavaScript | [eslint](http://eslint.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [flow](https://flowtype.org/) |
|
| JavaScript | [eslint](http://eslint.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [flow](https://flowtype.org/), [standard](http://standardjs.com/)
|
||||||
| JSON | [jsonlint](http://zaa.ch/jsonlint/) |
|
| JSON | [jsonlint](http://zaa.ch/jsonlint/) |
|
||||||
| LaTeX | [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck) |
|
| LaTeX | [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck) |
|
||||||
| Lua | [luacheck](https://github.com/mpeterv/luacheck) |
|
| Lua | [luacheck](https://github.com/mpeterv/luacheck) |
|
||||||
|
71
ale_linters/javascript/standard.vim
Normal file
71
ale_linters/javascript/standard.vim
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
" Author: Ahmed El Gabri <@ahmedelgabri>
|
||||||
|
" Description: standardjs for JavaScript files
|
||||||
|
|
||||||
|
let g:ale_javascript_standard_executable =
|
||||||
|
\ get(g:, 'ale_javascript_standard_executable', 'standard')
|
||||||
|
|
||||||
|
let g:ale_javascript_standard_options =
|
||||||
|
\ get(g:, 'ale_javascript_standard_options', '')
|
||||||
|
|
||||||
|
let g:ale_javascript_standard_use_global =
|
||||||
|
\ get(g:, 'ale_javascript_standard_use_global', 0)
|
||||||
|
|
||||||
|
function! ale_linters#javascript#standard#GetExecutable(buffer) abort
|
||||||
|
if g:ale_javascript_standard_use_global
|
||||||
|
return g:ale_javascript_standard_executable
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#util#ResolveLocalPath(
|
||||||
|
\ a:buffer,
|
||||||
|
\ 'node_modules/.bin/standard',
|
||||||
|
\ g:ale_javascript_standard_executable
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#standard#GetCommand(buffer) abort
|
||||||
|
return ale_linters#javascript#standard#GetExecutable(a:buffer)
|
||||||
|
\ . ' ' . g:ale_javascript_standard_options
|
||||||
|
\ . ' --stdin %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#standard#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" /path/to/some-filename.js:47:14: Strings must use singlequote.
|
||||||
|
" /path/to/some-filename.js:56:41: Expected indentation of 2 spaces but found 4.
|
||||||
|
" /path/to/some-filename.js:13:3: Parsing error: Unexpected token
|
||||||
|
let l:pattern = '^.*:\(\d\+\):\(\d\+\): \(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
let l:match = matchlist(l:line, l:pattern)
|
||||||
|
|
||||||
|
if len(l:match) == 0
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:type = 'Error'
|
||||||
|
let l:text = l:match[3]
|
||||||
|
|
||||||
|
" vcol is Needed to indicate that the column is a character.
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'vcol': 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'nr': -1,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'standard',
|
||||||
|
\ 'executable_callback': 'ale_linters#javascript#standard#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#javascript#standard#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#javascript#standard#Handle',
|
||||||
|
\})
|
||||||
|
|
44
test/test_standard_handler.vader
Normal file
44
test/test_standard_handler.vader
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
Execute(The standard handler should parse lines correctly):
|
||||||
|
runtime ale_linters/javascript/standard.vim
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'bufnr': 347,
|
||||||
|
\ 'lnum': 47,
|
||||||
|
\ 'vcol': 0,
|
||||||
|
\ 'col': 14,
|
||||||
|
\ 'text': 'Expected indentation of 2 spaces but found 4.',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'nr': -1,
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'bufnr': 347,
|
||||||
|
\ 'lnum': 56,
|
||||||
|
\ 'vcol': 0,
|
||||||
|
\ 'col': 41,
|
||||||
|
\ 'text': 'Strings must use singlequote.',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'nr': -1,
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'bufnr': 347,
|
||||||
|
\ 'lnum': 13,
|
||||||
|
\ 'vcol': 0,
|
||||||
|
\ 'col': 3,
|
||||||
|
\ 'text': 'Parsing error: Unexpected token',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'nr': -1,
|
||||||
|
\ },
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#javascript#standard#Handle(347, [
|
||||||
|
\ 'This line should be ignored completely',
|
||||||
|
\ '/path/to/some-filename.js:47:14: Expected indentation of 2 spaces but found 4.',
|
||||||
|
\ '/path/to/some-filename.js:56:41: Strings must use singlequote.',
|
||||||
|
\ 'This line should be ignored completely',
|
||||||
|
\ '/path/to/some-filename.js:13:3: Parsing error: Unexpected token',
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user