mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-13 15:52:01 +07:00
Also fixes PY-59014, PY-39761. PyResolveImportUtil returns both .pyi stubs and the corresponding .py files for stub packages to support partial stub packages. See the line: ``` groupedResults.topResultIs(Priority.STUB_PACKAGE) -> firstResultWithFallback(groupedResults, Priority.STUB_PACKAGE) ``` in PyResolveImportUtil.filterTopPriorityResults. It means that, for instance, resolving the QuerySet name in type hints led to QuerySet definitions from both places. Then, PyTypingTypeProvider.getType() for the reference expression "QuerySet" returned a union type containing PyClassTypes for both of them, we couldn't parameterize it in PyTypingTypeProvider.getParameterizedType and returned Any. It's wrong that while evaluating type hints, we interpret multiple declarations as a union type. Those should only be explicitly expressed with typing.Union or "|" operator. This behavior was originally added in PY-18427 as an ad-hoc way to support version checks for type hints, but now it seems detrimental because it's unclear how to parameterize such implicit unions of generic types then. Other type checkers also don't treat conditional definitions like that. For instance, for conditional type aliases, Mypy complains about the name being defined twice and then uses only the first definition, and Pyright doesn't consider names under conditions other than version checks as valid type aliases at all. Both type checkers also support partial stub packages properly. GitOrigin-RevId: 1ecc7ab5d09625d10850ddc0e1f7761332ccddd5