summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/swift/sourcekitlsp.vim13
-rw-r--r--autoload/ale/swift.vim13
-rw-r--r--test/command_callback/test_swift_sourcekitlsp_command_callbacks.vader21
-rw-r--r--test/swift-test-files/non-swift-package-project/src/folder/dummy.swift0
-rw-r--r--test/swift-test-files/swift-package-project/Package.swift0
-rw-r--r--test/swift-test-files/swift-package-project/src/folder/dummy.swift0
-rw-r--r--test/test_swift_find_project_root.vader18
7 files changed, 65 insertions, 0 deletions
diff --git a/ale_linters/swift/sourcekitlsp.vim b/ale_linters/swift/sourcekitlsp.vim
new file mode 100644
index 00000000..560893bf
--- /dev/null
+++ b/ale_linters/swift/sourcekitlsp.vim
@@ -0,0 +1,13 @@
+" Author: Dan Loman <https://github.com/namolnad>
+" Description: Support for sourcekit-lsp https://github.com/apple/sourcekit-lsp
+
+call ale#Set('sourcekit_lsp_executable', 'sourcekit-lsp')
+
+call ale#linter#Define('swift', {
+\ 'name': 'sourcekitlsp',
+\ 'lsp': 'stdio',
+\ 'executable': {b -> ale#Var(b, 'sourcekit_lsp_executable')},
+\ 'command': '%e',
+\ 'project_root': function('ale#swift#FindProjectRoot'),
+\ 'language': 'swift',
+\})
diff --git a/autoload/ale/swift.vim b/autoload/ale/swift.vim
new file mode 100644
index 00000000..b31b8dc5
--- /dev/null
+++ b/autoload/ale/swift.vim
@@ -0,0 +1,13 @@
+" Author: Dan Loman <https://github.com/namolnad>
+" Description: Functions for integrating with Swift tools
+
+" Find the nearest dir containing a Package.swift file and assume it is the root of the Swift project.
+function! ale#swift#FindProjectRoot(buffer) abort
+ let l:swift_config = ale#path#FindNearestFile(a:buffer, 'Package.swift')
+
+ if !empty(l:swift_config)
+ return fnamemodify(l:swift_config, ':h')
+ endif
+
+ return ''
+endfunction
diff --git a/test/command_callback/test_swift_sourcekitlsp_command_callbacks.vader b/test/command_callback/test_swift_sourcekitlsp_command_callbacks.vader
new file mode 100644
index 00000000..4611c6de
--- /dev/null
+++ b/test/command_callback/test_swift_sourcekitlsp_command_callbacks.vader
@@ -0,0 +1,21 @@
+Before:
+ call ale#assert#SetUpLinterTest('swift', 'sourcekitlsp')
+
+After:
+ call ale#assert#TearDownLinterTest()
+
+Execute(The default executable path should be correct):
+ call ale#test#SetFilename('../swift-test-files/swift-package-project/src/folder/dummy.swift')
+
+ AssertLinter 'sourcekit-lsp', ale#Escape('sourcekit-lsp')
+
+Execute(Should let users configure a global executable and override local paths):
+ call ale#test#SetFilename('../swift-test-files/swift-package-project/src/folder/dummy.swift')
+
+ let g:ale_sourcekit_lsp_executable = '/path/to/custom/sourcekitlsp'
+
+ AssertLinter '/path/to/custom/sourcekitlsp',
+ \ ale#Escape('/path/to/custom/sourcekitlsp')
+
+Execute(The language should be correct):
+ AssertLSPLanguage 'swift'
diff --git a/test/swift-test-files/non-swift-package-project/src/folder/dummy.swift b/test/swift-test-files/non-swift-package-project/src/folder/dummy.swift
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/swift-test-files/non-swift-package-project/src/folder/dummy.swift
diff --git a/test/swift-test-files/swift-package-project/Package.swift b/test/swift-test-files/swift-package-project/Package.swift
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/swift-test-files/swift-package-project/Package.swift
diff --git a/test/swift-test-files/swift-package-project/src/folder/dummy.swift b/test/swift-test-files/swift-package-project/src/folder/dummy.swift
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/swift-test-files/swift-package-project/src/folder/dummy.swift
diff --git a/test/test_swift_find_project_root.vader b/test/test_swift_find_project_root.vader
new file mode 100644
index 00000000..7cb1cc29
--- /dev/null
+++ b/test/test_swift_find_project_root.vader
@@ -0,0 +1,18 @@
+Before:
+ call ale#test#SetDirectory('/testplugin/test')
+
+After:
+ call ale#test#RestoreDirectory()
+
+Execute(Detect root of Swift project with Package.swift correctly):
+ call ale#test#SetFilename('swift-test-files/swift-package-project/src/folder/dummy.swift')
+ AssertEqual
+ \ ale#path#Simplify(g:dir . '/swift-test-files/swift-package-project'),
+ \ ale#swift#FindProjectRoot(bufnr(''))
+
+Execute(Detect no root in case of non-Package.swift project):
+ call ale#test#SetFilename('swift-test-files/non-swift-package-project/src/folder/dummy.swift')
+ AssertEqual
+ \ '',
+ \ ale#swift#FindProjectRoot(bufnr(''))
+