diff --git a/ChangeLog b/ChangeLog index 52e064edff..44143405e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -223,6 +223,16 @@ Release date: TBA Closes pylint-dev/pylint#9015 +What's New in astroid 2.15.8? +============================= +Release date: TBA + +* Fix a regression in 2.15.7 for ``unsubscriptable-object``. + + Closes #2305 + Closes pylint-dev/pylint#9069 + + What's New in astroid 2.15.7? ============================= Release date: 2023-09-23 diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py index cb3d1ce969..d4b2ca0a5a 100644 --- a/astroid/brain/brain_typing.py +++ b/astroid/brain/brain_typing.py @@ -17,6 +17,7 @@ from astroid.builder import AstroidBuilder, _extract_single_node from astroid.const import PY39_PLUS, PY312_PLUS from astroid.exceptions import ( + AstroidSyntaxError, AttributeInferenceError, InferenceError, UseInferenceDefault, @@ -136,14 +137,10 @@ def infer_typing_typevar_or_newtype( raise UseInferenceDefault typename = node.args[0].as_string().strip("'") - node = ClassDef( - name=typename, - lineno=node.lineno, - col_offset=node.col_offset, - parent=node.parent, - end_lineno=node.end_lineno, - end_col_offset=node.end_col_offset, - ) + try: + node = extract_node(TYPING_TYPE_TEMPLATE.format(typename)) + except AstroidSyntaxError as exc: + raise InferenceError from exc return node.infer(context=context_itton) diff --git a/tests/brain/test_typing.py b/tests/brain/test_typing.py index 8d75708d6d..1e8e3eaf88 100644 --- a/tests/brain/test_typing.py +++ b/tests/brain/test_typing.py @@ -2,7 +2,10 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import builder, nodes +import pytest + +from astroid import builder +from astroid.exceptions import InferenceError def test_infer_typevar() -> None: @@ -12,13 +15,11 @@ def test_infer_typevar() -> None: Test that an inferred `typing.TypeVar()` call produces a `nodes.ClassDef` node. """ - assign_node = builder.extract_node( + call_node = builder.extract_node( """ from typing import TypeVar - MyType = TypeVar('My.Type') + TypeVar('My.Type') """ ) - call = assign_node.value - inferred = next(call.infer()) - assert isinstance(inferred, nodes.ClassDef) - assert inferred.name == "My.Type" + with pytest.raises(InferenceError): + call_node.inferred()