summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/r/languageserver.vim26
-rw-r--r--doc/ale-r.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/command_callback/r_paths/.Rprofile0
-rw-r--r--test/command_callback/test_r_languageserver_callbacks.vader22
7 files changed, 74 insertions, 0 deletions
diff --git a/ale_linters/r/languageserver.vim b/ale_linters/r/languageserver.vim
new file mode 100644
index 00000000..c625d8b4
--- /dev/null
+++ b/ale_linters/r/languageserver.vim
@@ -0,0 +1,26 @@
+" Author: Eric Zhao <21zhaoe@protonmail.com>
+" Description: Implementation of the Language Server Protocol for R.
+
+call ale#Set('r_languageserver_cmd', 'languageserver::run()')
+call ale#Set('r_languageserver_options', {})
+
+function! ale_linters#r#languageserver#GetCommand(buffer) abort
+ let l:cmd_string = ale#Var(a:buffer, 'r_languageserver_cmd')
+
+ return 'Rscript --vanilla -e ' . ale#Escape(l:cmd_string)
+endfunction
+
+function! ale_linters#r#languageserver#GetProjectRoot(buffer) abort
+ let l:project_root = ale#path#FindNearestFile(a:buffer, '.Rprofile')
+
+ return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : fnamemodify(a:buffer, ':h')
+endfunction
+
+call ale#linter#Define('r', {
+\ 'name': 'languageserver',
+\ 'lsp': 'stdio',
+\ 'lsp_config': {b -> ale#Var(b, 'r_languageserver_options')},
+\ 'executable': 'Rscript',
+\ 'command': function('ale_linters#r#languageserver#GetCommand'),
+\ 'project_root': function('ale_linters#r#languageserver#GetProjectRoot')
+\})
diff --git a/doc/ale-r.txt b/doc/ale-r.txt
index b5ccebe5..2078b218 100644
--- a/doc/ale-r.txt
+++ b/doc/ale-r.txt
@@ -3,6 +3,29 @@ ALE R Integration *ale-r-options*
===============================================================================
+languageserver *ale-r-languageserver*
+
+g:ale_r_languageserver_cmd *g:ale_r_languageserver_cmd*
+ *b:ale_r_languageserver_cmd*
+ Type: |String|
+ Default: `'languageserver::run()'`
+
+ This option can be configured to change the execution command for
+ languageserver.
+
+ See the languageserver documentation for more options.
+
+
+g:ale_r_languageserver_options *g:ale_r_languageserver_options*
+ *b:ale_r_languageserver_options*
+ Type: |Dictionary|
+ Default: `{}`
+
+ This option can be configured to change settings for languageserver. See the
+ languageserver documentation for more information.
+
+
+===============================================================================
lintr *ale-r-lintr*
g:ale_r_lintr_options *g:ale_r_lintr_options*
diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt
index cc514649..f4673ec0 100644
--- a/doc/ale-supported-languages-and-tools.txt
+++ b/doc/ale-supported-languages-and-tools.txt
@@ -389,6 +389,7 @@ Notes:
* `qmlfmt`
* `qmllint`
* R
+ * `languageserver`
* `lintr`
* `styler`
* Racket
diff --git a/doc/ale.txt b/doc/ale.txt
index e8c681f9..00f43aa5 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -2854,6 +2854,7 @@ documented in additional help files.
qml.....................................|ale-qml-options|
qmlfmt................................|ale-qml-qmlfmt|
r.......................................|ale-r-options|
+ languageserver........................|ale-r-languageserver|
lintr.................................|ale-r-lintr|
styler................................|ale-r-styler|
reasonml................................|ale-reasonml-options|
diff --git a/supported-tools.md b/supported-tools.md
index 70c99a8c..e1ac8873 100644
--- a/supported-tools.md
+++ b/supported-tools.md
@@ -398,6 +398,7 @@ formatting.
* [qmlfmt](https://github.com/jesperhh/qmlfmt)
* [qmllint](https://github.com/qt/qtdeclarative/tree/5.11/tools/qmllint)
* R
+ * [languageserver](https://github.com/REditorSupport/languageserver)
* [lintr](https://github.com/jimhester/lintr)
* [styler](https://github.com/r-lib/styler)
* Racket
diff --git a/test/command_callback/r_paths/.Rprofile b/test/command_callback/r_paths/.Rprofile
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/command_callback/r_paths/.Rprofile
diff --git a/test/command_callback/test_r_languageserver_callbacks.vader b/test/command_callback/test_r_languageserver_callbacks.vader
new file mode 100644
index 00000000..7829165c
--- /dev/null
+++ b/test/command_callback/test_r_languageserver_callbacks.vader
@@ -0,0 +1,22 @@
+Before:
+ call ale#assert#SetUpLinterTest('r', 'languageserver')
+
+After:
+ call ale#assert#TearDownLinterTest()
+
+Execute(The default executable path should be correct):
+ AssertLinter 'Rscript', 'Rscript --vanilla -e ' . ale#Escape('languageserver::run()')
+
+Execute(The project root should be detected correctly):
+ AssertLSPProject '.'
+
+ call ale#test#SetFilename('r_paths/dummy/test.R')
+
+ AssertLSPProject ale#path#Simplify(g:dir . '/r_paths')
+
+Execute(Should accept configuration settings):
+ AssertLSPConfig {}
+
+ let b:ale_r_languageserver_options = {'r': {'lsp': {'debug': 'true', 'diagnostics': 'true'}}}
+
+ AssertLSPConfig {'r': {'lsp': {'debug': 'true', 'diagnostics': 'true'}}}