summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/nim/nimlsp.vim33
-rw-r--r--doc/ale-nim.txt25
-rw-r--r--doc/ale-supported-languages-and-tools.txt1
-rw-r--r--doc/ale.txt3
-rw-r--r--supported-tools.md1
-rw-r--r--test/command_callback/test_nimlsp_command_callback.vader12
-rw-r--r--test/nim-test-files/with-git/src/source.nim0
-rw-r--r--test/test_nimlsp_project_root.vader19
8 files changed, 94 insertions, 0 deletions
diff --git a/ale_linters/nim/nimlsp.vim b/ale_linters/nim/nimlsp.vim
new file mode 100644
index 00000000..5d041043
--- /dev/null
+++ b/ale_linters/nim/nimlsp.vim
@@ -0,0 +1,33 @@
+" Author: jeremija <https://github.com/jeremija>
+" Description: Support for nimlsp (language server for nim)
+
+call ale#Set('nim_nimlsp_nim_sources', '')
+
+function! ale_linters#nim#nimlsp#GetProjectRoot(buffer) abort
+ let l:project_root = ale#path#FindNearestDirectory(a:buffer, '.git')
+
+ if !empty(l:project_root)
+ return fnamemodify(l:project_root, ':h:h')
+ endif
+
+ return ''
+endfunction
+
+function! ale_linters#nim#nimlsp#GetCommand(buffer) abort
+ let l:nim_sources = ale#Var(a:buffer, 'nim_nimlsp_nim_sources')
+
+ if !empty(l:nim_sources)
+ let l:nim_sources = ale#Escape(l:nim_sources)
+ endif
+
+ return '%e' . ale#Pad(l:nim_sources)
+endfunction
+
+call ale#linter#Define('nim', {
+\ 'name': 'nimlsp',
+\ 'lsp': 'stdio',
+\ 'executable': 'nimlsp',
+\ 'command': function('ale_linters#nim#nimlsp#GetCommand'),
+\ 'language': 'nim',
+\ 'project_root': function('ale_linters#nim#nimlsp#GetProjectRoot'),
+\})
diff --git a/doc/ale-nim.txt b/doc/ale-nim.txt
new file mode 100644
index 00000000..ad7aa686
--- /dev/null
+++ b/doc/ale-nim.txt
@@ -0,0 +1,25 @@
+===============================================================================
+ALE Nim Integration *ale-nim-options*
+
+
+===============================================================================
+nimcheck *ale-nim-nimcheck*
+
+ ALE does not provide additional configuration options for `nimcheck` at this
+ point.
+
+
+===============================================================================
+nimlsp *ale-nim-nimlsp*
+
+g:nim_nimlsp_nim_sources *g:nim_nimlsp_nim_sources*
+
+ Type: |String|
+ Default: `''`
+
+ Sets the path to Nim source repository as the first argument to `nimlsp`
+ command.
+
+
+===============================================================================
+ vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt
index a5b7c35e..e2379b70 100644
--- a/doc/ale-supported-languages-and-tools.txt
+++ b/doc/ale-supported-languages-and-tools.txt
@@ -282,6 +282,7 @@ Notes:
* `nasm`!!
* Nim
* `nim check`!!
+ * `nimlsp`
* nix
* `nix-instantiate`
* `nixpkgs-fmt`
diff --git a/doc/ale.txt b/doc/ale.txt
index 01b6181d..b142e956 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -2307,6 +2307,9 @@ documented in additional help files.
mmc...................................|ale-mercury-mmc|
nasm....................................|ale-nasm-options|
nasm..................................|ale-nasm-nasm|
+ nim.....................................|ale-nim-options|
+ nimcheck..............................|ale-nim-nimcheck|
+ nimlsp................................|ale-nim-nimlsp|
nix.....................................|ale-nix-options|
nixpkgs-fmt...........................|ale-nix-nixpkgs-fmt|
nroff...................................|ale-nroff-options|
diff --git a/supported-tools.md b/supported-tools.md
index 226baeaf..c302d38c 100644
--- a/supported-tools.md
+++ b/supported-tools.md
@@ -291,6 +291,7 @@ formatting.
* [nasm](https://www.nasm.us/) :floppy_disk:
* Nim
* [nim check](https://nim-lang.org/docs/nimc.html) :floppy_disk:
+ * [nimlsp](https://github.com/PMunch/nimlsp)
* nix
* [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate)
* [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt)
diff --git a/test/command_callback/test_nimlsp_command_callback.vader b/test/command_callback/test_nimlsp_command_callback.vader
new file mode 100644
index 00000000..c109deef
--- /dev/null
+++ b/test/command_callback/test_nimlsp_command_callback.vader
@@ -0,0 +1,12 @@
+Before:
+ call ale#assert#SetUpLinterTest('nim', 'nimlsp')
+
+After:
+ call ale#assert#TearDownLinterTest()
+
+Execute(It does not set nim sources by default):
+ AssertLinter 'nimlsp', ale#Escape('nimlsp')
+
+Execute(Sets nimlsp and escapes sources from g:ale_nim_nimlsp_nim_sources):
+ let g:ale_nim_nimlsp_nim_sources = '/path/to /Nim'
+ AssertLinter 'nimlsp', ale#Escape('nimlsp') . ' ' . ale#Escape('/path/to /Nim')
diff --git a/test/nim-test-files/with-git/src/source.nim b/test/nim-test-files/with-git/src/source.nim
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/nim-test-files/with-git/src/source.nim
diff --git a/test/test_nimlsp_project_root.vader b/test/test_nimlsp_project_root.vader
new file mode 100644
index 00000000..e7027575
--- /dev/null
+++ b/test/test_nimlsp_project_root.vader
@@ -0,0 +1,19 @@
+Before:
+ runtime ale_linters/nim/nimlsp.vim
+ call ale#test#SetDirectory('/testplugin/test')
+
+After:
+ if isdirectory(g:dir . '/.git')
+ call delete(g:dir . '/.git', 'd')
+ endif
+
+ call ale#test#RestoreDirectory()
+ call ale#linter#Reset()
+
+
+Execute(Detect root of nim project with .git/ correctly):
+ call ale#test#SetFilename('nim-test-files/with-git/src/source.nim')
+ call mkdir(g:dir . '/.git')
+ AssertEqual
+ \ ale#path#Simplify(g:dir),
+ \ ale_linters#nim#nimlsp#GetProjectRoot(bufnr(''))