summaryrefslogtreecommitdiff
path: root/ale_linters/eruby
diff options
context:
space:
mode:
authorw0rp <w0rp@users.noreply.github.com>2018-01-24 10:40:57 +0000
committerGitHub <noreply@github.com>2018-01-24 10:40:57 +0000
commit9849c79ff767b9f2e3498230bb29071eeb5a77ef (patch)
treec0816ce9c042dfb023074f5e46e3d95ffdd08cd6 /ale_linters/eruby
parentb28a6ddbe4cf573ea993288a6ad4db569d535adf (diff)
parentaa29c91cdc9c5dc737e93c1f91080aa174363bef (diff)
downloadale-9849c79ff767b9f2e3498230bb29071eeb5a77ef.zip
Merge pull request #1157 from elebow/eruby-add-erubi-linter
[eruby] Add erubi linter
Diffstat (limited to 'ale_linters/eruby')
-rw-r--r--ale_linters/eruby/erubi.vim35
1 files changed, 35 insertions, 0 deletions
diff --git a/ale_linters/eruby/erubi.vim b/ale_linters/eruby/erubi.vim
new file mode 100644
index 00000000..6f2d3ac6
--- /dev/null
+++ b/ale_linters/eruby/erubi.vim
@@ -0,0 +1,35 @@
+" Author: Eddie Lebow https://github.com/elebow
+" Description: eruby checker using `erubi`
+
+function! ale_linters#eruby#erubi#CheckErubi(buffer) abort
+ return 'ruby -r erubi/capture_end -e ' . ale#Escape('""')
+endfunction
+
+function! ale_linters#eruby#erubi#GetCommand(buffer, check_erubi_output) abort
+ let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
+
+ if (!empty(a:check_erubi_output))
+ " The empty command in CheckErubi returns nothing if erubi runs and
+ " emits an error if erubi is not present
+ return ''
+ endif
+
+ if empty(l:rails_root)
+ return 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read).src') . '< %t | ruby -c'
+ endif
+
+ " Rails-flavored eRuby does not comply with the standard as understood by
+ " Erubi, 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 -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c'
+endfunction
+
+call ale#linter#Define('eruby', {
+\ 'name': 'erubi',
+\ 'executable': 'ruby',
+\ 'command_chain': [
+\ {'callback': 'ale_linters#eruby#erubi#CheckErubi'},
+\ {'callback': 'ale_linters#eruby#erubi#GetCommand', 'output_stream': 'stderr'},
+\ ],
+\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
+\})