languageserver: An implementation of the Language Server Protocol for R
languageserver is an implement of the Microsoft's Language Server Protocol for the language of R.
It is released on CRAN and can be easily installed by
install.packages("languageserver")The development version of languageserver could be installed by running the following in R
source("https://install-github.me/REditorSupport/languageserver")Rmarkdown
The R package knitr is required to enable languageserver for Rmarkdown files. languageserver doesn't specify knitr as a dependency however, users may need to install it manually.
Language Clients
These editors are supported by installing the corresponding package.
VSCode: vscode-r-lsp
Atom: atom-ide-r
Sublime Text: R-IDE
Vim/NeoVim: LanguageClient-neovim with settings
let g:LanguageClient_serverCommands = { \ 'r': ['R', '--slave', '-e', 'languageserver::run()'], \ }EMacs: lsp-mode with settings
(lsp-register-client (make-lsp-client :new-connection (lsp-stdio-connection '("R" "--slave" "-e" "languageserver::run()")) :major-modes '(ess-r-mode inferior-ess-r-mode) :server-id 'lsp-R))
Services Implemented
languageserver is still under active development, the following services have been implemented:
- textDocumentSync (diagnostics)
- hoverProvider
- completionProvider
- signatureHelpProvider
- definitionProvider
- referencesProvider
- documentHighlightProvider
- documentSymbolProvider
- workspaceSymbolProvider
- codeActionProvider
- codeLensProvider
- documentFormattingProvider
- documentRangeFormattingProvider
- documentOnTypeFormattingProvider
- renameProvider
- documentLinkProvider
- executeCommandProvider
Settings
languageserver exposes the following settings via workspace/didChangeConfiguration
{
"r.lsp.debug": {
"type": "boolean",
"default": false,
"description": "Debug R Language Server"
},
"r.lsp.diagnostics": {
"type": "boolean",
"default": true,
"description": "Enable Diagnostics"
}
}FAQ
Linters
With lintr v2.0.0, the linters can be specified by creating the .lintr file at the project or home directory. Details can be found at lintr documentation. The option languageserver.default_linters is now deprecated in favor of the .lintr approach.
Customizing formatting style
The language server uses styler to perform code formatting. It uses styler::tidyverse_style(indent_by = options$tabSize) as the default style where options is the formatting
options.
The formatting style can be customized by specifying languageserver.formatting_style option which
is supposed to be a function that accepts an options argument mentioned above. You could consider to put the code in .Rprofile.
styler::tidyverse_style provides numerous arguments to customize the formatting behavior. For example, to make it only work at indention scope:
options(languageserver.formatting_style = function(options) {
styler::tidyverse_style(scope = "indention", indent_by = options$tabSize)
})To disable assignment operator fix (replacing = with <-):
options(languageserver.formatting_style = function(options) {
style <- styler::tidyverse_style(indent_by = options$tabSize)
style$token$force_assignment_op <- NULL
style
})To further customize the formatting style, please refer to Customizing styler.