Add erb linter (#497)
* Add eruby linter * Update README with erb linter * Fix example and contributions * Remove trailing newline * Fix for Vimscript style guide * Eruby-linter: codereview with @w0rp - read from stderro output_stream * Eruby-linter: codereview => add handler for ruby * Eruby-linter: codereview - eruby and ruby lint use the same ruby-handler (removes duplicated handling logic) * Eruby-linter: try to fix tests
This commit is contained in:
		
							parent
							
								
									a25b55b954
								
							
						
					
					
						commit
						c55064881d
					
				@ -70,6 +70,7 @@ name. That seems to be the fairest way to arrange this table.
 | 
				
			|||||||
| Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) |
 | 
					| Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) |
 | 
				
			||||||
| Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) |
 | 
					| Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) |
 | 
				
			||||||
| Elm | [elm-make](https://github.com/elm-lang/elm-make) |
 | 
					| Elm | [elm-make](https://github.com/elm-lang/elm-make) |
 | 
				
			||||||
 | 
					| Erb | [erb](https://github.com/jeremyevans/erubih) |
 | 
				
			||||||
| Erlang | [erlc](http://erlang.org/doc/man/erlc.html) |
 | 
					| Erlang | [erlc](http://erlang.org/doc/man/erlc.html) |
 | 
				
			||||||
| Fortran | [gcc](https://gcc.gnu.org/) |
 | 
					| Fortran | [gcc](https://gcc.gnu.org/) |
 | 
				
			||||||
| Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter), [go build](https://golang.org/cmd/go/), [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple), [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) |
 | 
					| Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter), [go build](https://golang.org/cmd/go/), [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple), [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) |
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								ale_linters/eruby/erubylint.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ale_linters/eruby/erubylint.vim
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					" Author: Matthias Guenther - https://wikimatze.de
 | 
				
			||||||
 | 
					" Description: erb-lint for eruby/erb files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					call ale#linter#Define('eruby', {
 | 
				
			||||||
 | 
					\   'name': 'erubylint',
 | 
				
			||||||
 | 
					\   'executable': 'erb',
 | 
				
			||||||
 | 
					\    'output_stream': 'stderr',
 | 
				
			||||||
 | 
					\   'command': 'erb -P -x %t | ruby -c',
 | 
				
			||||||
 | 
					\   'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
 | 
				
			||||||
 | 
					\})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1,39 +1,10 @@
 | 
				
			|||||||
" Author: Brandon Roehl - https://github.com/BrandonRoehl
 | 
					" Author: Brandon Roehl - https://github.com/BrandonRoehl
 | 
				
			||||||
" Description: Ruby MRI for Ruby files
 | 
					" 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, {
 | 
					 | 
				
			||||||
            \   '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', {
 | 
					call ale#linter#Define('ruby', {
 | 
				
			||||||
\   'name': 'ruby',
 | 
					\   'name': 'ruby',
 | 
				
			||||||
\   'executable': 'ruby',
 | 
					\   'executable': 'ruby',
 | 
				
			||||||
\   'output_stream': 'stderr',
 | 
					\   'output_stream': 'stderr',
 | 
				
			||||||
\   'command': 'ruby -w -c -T1 %t',
 | 
					\   'command': 'ruby -w -c -T1 %t',
 | 
				
			||||||
\   'callback': 'ale_linters#ruby#ruby#Handle',
 | 
					\   'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
 | 
				
			||||||
\})
 | 
					\})
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										37
									
								
								autoload/ale/handlers/ruby.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								autoload/ale/handlers/ruby.vim
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					" Author: Matthias Guenther https://wikimatze.de
 | 
				
			||||||
 | 
					"
 | 
				
			||||||
 | 
					" Description: This file implements handlers specific to Ruby.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function! s:HandleSyntaxError(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, {
 | 
				
			||||||
 | 
					            \   '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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function! ale#handlers#ruby#HandleSyntaxErrors(buffer, lines) abort
 | 
				
			||||||
 | 
					    return s:HandleSyntaxError(a:buffer, a:lines)
 | 
				
			||||||
 | 
					endfunction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,7 +24,7 @@ Execute(The ruby handler should parse lines correctly and add the column if it c
 | 
				
			|||||||
  \     'text': 'syntax error, unexpected end-of-input, expecting keyword_end'
 | 
					  \     'text': 'syntax error, unexpected end-of-input, expecting keyword_end'
 | 
				
			||||||
  \   }
 | 
					  \   }
 | 
				
			||||||
  \ ],
 | 
					  \ ],
 | 
				
			||||||
  \ ale_linters#ruby#ruby#Handle(255, [
 | 
					  \ ale#handlers#ruby#HandleSyntaxErrors(255, [
 | 
				
			||||||
  \ "test.rb:6: syntax error, unexpected ';'",
 | 
					  \ "test.rb:6: syntax error, unexpected ';'",
 | 
				
			||||||
  \ "        t = ;",
 | 
					  \ "        t = ;",
 | 
				
			||||||
  \ "             ^",
 | 
					  \ "             ^",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user