From ce2b3980aaeb51379f70a80899c6c8a85937f2ea Mon Sep 17 00:00:00 2001 From: Guilherme-Vasconcelos <49197151+Guilherme-Vasconcelos@users.noreply.github.com> Date: Wed, 13 Mar 2024 18:07:04 -0300 Subject: [PATCH 1/2] Make it clearer that a mutable default in a dataclass is only valid if it is typed as a ClassVar --- .../src/rules/ruff/rules/mutable_dataclass_default.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs b/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs index f12d8cf87a128..e721dd96f6767 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs @@ -19,8 +19,8 @@ use crate::rules::ruff::rules::helpers::{is_class_var_annotation, is_dataclass}; /// Instead of sharing mutable defaults, use the `field(default_factory=...)` /// pattern. /// -/// If the default value is intended to be mutable, it should be annotated with -/// `typing.ClassVar`. +/// If the default value is intended to be mutable, it must be annotated with +/// `typing.ClassVar`, otherwise a `ValueError` is raised. /// /// ## Examples /// ```python @@ -29,6 +29,8 @@ use crate::rules::ruff::rules::helpers::{is_class_var_annotation, is_dataclass}; /// /// @dataclass /// class A: +/// # This code does not work, it will raise a ValueError. +/// # See alternatives below. /// mutable_default: list[int] = [] /// ``` /// @@ -44,7 +46,7 @@ use crate::rules::ruff::rules::helpers::{is_class_var_annotation, is_dataclass}; /// /// Or: /// ```python -/// from dataclasses import dataclass, field +/// from dataclasses import dataclass /// from typing import ClassVar /// /// From 29430a8501a71380286a10a2eaba0883fb5e57fb Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Thu, 14 Mar 2024 19:10:53 -0400 Subject: [PATCH 2/2] Nits --- .../src/rules/ruff/rules/mutable_dataclass_default.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs b/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs index e721dd96f6767..9eebf896b523f 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/mutable_dataclass_default.rs @@ -20,7 +20,7 @@ use crate::rules::ruff::rules::helpers::{is_class_var_annotation, is_dataclass}; /// pattern. /// /// If the default value is intended to be mutable, it must be annotated with -/// `typing.ClassVar`, otherwise a `ValueError` is raised. +/// `typing.ClassVar`; otherwise, a `ValueError` will be raised. /// /// ## Examples /// ```python @@ -29,8 +29,8 @@ use crate::rules::ruff::rules::helpers::{is_class_var_annotation, is_dataclass}; /// /// @dataclass /// class A: -/// # This code does not work, it will raise a ValueError. -/// # See alternatives below. +/// # A list without a `default_factory` or `ClassVar` annotation +/// # will raise a `ValueError`. /// mutable_default: list[int] = [] /// ``` ///