Skip to content

Commit

Permalink
False positive unsubscriptable-object (#2307)
Browse files Browse the repository at this point in the history
Fix a regression in 2.15.7 for ``unsubscriptable-object``.

Raise an `InferenceError` when there is a `SyntaxError` due to an invalid `TypeVar` name.
This reverts commit 89dfb48.

Closes #2305
Closes pylint-dev/pylint#9069
  • Loading branch information
mbyrnepr2 committed Sep 26, 2023
1 parent 2380f6f commit 1f0f2f8
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 15 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 5 additions & 8 deletions astroid/brain/brain_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)


Expand Down
15 changes: 8 additions & 7 deletions tests/brain/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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()

0 comments on commit 1f0f2f8

Please sign in to comment.