[`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>