mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-01 17:32:25 +00:00

## Summary The ruff configuration section is called "format", rather than "preview". Using the configuration as it was written in the docs gives an error: ``` $ ruff format --check . ruff failed Cause: TOML parse error at line 143, column 1 | 143 | [tool.ruff.preview] | ^^^^^^^^^^^^^^^^^^^ invalid type: map, expected a boolean ``` ## Test Plan Tested running `ruff format` with the following in my `pyproject.toml`: ```toml [tool.ruff.format] preview = true ``` and it worked properly (using preview rules for formatting).
154 lines
3.6 KiB
Markdown
154 lines
3.6 KiB
Markdown
# Preview
|
|
|
|
Ruff includes an opt-in preview mode to provide an opportunity for community feedback and increase confidence that
|
|
changes are a net-benefit before enabling them for everyone.
|
|
|
|
Preview mode enables a collection of newer lint rules, fixes, and formatter style changes that are
|
|
considered experimental or unstable,.
|
|
|
|
## Enabling preview mode
|
|
|
|
Preview mode can be enabled with the `--preview` flag on the CLI or by setting `preview = true` in your Ruff
|
|
configuration file.
|
|
|
|
Preview mode can be configured separately for linting and formatting (requires Ruff v0.1.1+). To enable preview lint rules without preview style formatting:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.lint]
|
|
preview = true
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[lint]
|
|
preview = true
|
|
```
|
|
|
|
To enable preview style formatting without enabling any preview lint rules:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.format]
|
|
preview = true
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[format]
|
|
preview = true
|
|
```
|
|
|
|
## Using rules that are in preview
|
|
|
|
If a rule is marked as preview, it can only be selected if preview mode is enabled. For example, consider a
|
|
hypothetical rule, `HYP001`. If `HYP001` were in preview, it would _not_ be enabled by adding following to your
|
|
config file:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.lint]
|
|
extend-select = ["HYP001"]
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[lint]
|
|
extend-select = ["HYP001"]
|
|
```
|
|
|
|
It also would _not_ be enabled by selecting the `HYP` category, like so:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.lint]
|
|
extend-select = ["HYP"]
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[lint]
|
|
extend-select = ["HYP"]
|
|
```
|
|
|
|
Similarly, it would _not_ be enabled via the `ALL` selector:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.lint]
|
|
select = ["ALL"]
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[lint]
|
|
select = ["ALL"]
|
|
```
|
|
|
|
However, it would be enabled in any of the above cases if you enabled preview in your configuration file:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.lint]
|
|
extend-select = ["HYP"]
|
|
preview = true
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[lint]
|
|
extend-select = ["HYP"]
|
|
preview = true
|
|
```
|
|
|
|
Or, if you provided the `--preview` CLI flag.
|
|
|
|
To see which rules are currently in preview, visit the [rules reference](rules.md).
|
|
|
|
## Selecting single preview rules
|
|
|
|
When preview mode is enabled, selecting rule categories or prefixes will include all preview rules that match.
|
|
If you'd prefer to opt-in to each preview rule individually, you can toggle the `explicit-preview-rules`
|
|
setting in your configuration file:
|
|
|
|
=== "pyproject.toml"
|
|
|
|
```toml
|
|
[tool.ruff.lint]
|
|
preview = true
|
|
explicit-preview-rules = true
|
|
```
|
|
|
|
=== "ruff.toml"
|
|
|
|
```toml
|
|
[lint]
|
|
preview = true
|
|
explicit-preview-rules = true
|
|
```
|
|
|
|
In our previous example, `--select` with `ALL` `HYP`, `HYP0`, or `HYP00` would not enable `HYP001`. Each preview
|
|
rule will need to be selected with its exact code, e.g. `--select ALL,HYP001`.
|
|
|
|
If preview mode is not enabled, this setting has no effect.
|
|
|
|
## Legacy behavior
|
|
|
|
Before the preview mode was introduced, new rules were added in a "nursery" category that required selection of
|
|
rules with their exact codes — similar to if `explicit-preview-rules` is enabled.
|
|
|
|
The nursery category has been deprecated and all rules in the nursery are now considered to be in preview.
|
|
For backwards compatibility, nursery rules are selectable with their exact codes without enabling preview mode.
|
|
However, this behavior will display a warning and support will be removed in a future release.
|