diff options
author | José Lorenzo RodrÃguez <lorenzo@users.noreply.github.com> | 2018-01-23 22:46:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-23 22:46:59 +0100 |
commit | dd413a4732ed52e33ec318c7c15a30cf413c87a3 (patch) | |
tree | c135c05a4f699e120919958533ba7fe70005b213 /ale_linters | |
parent | 038789f0ed42cfffbd442a6a399cb2395591821d (diff) | |
download | ale-dd413a4732ed52e33ec318c7c15a30cf413c87a3.zip |
Improving hadolint checker
- Displaying dockerfile parse errors instead of silently failing
- Adding error detail with link to the docs
Diffstat (limited to 'ale_linters')
-rw-r--r-- | ale_linters/dockerfile/hadolint.vim | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/ale_linters/dockerfile/hadolint.vim b/ale_linters/dockerfile/hadolint.vim index 5550d698..6e1c7377 100644 --- a/ale_linters/dockerfile/hadolint.vim +++ b/ale_linters/dockerfile/hadolint.vim @@ -7,26 +7,46 @@ call ale#Set('dockerfile_hadolint_docker_image', 'lukasmartinelli/hadolint') function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort " Matches patterns line the following: " - " stdin:19: F: Pipe chain should start with a raw value. - let l:pattern = '\v^/dev/stdin:?(\d+)? (\S+) (.+)$' + " /dev/stdin:19 DL3001 Pipe chain should start with a raw value. + " /dev/stdin:19:3 unexpected thing + let l:pattern = '\v^/dev/stdin:(\d+):?(\d+)? ((DL|SC)(\d+) )?(.+)$' let l:output = [] for l:match in ale#util#GetMatches(a:lines, l:pattern) let l:lnum = 0 + let l:colnum = 0 if l:match[1] isnot# '' let l:lnum = l:match[1] + 0 endif + if l:match[2] isnot# '' + let l:colnum = l:match[2] + 0 + endif + let l:type = 'W' - let l:text = l:match[3] + let l:text = l:match[6] + let l:detail = l:match[6] + let l:domain = 'https://github.com/hadolint/hadolint/wiki/' + + if l:match[4] is# 'SC' + let l:domain = 'https://github.com/koalaman/shellcheck/wiki/' + endif + + if l:match[5] isnot# '' + let l:code = l:match[4] . l:match[5] + let l:link = ' ( ' . l:domain . l:code . ' )' + let l:detail = l:code . l:link . "\n\n" . l:detail + else + let l:type = 'E' + endif call add(l:output, { \ 'lnum': l:lnum, - \ 'col': 0, + \ 'col': l:colnum, \ 'type': l:type, \ 'text': l:text, - \ 'nr': l:match[2], + \ 'detail': l:detail \}) endfor |