Skip to content

Commit

Permalink
False positive unsubscriptable-object (#2307) (#2309)
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

(cherry picked from commit 1f0f2f8)

Co-authored-by: Mark Byrne <[email protected]>
  • Loading branch information
github-actions[bot] and mbyrnepr2 authored Sep 26, 2023
1 parent 29b42e5 commit 584b1fd
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 @@ -7,6 +7,16 @@ What's New in astroid 2.15.8?
Release date: TBA


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 @@ -15,6 +15,7 @@
from astroid.builder import _extract_single_node
from astroid.const import PY38_PLUS, PY39_PLUS
from astroid.exceptions import (
AstroidSyntaxError,
AttributeInferenceError,
InferenceError,
UseInferenceDefault,
Expand Down Expand Up @@ -139,14 +140,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 @@ -5,7 +5,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 @@ -15,13 +18,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 584b1fd

Please sign in to comment.