oraios/serena · error · RuntimeError

R languageserver package is not installed. Install it with:

Error message

R languageserver package is not installed.
Install it with: R -e "install.packages('languageserver')"

What it means

After confirming `R` runs, `_check_r_installation()` starts `R` in vanilla slave mode and checks whether the `languageserver` package can be `require()`d. A non-zero quit status means the package is absent for that R library path, so the wrapper raises this RuntimeError with the exact install command.

Source

Thrown at src/solidlsp/language_servers/r_language_server.py:50

    @staticmethod
    def _check_r_installation() -> None:
        """Check if R and languageserver are available."""
        try:
            # Check R installation
            result = subprocess_run(["R", "--version"], capture_output=True, text=True, check=False)
            if result.returncode != 0:
                raise RuntimeError("R is not installed or not in PATH")

            # Check languageserver package
            result = subprocess_run(
                ["R", "--vanilla", "--quiet", "--slave", "-e", "if (!require('languageserver', quietly=TRUE)) quit(status=1)"],
                capture_output=True,
                text=True,
                check=False,
            )

            if result.returncode != 0:
                raise RuntimeError(
                    "R languageserver package is not installed.\nInstall it with: R -e \"install.packages('languageserver')\""
                )

        except FileNotFoundError:
            raise RuntimeError("R is not installed. Please install R from https://www.r-project.org/")

    def __init__(self, config: LanguageServerConfig, repository_root_path: str, solidlsp_settings: SolidLSPSettings):
        # Check R installation
        self._check_r_installation()

        # R command to start language server
        # Use --vanilla for minimal startup and --quiet to suppress all output except LSP
        # Set specific options to improve parsing stability
        r_cmd = 'R --vanilla --quiet --slave -e "options(languageserver.debug_mode = FALSE); languageserver::run()"'

        super().__init__(config, repository_root_path, ProcessLaunchInfo(cmd=r_cmd, cwd=repository_root_path), "r", solidlsp_settings)

    def _create_base_initialize_params(self) -> dict:

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Run `R -e "install.packages('languageserver')"` in the same R that `which R` resolves to
  2. If installing system-wide is needed, start R as root or use a site library: `sudo R -e "install.packages('languageserver', lib='/usr/local/lib/R/site-library')"`
  3. Verify with `R -e "if (!require('languageserver', quietly=TRUE)) quit(status=1)"` that it now exits 0; check `.libPaths()` if it still fails

Example fix

# before
$ R -e "require('languageserver')"  # there is no package called 'languageserver'

# after
$ R -e "install.packages('languageserver')"
$ R -e "require('languageserver')"  # loads OK
Defensive patterns

Strategy: validation

Validate before calling

import subprocess
code = "if (!require('languageserver', quietly=TRUE)) quit(status=1)"
probe = subprocess.run(["R", "--vanilla", "--quiet", "--slave", "-e", code], capture_output=True)
if probe.returncode != 0:
    subprocess.run(["R", "-e", "install.packages('languageserver')"], check=True)

Type guard

def has_r_languageserver() -> bool:
    return subprocess.run(
        ["R", "--vanilla", "--quiet", "--slave", "-e",
         "if (!require('languageserver', quietly=TRUE)) quit(status=1)"],
        capture_output=True, check=False,
    ).returncode == 0

Try / catch

try:
    server = RLanguageServer(config, repo_root, settings)
except RuntimeError as e:
    if "languageserver package is not installed" in str(e):
        subprocess.run(["R", "-e", "install.packages('languageserver')"], check=True)
        server = RLanguageServer(config, repo_root, settings)
    else:
        raise

Prevention

When it happens

Trigger: Constructing the R language server when R is installed but `require('languageserver')` fails inside `R --vanilla --quiet --slave`: languageserver never installed, or installed only in a user/other library not visible in the current environment.

Common situations: Fresh CI machines with base R but no packages; languageserver installed in a user library while running as another user (e.g. root in Docker) whose `.libPaths` differ; using a conda R that has its own separate package library.

Related errors


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/1c29eeda5b0a4b20. Report an issue: GitHub.