|
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,15 @@ 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(node: nodes.Module) -> bool: |
| 507 | + return node.qname() == "dataclasses" |
| 508 | + |
| 509 | + |
| 510 | +def _resolve_private_replace_to_public(node: nodes.Module) -> None: |
| 511 | + if "_replace" in node.locals: |
| 512 | + node.locals["replace"] = node.locals["_replace"] |
| 513 | + |
| 514 | + |
506 | 515 | def _get_field_default(field_call: nodes.Call) -> _FieldDefaultReturn: |
507 | 516 | """Return a the default value of a field call, and the corresponding keyword |
508 | 517 | argument name. |
@@ -608,6 +617,13 @@ def _infer_instance_from_annotation( |
608 | 617 |
|
609 | 618 |
|
610 | 619 | def register(manager: AstroidManager) -> None: |
| 620 | + if PY313_PLUS: |
| 621 | + manager.register_transform( |
| 622 | + nodes.Module, |
| 623 | + _resolve_private_replace_to_public, |
| 624 | + _looks_like_dataclasses, |
| 625 | + ) |
| 626 | + |
611 | 627 | manager.register_transform( |
612 | 628 | nodes.ClassDef, dataclass_transform, is_decorated_with_dataclass |
613 | 629 | ) |
|
0 commit comments