From 9226e13b31474ac17d0c25cd27aa55bff21d55c2 Mon Sep 17 00:00:00 2001 From: Gordon Fontenot Date: Fri, 7 Dec 2018 17:20:58 -0500 Subject: Add support for Pod based SwiftLint (#2122) It's common to add SwiftLint as a CocoaPod dependency, instead of as a global binary. In this case we should use that version of SwiftLint before looking for any others. Note that I'm also adding support for SwiftLint in ReactNative projects here as well, where the Pods directory would be nested inside an ios directory. --- ale_linters/swift/swiftlint.vim | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'ale_linters/swift/swiftlint.vim') diff --git a/ale_linters/swift/swiftlint.vim b/ale_linters/swift/swiftlint.vim index 697d246b..a1150658 100644 --- a/ale_linters/swift/swiftlint.vim +++ b/ale_linters/swift/swiftlint.vim @@ -1,6 +1,24 @@ -" Author: David Mohundro +" Author: David Mohundro , Gordon Fontenot " Description: swiftlint for swift files +call ale#Set('swift_swiftlint_executable', 'swiftlint') +call ale#Set('swift_swiftlint_use_global', get(g:, 'ale_use_global_executables', 0)) + +function! ale_linters#swift#swiftlint#GetExecutable(buffer) abort + return ale#node#FindExecutable(a:buffer, 'swift_swiftlint', [ + \ 'Pods/SwiftLint/swiftlint', + \ 'ios/Pods/SwiftLint/swiftlint', + \ 'swiftlint', + \]) +endfunction + +function! ale_linters#swift#swiftlint#GetCommand(buffer) abort + let l:executable = ale_linters#swift#swiftlint#GetExecutable(a:buffer) + let l:args = 'lint --use-stdin' + + return ale#Escape(l:executable) + \ . ' ' .l:args +endfunction function! ale_linters#swift#swiftlint#Handle(buffer, lines) abort let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)?:? ([^:]+): (.+)$' @@ -8,10 +26,10 @@ function! ale_linters#swift#swiftlint#Handle(buffer, lines) abort 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], - \} + \ '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' @@ -45,7 +63,7 @@ endfunction call ale#linter#Define('swift', { \ 'name': 'swiftlint', -\ 'executable': 'swiftlint', -\ 'command': 'swiftlint lint --use-stdin', +\ 'executable_callback': 'ale_linters#swift#swiftlint#GetExecutable', +\ 'command_callback': 'ale_linters#swift#swiftlint#GetCommand', \ 'callback': 'ale_linters#swift#swiftlint#Handle', \}) -- cgit v1.2.3