ruff/docs/preview.md
Zanie Blue a0ef087e73 Add rule deprecation infrastructure (#9689)
Adds a new `Deprecated` rule group in addition to `Stable` and
`Preview`.

Deprecated rules:
- Warn on explicit selection without preview
- Error on explicit selection with preview
- Are excluded when selected by prefix with preview

Deprecates `TRY200`, `ANN101`, and `ANN102` as a proof of concept. We
can consider deprecating them separately.
2024-02-01 13:35:02 -06:00

150 lines
3.3 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.
## Deprecated rules
When preview mode is enabled, deprecated rules will be disabled. If a deprecated rule is selected explicitly, an
error will be raised. Deprecated rules will not be included if selected via a rule category or prefix.