summaryrefslogtreecommitdiff
path: root/ale_linters/cucumber/cucumber.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ale_linters/cucumber/cucumber.vim')
-rw-r--r--ale_linters/cucumber/cucumber.vim45
1 files changed, 45 insertions, 0 deletions
diff --git a/ale_linters/cucumber/cucumber.vim b/ale_linters/cucumber/cucumber.vim
new file mode 100644
index 00000000..6708d32f
--- /dev/null
+++ b/ale_linters/cucumber/cucumber.vim
@@ -0,0 +1,45 @@
+" Author: Eddie Lebow https://github.com/elebow
+" Description: Cucumber, a BDD test tool
+
+function! ale_linters#cucumber#cucumber#GetCommand(buffer) abort
+ let l:features_dir = ale#path#FindNearestDirectory(a:buffer, 'features')
+
+ if !empty(l:features_dir)
+ let l:features_arg = '-r ' . ale#Escape(l:features_dir)
+ else
+ let l:features_arg = ''
+ endif
+
+ return 'cucumber --dry-run --quiet --strict --format=json '
+ \ . l:features_arg . ' %t'
+endfunction
+
+function! ale_linters#cucumber#cucumber#Handle(buffer, lines) abort
+ try
+ let l:json = ale#util#FuzzyJSONDecode(a:lines, {})[0]
+ catch
+ return []
+ endtry
+
+ let l:output = []
+ for l:element in get(l:json, 'elements', [])
+ for l:step in l:element['steps']
+ if l:step['result']['status'] is# 'undefined'
+ call add(l:output, {
+ \ 'lnum': l:step['line'],
+ \ 'code': 'E',
+ \ 'text': 'Undefined step'
+ \})
+ endif
+ endfor
+ endfor
+
+ return l:output
+endfunction
+
+call ale#linter#Define('cucumber', {
+\ 'name': 'cucumber',
+\ 'executable': 'cucumber',
+\ 'command_callback': 'ale_linters#cucumber#cucumber#GetCommand',
+\ 'callback': 'ale_linters#cucumber#cucumber#Handle'
+\})