Skip to content

Commit

Permalink
Add advice for fixing RUF008 when mutability is not desired
Browse files Browse the repository at this point in the history
A common mistake in Python code is creating global mutable state by
assigning class attributes that are mutable (e.g. a list or dictionary).
`RUF012` helpfully catches this mistake and can be used to prevent
inadvertent global state form being created.

The description of that rule helpfully provides advice for adjusting
code to stop beigng reported as an error *if the attribute should be
mutable*, but does not say how the error can be avoided when mutability
is not the goal.

This change adds that advice, so that both possibilities are accounted
for.
  • Loading branch information
samueljsb committed Nov 27, 2023
1 parent 0202a49 commit b319d4a
Showing 1 changed file with 5 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ use crate::rules::ruff::rules::helpers::{
/// changed in one instance, as those changes will unexpectedly affect all
/// other instances.
///
/// When mutable value are intended, they should be annotated with
/// `typing.ClassVar`.
/// When mutable values are intended, they should be annotated with
/// `typing.ClassVar`. When mutability is not required, they should be
/// immutable types, like `tuple` or `frozenset`.
///
/// ## Examples
/// ```python
/// class A:
/// mutable_default: list[int] = []
/// immutable_default: list[int] = []
/// ```
///
/// Use instead:
Expand All @@ -36,6 +38,7 @@ use crate::rules::ruff::rules::helpers::{
///
/// class A:
/// mutable_default: ClassVar[list[int]] = []
/// immutable_default: tuple[int, ...] = ()
/// ```
#[violation]
pub struct MutableClassDefault;
Expand Down

0 comments on commit b319d4a

Please sign in to comment.