diff --git a/python/psi-api/src/com/jetbrains/python/psi/PySubscriptionExpression.java b/python/psi-api/src/com/jetbrains/python/psi/PySubscriptionExpression.java index 199b6b1fa9ff..c7135ecabc0a 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PySubscriptionExpression.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PySubscriptionExpression.java @@ -15,9 +15,11 @@ */ package com.jetbrains.python.psi; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -35,6 +37,12 @@ public interface PySubscriptionExpression extends PyQualifiedExpression, PyCallS @NotNull @Override default List getArguments(@Nullable PyCallable resolvedCallee) { + if (AccessDirection.of(this) == AccessDirection.WRITE) { + final PsiElement parent = getParent(); + if (parent instanceof PyAssignmentStatement) { + return Arrays.asList(getIndexExpression(), ((PyAssignmentStatement)parent).getAssignedValue()); + } + } return Collections.singletonList(getIndexExpression()); } diff --git a/python/testData/inspections/PyTypeCheckerInspection/AssigningToDictEntry.py b/python/testData/inspections/PyTypeCheckerInspection/AssigningToDictEntry.py new file mode 100644 index 000000000000..0ff7d43c229e --- /dev/null +++ b/python/testData/inspections/PyTypeCheckerInspection/AssigningToDictEntry.py @@ -0,0 +1,5 @@ +from typing import Dict + +data = {} # type: Dict[int, str] +data['test'] = 12 +data[12] = 'test' \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java index 416a5e14be1b..87c260069fc1 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java @@ -530,4 +530,9 @@ public class PyTypeCheckerInspectionTest extends PyInspectionTestCase { public void testOverloadedFunctionAssignedToTargetInStub() { doMultiFileTest(); } + + // PY-27949 + public void testAssigningToDictEntry() { + doTest(); + } }