summaryrefslogtreecommitdiff
path: root/ale_linters/yaml/circleci.vim
diff options
context:
space:
mode:
Diffstat (limited to 'ale_linters/yaml/circleci.vim')
-rw-r--r--ale_linters/yaml/circleci.vim35
1 files changed, 35 insertions, 0 deletions
diff --git a/ale_linters/yaml/circleci.vim b/ale_linters/yaml/circleci.vim
new file mode 100644
index 00000000..3df61459
--- /dev/null
+++ b/ale_linters/yaml/circleci.vim
@@ -0,0 +1,35 @@
+function! ale_linters#yaml#circleci#Handle(buffer, lines) abort
+ let l:match_index = -1
+ let l:output = []
+
+ for l:index in range(len(a:lines))
+ let l:line = a:lines[l:index]
+
+ if l:line =~? 'Error: ERROR IN CONFIG FILE:'
+ let l:match_index = l:index + 1
+ break
+ endif
+ endfor
+
+ if l:match_index > 0
+ return [{
+ \ 'type': 'E',
+ \ 'lnum': 1,
+ \ 'text': a:lines[l:match_index],
+ \ 'detail': join(a:lines[l:match_index :], "\n"),
+ \}]
+ endif
+
+ return []
+endfunction
+
+" The circleci validate requires network requests, so we'll only run it when
+" files are saved to prevent the server from being hammered.
+call ale#linter#Define('yaml', {
+\ 'name': 'circleci',
+\ 'executable': {b -> expand('#' . b . ':p') =~? '\.circleci' ? 'circleci' : ''},
+\ 'command': 'circleci config validate - < %s',
+\ 'callback': 'ale_linters#yaml#circleci#Handle',
+\ 'output_stream': 'stderr',
+\ 'lint_file': 1,
+\})