mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-05 16:36:56 +07:00
The rules for operators methods are the same as for regular methods, exercised by other type checkers, i.e. it's assumed that more specific overloads are defined earlier than less specific. See e921654e47fe1fc5da047950b70775e342996757 for more details. Selecting compatible operator signatures also includes matching "self" parameter against its expected type, which is necessary for supporting typing.LiteralString, where some overloads of "str" methods are made available only for literal strings. Doing so, however, revealed a few issues with how we track the direction of operator application, i.e. which operator methods should be considered "reflected" and have swapped receiver and argument. We rely on a method's name to decide but the name is lost when a "reflected" method is defined through an attribute assignment (PY-61093), and __eq__/__neq__ methods are bidirectional so their names are not enough (PY-61090). In PyUnresolvedReferencesInspectionTest.testStubAssignment we matched C1.__mul__ and in PyTypeTest.testOperatorReturnsAny we matched int.__eq__, despite the receiver and the argument being swapped, because both of the methods are declared to accept Any value. With more precise signature matching both of the tests now fail due to the aforementioned issues. On the other hand, both of the cases seem rare, so I disabled them for a while until there is a proper solution. GitOrigin-RevId: 449a584ca258fe9210f5f2bda453caf9ab4faf7b