Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
R
 
 
man
 
 
src
 
 
 
 
 
 
 
 
MD5
 
 
 
 
 
 
 
 

languageserver: An implementation of the Language Server Protocol for R

Gitter Build Status Github Action codecov CRAN_Status_Badge CRAN Downloads

languageserver is an implementation of the Microsoft's Language Server Protocol for the language of R.

Installation

A few dependencies are required beforehand:

# On Debian, Ubuntu, etc.
apt install --assume-yes --no-install-recommends build-essential libcurl4-openssl-dev libssl-dev libxml2-dev r-base

# On Fedora, Centos, etc.
dnf install --assumeyes --setopt=install_weak_deps=False @development-tools libcurl-devel libxml2-devel openssl-devel R

# On Alpine
apk add --no-cache curl-dev g++ gcc libxml2-dev linux-headers make R R-dev

languageserver is released on CRAN and can be easily installed by

install.packages("languageserver")

The development version of languageserver could be installed by

# install.packages("remotes")
remotes::install_github("REditorSupport/languageserver")

Language Clients

The following editors are supported by installing the corresponding extensions:

  • VS Code: vscode-R

  • Atom: atom-ide-r

  • Sublime Text: R-IDE

  • Vim/NeoVim: LanguageClient-neovim with settings

    let g:LanguageClient_serverCommands = {
        \ 'r': ['R', '--slave', '-e', 'languageserver::run()'],
        \ }

    or, if you use coc.nvim, you can do one of two things:

    • Install coc-r-lsp with:

      :CocInstall coc-r-lsp
    • or install the languageserver package in R

      install.packages("languageserver")
      # or install the developement version
      # remotes::install_github("REditorSupport/languageserver")

      Then add the following to your Coc config:

      "languageserver": {
          "R": {
              "command": "/usr/bin/R",
              "args" : [ "--slave", "-e", "languageserver::run()"],
              "filetypes" : ["r"]
          }
      }
  • Emacs: lsp-mode

  • JupyterLab: jupyterlab-lsp

Services Implemented

languageserver is still under active development, the following services have been implemented:

Settings

languageserver exposes the following settings via LSP configuration.

settings default description
r.lsp.debug false increase verbosity for debug purpose
r.lsp.log_file null file to log debug messages, fallback to stderr if empty
r.lsp.diagnostics true enable file diagnostics via lintr
r.lsp.rich_documentation true rich documentation with enhanced markdown features
r.lsp.snippet_support true enable snippets in auto completion
r.lsp.max_completions 200 maximum number of completion items
r.lsp.lint_cache false toggle caching of lint results
r.lsp.server_capabilities {} override server capabilities defined in capabilities.R. See FAQ below.
r.lsp.link_file_size_limit 16384 maximum file size (in bytes) that supports document links

These settings could also specified in .Rprofile file via options(languageserver.<SETTING_NAME> = <VALUE>). For example,

options(languageserver.snippet_support = FALSE)

will turn off snippet support globally. LSP configuration settings are always overriden by options().

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.

Customizing server capabilities

Server capabilities are defined in capabilities.R. Users could override the capabilities by specifying the LSP configuration setting server_capabilities or options(languageserver.server_capabilities) in .Rprofile. For example, to turn off definitionProvider, one could either use LSP configuration

"r": {
    "lsp": {
        "server_capabilities": {
            "definitionProvider": false
        }
    }
}

or R options

options(
    languageserver.server_capabilities = list(
        definitionProvider = FALSE
    )
)

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.

About

 This is a read-only mirror of the CRAN R package repository. languageserver — Language Server Protocol. Homepage: https://github.com/REditorSupport/languageserver/

Resources

License

Stars

Watchers

Forks

Packages

No packages published