forked from dense-analysis/ale
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[eruby] Add GetCommand to erb linter
GetCommand conditionally adds a filter (implemented as inline Ruby code in the command invoked) to transform some of the problematic Rails-specific eRuby syntax. Specifically, <%= tags are replaced with <%. This does not reduce the effectiveness of the linter, because the transformed code is still evaluated. This solution was suggested by @rgo at dense-analysis#580 (comment).
- Loading branch information
Eddie Lebow
committed
Nov 12, 2017
1 parent
5b1a414
commit f4e109e
Showing
3 changed files
with
37 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,24 @@ | ||
" Author: Matthias Guenther - https://wikimatze.de | ||
" Author: Matthias Guenther - https://wikimatze.de, Eddie Lebow https://github.com/elebow | ||
" Description: ERB from the Ruby standard library, for eruby/erb files | ||
|
||
function! ale_linters#eruby#erb#GetCommand(buffer) abort | ||
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) | ||
|
||
if l:rails_root is? '' | ||
return 'erb -P -x %t | ruby -c' | ||
endif | ||
|
||
" Rails-flavored eRuby does not comply with the standard as understood by | ||
" ERB, so we'll have to do some substitution. This does not reduce the | ||
" effectiveness of the linter—the translated code is still evaluated. | ||
return 'ruby -rerb -e "puts ERB.new(File.read(%t, encoding: \"BINARY\").gsub(\"<%=\",\"<%\"), nil, \"-\").src" | ruby -c' | ||
endfunction | ||
|
||
call ale#linter#Define('eruby', { | ||
\ 'name': 'erb', | ||
\ 'executable': 'erb', | ||
\ 'output_stream': 'stderr', | ||
\ 'command': 'erb -P -x %t | ruby -c', | ||
\ 'output_stream': 'stderr', | ||
\ 'command_callback': 'ale_linters#eruby#erb#GetCommand', | ||
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', | ||
\}) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
Before: | ||
runtime ale_linters/eruby/erb.vim | ||
call ale#test#SetDirectory('/testplugin/test/command_callback') | ||
|
||
After: | ||
call ale#linter#Reset() | ||
call ale#test#RestoreDirectory() | ||
|
||
Execute(Executable should not contain any filter code by default): | ||
call ale#test#SetFilename('../ruby_fixtures/not_a_rails_app/file.rb') | ||
|
||
AssertEqual | ||
\ 'erb -P -x %t | ruby -c', | ||
\ ale_linters#eruby#erb#GetCommand(bufnr('')) | ||
|
||
Execute(Executable should filter invalid eRuby when inside a Rails project): | ||
call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/app/views/my_great_view.html.erb') | ||
|
||
AssertEqual | ||
\ 'ruby -rerb -e "puts ERB.new(File.read(%t, encoding: \"BINARY\").gsub(\"<%=\",\"<%\"), nil, \"-\").src" | ruby -c', | ||
\ ale_linters#eruby#erb#GetCommand(bufnr('')) |
Empty file.