summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoracio Sanson <hsanson@gmail.com>2022-11-25 22:13:38 +0900
committerGitHub <noreply@github.com>2022-11-25 13:13:38 +0000
commit3e460fa93bea6f814a683b3d02efa9ce3372b928 (patch)
treeda5004088b51631243845d45c07d2341d0750a0c
parent46e77fad778344926f538748ccaa66cc28fa8152 (diff)
downloadale-3e460fa93bea6f814a683b3d02efa9ce3372b928.zip
Fix 4246 - Add ansible language-server (#4355)
-rw-r--r--ale_linters/ansible/ansible_language_server.vim46
-rw-r--r--doc/ale-ansible.txt23
-rw-r--r--doc/ale-supported-languages-and-tools.txt1
-rw-r--r--doc/ale.txt1
-rw-r--r--supported-tools.md1
-rw-r--r--test/linter/test_ansible_language_server.vader18
6 files changed, 90 insertions, 0 deletions
diff --git a/ale_linters/ansible/ansible_language_server.vim b/ale_linters/ansible/ansible_language_server.vim
new file mode 100644
index 00000000..d1f3fb7d
--- /dev/null
+++ b/ale_linters/ansible/ansible_language_server.vim
@@ -0,0 +1,46 @@
+" Author: Horacio Sanson <https://github.com/hsanson>
+" Description: Support ansible language server https://github.com/ansible/ansible-language-server/
+
+call ale#Set('ansible_language_server_executable', 'ansible-language-server')
+call ale#Set('ansible_language_server_config', {})
+
+function! ale_linters#ansible#ansible_language_server#Executable(buffer) abort
+ return ale#Var(a:buffer, 'ansible_language_server_executable')
+endfunction
+
+function! ale_linters#ansible#ansible_language_server#GetCommand(buffer) abort
+ let l:executable = ale_linters#ansible#ansible_language_server#Executable(a:buffer)
+
+ return ale#Escape(l:executable) . ' --stdio'
+endfunction
+
+function! ale_linters#ansible#ansible_language_server#FindProjectRoot(buffer) abort
+ let l:dir = fnamemodify(
+ \ ale#path#FindNearestFile(a:buffer, 'ansible.cfg'),
+ \ ':h'
+ \)
+
+ if l:dir isnot# '.' && isdirectory(l:dir)
+ return l:dir
+ endif
+
+ let l:dir = fnamemodify(
+ \ ale#path#FindNearestDirectory(a:buffer, '.git'),
+ \ ':h:h'
+ \)
+
+ if l:dir isnot# '.' && isdirectory(l:dir)
+ return l:dir
+ endif
+
+ return ''
+endfunction
+
+call ale#linter#Define('ansible', {
+\ 'name': 'ansible-language-server',
+\ 'lsp': 'stdio',
+\ 'executable': function('ale_linters#ansible#ansible_language_server#Executable'),
+\ 'command': function('ale_linters#ansible#ansible_language_server#GetCommand'),
+\ 'project_root': function('ale_linters#ansible#ansible_language_server#FindProjectRoot'),
+\ 'lsp_config': {b -> ale#Var(b, 'ansible_language_server_config')}
+\})
diff --git a/doc/ale-ansible.txt b/doc/ale-ansible.txt
index 3a4efaa5..41442b08 100644
--- a/doc/ale-ansible.txt
+++ b/doc/ale-ansible.txt
@@ -1,6 +1,28 @@
===============================================================================
ALE Ansible Integration *ale-ansible-options*
+===============================================================================
+ansible-language-server *ale-ansible-language-server*
+
+
+g:ale_ansible_language_server_executable *g:ale_ansible_language_server*
+ *b:ale_ansible_language_server*
+
+ Type: |String|
+ Default: 'ansible-language-server'
+
+ Variable can be used to modify the executable used for ansible language server.
+
+
+g:ale_ansible_language_server_config *g:ale_ansible_language_server_config*
+ *b:ale_ansible_language_server_config*
+
+ Type: |Dictionary|
+ Default: '{}'
+
+ Configuration parameters sent to the language server on start. Refer to the
+ ansible language server configuration documentation for list of available
+ options: https://als.readthedocs.io/en/latest/settings/
===============================================================================
ansible-lint *ale-ansible-ansible-lint*
@@ -12,5 +34,6 @@ g:ale_ansible_ansible_lint_executable *g:ale_ansible_ansible_lint_executable*
This variable can be changed to modify the executable used for ansible-lint.
+
===============================================================================
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 7261bf2a..298c0024 100644
--- a/doc/ale-supported-languages-and-tools.txt
+++ b/doc/ale-supported-languages-and-tools.txt
@@ -18,6 +18,7 @@ Notes:
* `gcc`
* `gnatpp`
* Ansible
+ * `ansible-language-server`
* `ansible-lint`!!
* API Blueprint
* `drafter`
diff --git a/doc/ale.txt b/doc/ale.txt
index aff40fd6..a9232c4e 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -2767,6 +2767,7 @@ documented in additional help files.
gnatpp................................|ale-ada-gnatpp|
ada-language-server...................|ale-ada-language-server|
ansible.................................|ale-ansible-options|
+ ansible-language-server...............|ale-ansible-language-server|
ansible-lint..........................|ale-ansible-ansible-lint|
apkbuild................................|ale-apkbuild-options|
apkbuild-lint.........................|ale-apkbuild-apkbuild-lint|
diff --git a/supported-tools.md b/supported-tools.md
index fa84aed7..af602ca9 100644
--- a/supported-tools.md
+++ b/supported-tools.md
@@ -27,6 +27,7 @@ formatting.
* [gcc](https://gcc.gnu.org)
* [gnatpp](https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ugn/gnat_utility_programs.html#the-gnat-pretty-printer-gnatpp) :floppy_disk:
* Ansible
+ * [ansible-language-server](https://github.com/ansible/ansible-language-server/)
* [ansible-lint](https://github.com/willthames/ansible-lint) :floppy_disk:
* API Blueprint
* [drafter](https://github.com/apiaryio/drafter)
diff --git a/test/linter/test_ansible_language_server.vader b/test/linter/test_ansible_language_server.vader
new file mode 100644
index 00000000..3766972e
--- /dev/null
+++ b/test/linter/test_ansible_language_server.vader
@@ -0,0 +1,18 @@
+Before:
+ call ale#assert#SetUpLinterTest('ansible', 'ansible_language_server')
+
+After:
+ call ale#assert#TearDownLinterTest()
+
+Execute(The ansible language server command callback should return default string):
+ AssertLinter 'ansible-language-server', ale#Escape('ansible-language-server') . ' --stdio'
+
+Execute(The ansible language server executable should be configurable):
+ let g:ale_ansible_language_server_executable = '~/.local/bin/als'
+
+ AssertLinter '~/.local/bin/als' , ale#Escape('~/.local/bin/als') . ' --stdio'
+
+Execute(Should accept configuration settings):
+ AssertLSPConfig {}
+ let b:ale_ansible_language_server_config = {'ansible-language-server': {'ansible': {'completion': {'provideRedirectModules': v:false}}}}
+ AssertLSPConfig {'ansible-language-server': {'ansible': {'completion': {'provideRedirectModules': v:false}}}}