summaryrefslogtreecommitdiff
path: root/astroid
diff options
context:
space:
mode:
authorMarc Mueller <30130371+cdce8p@users.noreply.github.com>2023-04-24 07:23:59 +0200
committerGitHub <noreply@github.com>2023-04-24 07:23:59 +0200
commit73482936a4eabeb3e51425f3b5c56d1d9e0a9bb9 (patch)
tree07da31ecf50ffbeb08c11e1968f06c91265fa53d /astroid
parentc312218289798207813971af540fbed43c6963b5 (diff)
downloadastroid-git-73482936a4eabeb3e51425f3b5c56d1d9e0a9bb9.tar.gz
Various TryStar fixes (#2142)
Diffstat (limited to 'astroid')
-rw-r--r--astroid/__init__.py1
-rw-r--r--astroid/node_classes.py1
-rw-r--r--astroid/nodes/__init__.py2
-rw-r--r--astroid/nodes/as_string.py22
-rw-r--r--astroid/nodes/node_ng.py2
-rw-r--r--astroid/rebuilder.py6
6 files changed, 30 insertions, 4 deletions
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:
...