|
19 | 19 |
|
20 | 20 | from astroid import bases, context, nodes |
21 | 21 | from astroid.builder import parse |
22 | | -from astroid.const import PY310_PLUS |
| 22 | +from astroid.const import PY310_PLUS, PY313_PLUS |
23 | 23 | from astroid.exceptions import AstroidSyntaxError, InferenceError, UseInferenceDefault |
24 | 24 | from astroid.inference_tip import inference_tip |
25 | 25 | from astroid.manager import AstroidManager |
@@ -503,6 +503,14 @@ def _looks_like_dataclass_field_call( |
503 | 503 | return inferred.name == FIELD_NAME and inferred.root().name in DATACLASS_MODULES |
504 | 504 |
|
505 | 505 |
|
| 506 | +def _looks_like_dataclasses(mod: nodes.Module): |
| 507 | + return mod.qname() == "dataclasses" |
| 508 | + |
| 509 | + |
| 510 | +def _resolve_private_replace_to_public(node): |
| 511 | + node.locals["replace"] = node.locals["_replace"] |
| 512 | + |
| 513 | + |
506 | 514 | def _get_field_default(field_call: nodes.Call) -> _FieldDefaultReturn: |
507 | 515 | """Return a the default value of a field call, and the corresponding keyword |
508 | 516 | argument name. |
@@ -608,6 +616,13 @@ def _infer_instance_from_annotation( |
608 | 616 |
|
609 | 617 |
|
610 | 618 | def register(manager: AstroidManager) -> None: |
| 619 | + if PY313_PLUS: |
| 620 | + manager.register_transform( |
| 621 | + nodes.Module, |
| 622 | + _resolve_private_replace_to_public, |
| 623 | + _looks_like_dataclasses, |
| 624 | + ) |
| 625 | + |
611 | 626 | manager.register_transform( |
612 | 627 | nodes.ClassDef, dataclass_transform, is_decorated_with_dataclass |
613 | 628 | ) |
|
0 commit comments