From 73482936a4eabeb3e51425f3b5c56d1d9e0a9bb9 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 24 Apr 2023 07:23:59 +0200 Subject: Various TryStar fixes (#2142) --- astroid/__init__.py | 1 + astroid/node_classes.py | 1 + astroid/nodes/__init__.py | 2 ++ astroid/nodes/as_string.py | 22 +++++++++++++++++++--- astroid/nodes/node_ng.py | 2 +- astroid/rebuilder.py | 6 ++++++ 6 files changed, 30 insertions(+), 4 deletions(-) (limited to 'astroid') diff --git a/astroid/__init__.py b/astroid/__init__.py index 605a8b48..bcb0c2c2 100644 --- a/astroid/__init__.py +++ b/astroid/__init__.py @@ -165,6 +165,7 @@ from astroid.nodes import ( # pylint: disable=redefined-builtin (Ellipsis) Subscript, TryExcept, TryFinally, + TryStar, Tuple, UnaryOp, Unknown, diff --git a/astroid/node_classes.py b/astroid/node_classes.py index 9ea1e8d2..64709632 100644 --- a/astroid/node_classes.py +++ b/astroid/node_classes.py @@ -76,6 +76,7 @@ from astroid.nodes.node_classes import ( # pylint: disable=redefined-builtin (E Subscript, TryExcept, TryFinally, + TryStar, Tuple, UnaryOp, Unknown, diff --git a/astroid/nodes/__init__.py b/astroid/nodes/__init__.py index b527ff7c..157aa242 100644 --- a/astroid/nodes/__init__.py +++ b/astroid/nodes/__init__.py @@ -197,6 +197,7 @@ ALL_NODE_CLASSES = ( Subscript, TryExcept, TryFinally, + TryStar, Tuple, UnaryOp, Unknown, @@ -291,6 +292,7 @@ __all__ = ( "Subscript", "TryExcept", "TryFinally", + "TryStar", "Tuple", "UnaryOp", "Unknown", diff --git a/astroid/nodes/as_string.py b/astroid/nodes/as_string.py index cbd5ee17..ae55ab8b 100644 --- a/astroid/nodes/as_string.py +++ b/astroid/nodes/as_string.py @@ -9,6 +9,8 @@ from __future__ import annotations from collections.abc import Iterator from typing import TYPE_CHECKING +from astroid import nodes + if TYPE_CHECKING: from astroid.nodes import Const from astroid.nodes.node_classes import ( @@ -254,13 +256,16 @@ class AsStringVisitor: return "" def visit_excepthandler(self, node) -> str: + n = "except" + if isinstance(getattr(node, "parent", None), nodes.TryStar): + n = "except*" if node.type: if node.name: - excs = f"except {node.type.accept(self)} as {node.name.accept(self)}" + excs = f"{n} {node.type.accept(self)} as {node.name.accept(self)}" else: - excs = f"except {node.type.accept(self)}" + excs = f"{n} {node.type.accept(self)}" else: - excs = "except" + excs = f"{n}" return f"{excs}:\n{self._stmt_list(node.body)}" def visit_empty(self, node) -> str: @@ -495,6 +500,17 @@ class AsStringVisitor: self._stmt_list(node.body), self._stmt_list(node.finalbody) ) + def visit_trystar(self, node) -> str: + """return an astroid.TryStar node as string""" + trys = [f"try:\n{self._stmt_list(node.body)}"] + for handler in node.handlers: + trys.append(handler.accept(self)) + if node.orelse: + trys.append(f"else:\n{self._stmt_list(node.orelse)}") + if node.finalbody: + trys.append(f"finally:\n{self._stmt_list(node.finalbody)}") + return "\n".join(trys) + def visit_tuple(self, node) -> str: """return an astroid.Tuple node as string""" if len(node.elts) == 1: diff --git a/astroid/nodes/node_ng.py b/astroid/nodes/node_ng.py index 617f8ba4..3f8222e2 100644 --- a/astroid/nodes/node_ng.py +++ b/astroid/nodes/node_ng.py @@ -590,7 +590,7 @@ class NodeNG: yield from () def _infer_name(self, frame, name): - # overridden for ImportFrom, Import, Global, TryExcept and Arguments + # overridden for ImportFrom, Import, Global, TryExcept, TryStar and Arguments pass def _infer( diff --git a/astroid/rebuilder.py b/astroid/rebuilder.py index 6e996def..0d409c49 100644 --- a/astroid/rebuilder.py +++ b/astroid/rebuilder.py @@ -507,6 +507,12 @@ class TreeRebuilder: ) -> nodes.TryExcept | nodes.TryFinally: ... + if sys.version_info >= (3, 11): + + @overload + def visit(self, node: ast.TryStar, parent: NodeNG) -> nodes.TryStar: + ... + @overload def visit(self, node: ast.Tuple, parent: NodeNG) -> nodes.Tuple: ... -- cgit v1.2.1