ruff/docs/editors/migration.md
Dhruv Manilawala 648cca199b
Add docs for Ruff language server (#12344)
## Summary

This PR adds documentation for the Ruff language server.

It mainly does the following:
1. Combines various READMEs containing instructions for different editor
setup in their respective section on the online docs
2. Provide an enumerated list of server settings. Additionally, it also
provides a section for VS Code specific options.
3. Adds a "Features" section which enumerates all the current
capabilities of the native server

For (2), the settings documentation is done manually but a future
improvement (easier after `ruff-lsp` is deprecated) is to move the docs
in to Rust struct and generate the documentation from the code itself.
And, the VS Code extension specific options can be generated by diffing
against the `package.json` in `ruff-vscode` repository.

### Structure

1. Setup: This section contains the configuration for setting up the
language server for different editors
2. Features: This section contains a list of capabilities provided by
the server along with short GIF to showcase it
3. Settings: This section contains an enumerated list of settings in a
similar format to the one for the linter / formatter
4. Migrating from `ruff-lsp`

> [!NOTE]
>
> The settings page is manually written but could possibly be
auto-generated via a macro similar to `OptionsMetadata` on the
`ClientSettings` struct

resolves: #11217 

## Test Plan

Generate and open the documentation locally using:
1. `python scripts/generate_mkdocs.py`
2. `mkdocs serve -f mkdocs.insiders.yml`
2024-07-18 17:41:43 +05:30

2.6 KiB

Migrating from ruff-lsp

While ruff server supports the same feature set as ruff-lsp, migrating to ruff server may require changes to your Ruff or language server configuration.

!!! note The VS Code extension settings include documentation to indicate which settings are supported by ruff server. As such, this migration guide is primarily targeted at editors that lack explicit documentation for ruff server settings, such as Helix or Neovim.

Unsupported Settings

Several ruff-lsp settings are not supported by ruff server. These are, as follows:

  • format.args
  • ignoreStandardLibrary
  • interpreter
  • lint.args
  • lint.run
  • path

!!! note Some of these settings, like interpreter and path, are still accepted by the VS Code extension. path, in particular, can be used to specify a dedicated binary to use when initializing ruff server. But the language server itself will no longer accept such settings.

New Settings

ruff server introduces several new settings that ruff-lsp does not have. These are, as follows:

Several of these new settings are replacements for the now-unsupported format.args and lint.args. For example, if you've been passing --select=<RULES> to lint.args, you can migrate to the new server by using lint.select with a value of ["<RULES>"].

Examples

Let's say you have these settings in VS Code:

{
    "ruff.lint.args": "--select=E,F --line-length 80 --config ~/.config/custom_ruff_config.toml"
}

After enabling the native server, you can migrate your settings like so:

{
    "ruff.configuration": "~/.config/custom_ruff_config.toml",
    "ruff.lineLength": 80,
    "ruff.lint.select": ["E", "F"]
}

Similarly, let's say you have these settings in Helix:

[language-server.ruff.config.lint]
args = "--select=E,F --line-length 80 --config ~/.config/custom_ruff_config.toml"

These can be migrated like so:

[language-server.ruff.config]
configuration = "~/.config/custom_ruff_config.toml"
lineLength = 80

[language-server.ruff.config.lint]
select = ["E", "F"]