diff options
author | Eddie Lebow <elebow@users.noreply.github.com> | 2018-04-17 00:29:13 -0400 |
---|---|---|
committer | Eddie Lebow <elebow@users.noreply.github.com> | 2018-04-20 22:54:29 -0400 |
commit | 1e6651e0a0039185d63ebe4f26f04937e82207fb (patch) | |
tree | 03eb2190fb4eed1c7a2cfc73cc7080e885fc963f /ale_linters/cucumber | |
parent | fb720251bf38139c1811665852e1bc2f73d0393f (diff) | |
download | ale-1e6651e0a0039185d63ebe4f26f04937e82207fb.zip |
Add cucumber checker for cucumber files
For now, it only detects undefined steps. The nearest `features` dir
above the buffer file is loaded, so step definitions should be found
correctly.
Tested only with Cucumber for Ruby, but it should work for any cucumber
that follows a substantially similar directory structure.
Diffstat (limited to 'ale_linters/cucumber')
-rw-r--r-- | ale_linters/cucumber/cucumber.vim | 45 |
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' +\}) |