From 8ff5dd251f4d29bd19f15dab6a731ddfe4ffb4bd Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Thu, 8 Nov 2018 17:04:14 +0300 Subject: [PATCH] Result of `in` operation is always `bool` (PY-31956) --- .../python/psi/impl/PyBinaryExpressionImpl.java | 3 +++ python/testSrc/com/jetbrains/python/PyTypeTest.java | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/python/src/com/jetbrains/python/psi/impl/PyBinaryExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyBinaryExpressionImpl.java index 6475201e2885..8a40a586c14d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyBinaryExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyBinaryExpressionImpl.java @@ -136,6 +136,9 @@ public class PyBinaryExpressionImpl extends PyElementImpl implements PyBinaryExp } return PyUnionType.union(leftType, rightType); } + + if (PyNames.CONTAINS.equals(getReferencedName())) return PyBuiltinCache.getInstance(this).getBoolType(); + final List results = PyCallExpressionHelper.mapArguments(this, PyResolveContext.noImplicits().withTypeEvalContext(context)); if (!results.isEmpty()) { diff --git a/python/testSrc/com/jetbrains/python/PyTypeTest.java b/python/testSrc/com/jetbrains/python/PyTypeTest.java index 4e70b0e2d825..062ca6820333 100644 --- a/python/testSrc/com/jetbrains/python/PyTypeTest.java +++ b/python/testSrc/com/jetbrains/python/PyTypeTest.java @@ -3305,6 +3305,16 @@ public class PyTypeTest extends PyTestCase { " expr = a"); } + // PY-31956 + public void testInAndNotBoolContains() { + doTest("bool", + "class MyClass:\n" + + " def __contains__(self):\n" + + " return 42\n" + + "\n" + + "expr = 1 in MyClass()"); + } + // PY-32533 public void testSuperWithAnotherType() { runWithLanguageLevel(