diff options
author | w0rp <devw0rp@gmail.com> | 2017-11-19 13:33:20 +0000 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2017-11-19 13:33:20 +0000 |
commit | fa7f0e2b85a252598023450336bbf4f3b320c1ef (patch) | |
tree | f488ce9e520c3d141d89c53632b861fd2f52caa4 /ale_linters/swift | |
parent | b16c82f2f19aa7b1f1472e6d3cd2908708b56a00 (diff) | |
download | ale-fa7f0e2b85a252598023450336bbf4f3b320c1ef.zip |
#852 - Capture error codes for swiftlint
Diffstat (limited to 'ale_linters/swift')
-rw-r--r-- | ale_linters/swift/swiftlint.vim | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/ale_linters/swift/swiftlint.vim b/ale_linters/swift/swiftlint.vim index b7dcf935..697d246b 100644 --- a/ale_linters/swift/swiftlint.vim +++ b/ale_linters/swift/swiftlint.vim @@ -1,9 +1,51 @@ " Author: David Mohundro <david@mohundro.com> " Description: swiftlint for swift files + +function! ale_linters#swift#swiftlint#Handle(buffer, lines) abort + let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)?:? ([^:]+): (.+)$' + let l:output = [] + + for l:match in ale#util#GetMatches(a:lines, l:pattern) + let l:item = { + \ 'lnum': str2nr(l:match[2]), + \ 'type': l:match[4] is# 'error' ? 'E' : 'W', + \ 'text': l:match[5], + \} + + if l:match[4] is# 'error' + let l:item.type = 'E' + elseif l:match[4] is# 'note' + let l:item.type = 'I' + endif + + if !empty(l:match[3]) + let l:item.col = str2nr(l:match[3]) + endif + + " If the filename is something like <stdin>, <nofile> or -, then + " this is an error for the file we checked. + if l:match[1] isnot# '-' && l:match[1][0] isnot# '<' + let l:item['filename'] = l:match[1] + endif + + " Parse the code if it's there. + let l:code_match = matchlist(l:item.text, '\v^(.+) \(([^ (]+)\)$') + + if !empty(l:code_match) + let l:item.text = l:code_match[1] + let l:item.code = l:code_match[2] + endif + + call add(l:output, l:item) + endfor + + return l:output +endfunction + call ale#linter#Define('swift', { \ 'name': 'swiftlint', \ 'executable': 'swiftlint', \ 'command': 'swiftlint lint --use-stdin', -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', +\ 'callback': 'ale_linters#swift#swiftlint#Handle', \}) |