
## 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).
3.6 KiB
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.
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.