Add Ruby MRI linter (#453)
* Added ruby mri linter * Added to the list of supported linters * Async and now with 4 spaces * Vader tests for ruby * Match style choices * Vader test for the Ruby handler now works and passes
This commit is contained in:
parent
cc8eb05860
commit
4e40e8cb60
@ -94,7 +94,7 @@ name. That seems to be the fairest way to arrange this table.
|
|||||||
| Puppet | [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) |
|
| Puppet | [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) |
|
||||||
| Python | [flake8](http://flake8.pycqa.org/en/latest/), [mypy](http://mypy-lang.org/), [pylint](https://www.pylint.org/) |
|
| Python | [flake8](http://flake8.pycqa.org/en/latest/), [mypy](http://mypy-lang.org/), [pylint](https://www.pylint.org/) |
|
||||||
| reStructuredText | [proselint](http://proselint.com/)|
|
| reStructuredText | [proselint](http://proselint.com/)|
|
||||||
| Ruby | [rubocop](https://github.com/bbatsov/rubocop) |
|
| Ruby | [rubocop](https://github.com/bbatsov/rubocop), [ruby](https://www.ruby-lang.org) |
|
||||||
| Rust | [rustc](https://www.rust-lang.org/), cargo (see `:help ale-integration-rust` for configuration instructions) |
|
| Rust | [rustc](https://www.rust-lang.org/), cargo (see `:help ale-integration-rust` for configuration instructions) |
|
||||||
| SASS | [sass-lint](https://www.npmjs.com/package/sass-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
| SASS | [sass-lint](https://www.npmjs.com/package/sass-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
||||||
| SCSS | [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
| SCSS | [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
||||||
|
40
ale_linters/ruby/ruby.vim
Normal file
40
ale_linters/ruby/ruby.vim
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
" Author: Brandon Roehl - https://github.com/BrandonRoehl
|
||||||
|
" Description: Ruby MRI for Ruby files
|
||||||
|
|
||||||
|
function! ale_linters#ruby#ruby#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" test.rb:3: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument
|
||||||
|
" test.rb:8: syntax error, unexpected keyword_end, expecting end-of-input
|
||||||
|
let l:pattern = '\v^.+:(\d+): (warning: )?(.+)$'
|
||||||
|
let l:column = '\v^(\s+)\^$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
let l:match = matchlist(l:line, l:pattern)
|
||||||
|
if len(l:match) == 0
|
||||||
|
let l:match = matchlist(l:line, l:column)
|
||||||
|
if len(l:match) != 0
|
||||||
|
let l:output[len(l:output) - 1]['col'] = len(l:match[1])
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'text': l:match[2] . l:match[3],
|
||||||
|
\ 'type': empty(l:match[2]) ? 'E' : 'W',
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ruby', {
|
||||||
|
\ 'name': 'ruby',
|
||||||
|
\ 'executable': 'ruby',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command': 'ruby -w -c -T1 %t',
|
||||||
|
\ 'callback': 'ale_linters#ruby#ruby#Handle',
|
||||||
|
\})
|
39
test/handler/test_ruby_handler.vader
Normal file
39
test/handler/test_ruby_handler.vader
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
Execute(The ruby handler should parse lines correctly and add the column if it can):
|
||||||
|
runtime ale_linters/ruby/ruby.vim
|
||||||
|
" Point Error
|
||||||
|
" Warning
|
||||||
|
" Line Error
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 6,
|
||||||
|
\ 'bufnr': 255,
|
||||||
|
\ 'col': 13,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': 'syntax error, unexpected '';'''
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 9,
|
||||||
|
\ 'bufnr': 255,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'text': 'warning: statement not reached'
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 12,
|
||||||
|
\ 'bufnr': 255,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': 'syntax error, unexpected end-of-input, expecting keyword_end'
|
||||||
|
\ }
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#ruby#ruby#Handle(255, [
|
||||||
|
\ "test.rb:6: syntax error, unexpected ';'",
|
||||||
|
\ " t = ;",
|
||||||
|
\ " ^",
|
||||||
|
\ "test.rb:9: warning: statement not reached",
|
||||||
|
\ "test.rb:12: syntax error, unexpected end-of-input, expecting keyword_end",
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#linter#Reset()
|
Loading…
Reference in New Issue
Block a user