ruff/docs/editors/migration.md
Dhruv Manilawala f19cb86c5d
Update migration guide with the new ruff.configuration (#16567)
## Summary

This PR updates the migration guide to use the new `ruff.configuration`
settings update to provide a better experience.

### Preview

<details><summary>Migration page screenshot</summary>
<p>

![Ruff Editors
Migration](https://github.com/user-attachments/assets/38062dbc-a4c5-44f1-8dba-53f7f5872d77)

</p>
</details>
2025-03-10 11:50:06 +00:00

155 lines
5.3 KiB
Markdown

# Migrating from `ruff-lsp`
[`ruff-lsp`][ruff-lsp] is the [Language Server Protocol] implementation for Ruff to power the editor
integrations. It is written in Python and is a separate package from Ruff itself. The **native
server**, however, is the [Language Server Protocol] implementation which is **written in Rust** and
is available under the `ruff server` command. This guide is intended to help users migrate from
[`ruff-lsp`][ruff-lsp] to the native server.
!!! note
The native server was first introduced in Ruff version `0.3.5`. It was marked as [beta in
version `0.4.5`](https://astral.sh/blog/ruff-v0.4.5) and officially [stabilized in version
`0.5.3`](https://github.com/astral-sh/ruff/releases/tag/0.5.3). It is recommended to use the
latest version of Ruff to ensure the best experience.
The migration process involves any or all of the following:
1. Migrate [deprecated settings](#unsupported-settings) to the [new settings](#new-settings)
1. [Remove settings](#removed-settings) that are no longer supported
1. Update the `ruff` version
Read on to learn more about the unsupported or new settings, or jump to the [examples](#examples)
that enumerate some of the common settings and how to migrate them.
## Unsupported Settings
The following [`ruff-lsp`][ruff-lsp] settings are not supported by the native server:
- [`lint.run`](settings.md#lintrun): This setting is no longer relevant for the native language
server, which runs on every keystroke by default.
- [`lint.args`](settings.md#lintargs), [`format.args`](settings.md#formatargs): These settings have
been replaced by more granular settings in the native server like [`lint.select`](settings.md#select),
[`format.preview`](settings.md#format_preview), etc. along with the ability to override any
configuration using the [`configuration`](settings.md#configuration) setting.
The following settings are not accepted by the language server but are still used by the [VS Code extension].
Refer to their respective documentation for more information on how each is used by the extension:
- [`path`](settings.md#path)
- [`interpreter`](settings.md#interpreter)
## Removed Settings
Additionally, the following settings are not supported by the native server and should be removed:
- [`ignoreStandardLibrary`](settings.md#ignorestandardlibrary)
- [`showNotifications`](settings.md#shownotifications)
## New Settings
The native server introduces several new settings that [`ruff-lsp`][ruff-lsp] does not have:
- [`configuration`](settings.md#configuration)
- [`configurationPreference`](settings.md#configurationpreference)
- [`exclude`](settings.md#exclude)
- [`format.preview`](settings.md#format_preview)
- [`lineLength`](settings.md#linelength)
- [`lint.select`](settings.md#select)
- [`lint.extendSelect`](settings.md#extendselect)
- [`lint.ignore`](settings.md#ignore)
- [`lint.preview`](settings.md#lint_preview)
## Examples
All of the examples mentioned below are only valid for the [VS Code extension]. For other editors,
please refer to their respective documentation sections in the [settings](settings.md) page.
### Configuration file
If you've been providing a configuration file as shown below:
```json
{
"ruff.lint.args": "--config ~/.config/custom_ruff_config.toml",
"ruff.format.args": "--config ~/.config/custom_ruff_config.toml"
}
```
You can migrate to the new server by using the [`configuration`](settings.md#configuration) setting
like below which will apply the configuration to both the linter and the formatter:
```json
{
"ruff.configuration": "~/.config/custom_ruff_config.toml"
}
```
### `lint.args`
If you're providing the linter flags by using `ruff.lint.args` like so:
```json
{
"ruff.lint.args": "--select=E,F --unfixable=F401 --unsafe-fixes"
}
```
You can migrate to the new server by using the [`lint.select`](settings.md#select) and
[`configuration`](settings.md#configuration) setting like so:
```json
{
"ruff.lint.select": ["E", "F"],
"ruff.configuration": {
"unsafe-fixes": true,
"lint": {
"unfixable": ["F401"]
}
}
}
```
The following options can be set directly in the editor settings:
- [`lint.select`](settings.md#select)
- [`lint.extendSelect`](settings.md#extendselect)
- [`lint.ignore`](settings.md#ignore)
- [`lint.preview`](settings.md#lint_preview)
The remaining options can be set using the [`configuration`](settings.md#configuration) setting.
### `format.args`
If you're also providing formatter flags by using `ruff.format.args` like so:
```json
{
"ruff.format.args": "--line-length 80 --config='format.quote-style=double'"
}
```
You can migrate to the new server by using the [`lineLength`](settings.md#linelength) and
[`configuration`](settings.md#configuration) setting like so:
```json
{
"ruff.lineLength": 80,
"ruff.configuration": {
"format": {
"quote-style": "double"
}
}
}
```
The following options can be set directly in the editor settings:
- [`lineLength`](settings.md#linelength)
- [`format.preview`](settings.md#format_preview)
The remaining options can be set using the [`configuration`](settings.md#configuration) setting.
[language server protocol]: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/
[ruff-lsp]: https://github.com/astral-sh/ruff-lsp
[vs code extension]: https://github.com/astral-sh/ruff-vscode