summaryrefslogtreecommitdiff
path: root/ale_linters/inko/inko.vim
diff options
context:
space:
mode:
authorYorick Peterse <yorick@yorickpeterse.com>2020-10-29 18:27:27 +0100
committerYorick Peterse <yorick@yorickpeterse.com>2020-12-23 16:50:45 +0100
commit8375ee2766c4d69462b8c883ddf76d58a86891e4 (patch)
tree788aeba36d0c906359dd18a69225b8998bc508ec /ale_linters/inko/inko.vim
parent557a1ed5da70cb443a8650766f4e8ea95e8c0da3 (diff)
downloadale-8375ee2766c4d69462b8c883ddf76d58a86891e4.zip
Add linter for Inko
This adds a linter for Inko (https://inko-lang.org/). The linter makes use of Inko's own compiler, and a newly introduced --check flag to only check for errors; instead of also compiling source code.
Diffstat (limited to 'ale_linters/inko/inko.vim')
-rw-r--r--ale_linters/inko/inko.vim33
1 files changed, 33 insertions, 0 deletions
diff --git a/ale_linters/inko/inko.vim b/ale_linters/inko/inko.vim
new file mode 100644
index 00000000..11558897
--- /dev/null
+++ b/ale_linters/inko/inko.vim
@@ -0,0 +1,33 @@
+" Author: Yorick Peterse <yorick@yorickpeterse.com>
+" Description: linting of Inko source code using the Inko compiler
+
+call ale#Set('inko_inko_executable', 'inko')
+
+function! ale_linters#inko#inko#GetCommand(buffer) abort
+ let l:include = ''
+
+ " Include the tests source directory, but only for test files.
+ if expand('#' . a:buffer . ':p') =~? '\vtests[/\\]test[/\\]'
+ let l:test_dir = ale#path#FindNearestDirectory(a:buffer, 'tests')
+
+ if isdirectory(l:test_dir)
+ let l:include = '--include ' . ale#Escape(l:test_dir)
+ endif
+ endif
+
+ " We use %s instead of %t so the compiler determines the correct module
+ " names for the file being edited. Not doing so may lead to errors in
+ " certain cases.
+ return '%e build --check --format=json'
+ \ . ale#Pad(l:include)
+ \ . ' %s'
+endfunction
+
+call ale#linter#Define('inko', {
+\ 'name': 'inko',
+\ 'executable': {b -> ale#Var(b, 'inko_inko_executable')},
+\ 'command': function('ale_linters#inko#inko#GetCommand'),
+\ 'callback': 'ale#handlers#inko#Handle',
+\ 'output_stream': 'stderr',
+\ 'lint_file': 1
+\})