ruff
b43a2040 - [`ruff`] Detect mutable defaults in `field` calls (`RUF008`) (#23046)

Commit
83 days ago
[`ruff`] Detect mutable defaults in `field` calls (`RUF008`) (#23046) ## Summary Resolves #16495. RUF008 previously only caught bare mutable defaults like `mutable_default: list[int] = []` in dataclass attributes, but missed mutable defaults wrapped in `field(default=...)` calls. For example, the following was not flagged: ```python @define class A: mutable_default: list[int] = attrs.field(default=[]) ``` This PR modifies `mutable_dataclass_default()` to look inside recognized dataclass field calls (`dataclasses.field()`, `attrs.field()`, `attr.ib()`, `attr.attrib()`) and check the `default` keyword argument for mutability. The approach mirrors how RUF009 already uses `is_dataclass_field()` to identify field calls — RUF008 now reuses the same helper to extract and inspect the `default` keyword argument. No duplicate diagnostics are introduced since RUF009 already skips field calls entirely. ## Test Plan `cargo nextest run -p ruff_linter` and `cargo clippy`. Added test cases covering: - Positive: `field(default=[])`, `attrs.field(default={})`, `attr.ib(default=[])`, `attr.attrib(default=set())`, `field(default=dict())` - Negative: `factory=list`, `default=()`, `default="hello"`, `default=1`, `default=KNOWINGLY_MUTABLE_DEFAULT`, `ClassVar` annotation with `field(default=[])` --------- Co-authored-by: Brent Westbrook <36778786+ntBre@users.noreply.github.com> Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
Author
Parents
Loading