cool-easter-32542
09/11/2023, 3:04 AMpants.backend.experimental.python.typecheck.pyright backend for type checking. Part of the motivation for this is so that type checking is consistent between the IDE (VS Code) and via the build system. However I'm getting errors from the PyRight backend that are wrong and not consistent with what VS Code is showing.
The input file is:
from enum import StrEnum
from typing import TypeVar
import numpy as np
import static_frame as sf
from attrs import Attribute, field, frozen, validators
from static_frame.core.index_base import IndexBase
class TestEnum(StrEnum):
Foo="Bar"
@frozen
class AttrsFrame:
pass
def _check_series_type(series_or_index: sf.Series | IndexBase, data_type: type | np.dtype, field_name: str = ""):
pass
IndexType = TypeVar("IndexType", bound=IndexBase) # pylint: disable=invalid-name
def index_field_factory(
index_class: type[IndexType] = sf.Index, index_type: type | np.dtype | None = None
) -> IndexType:
validator = [validators.instance_of(index_class)]
if index_type is not None:
def _index_type_validator(instance: AttrsFrame, attribute: Attribute, value: IndexType):
_check_series_type(value, index_type)
validator.append(_index_type_validator)
return field(validator=validator)
The output from pants check :: is:
02:59:06.20 [ERROR] Completed: Typecheck using Pyright - pyright - pyright failed (exit code 1).
Loading configuration file at /tmp/pants-sandbox-yBqex3/pyrightconfig.json
Unable to get Python version from interpreter
Assuming Python platform Linux
Auto-excluding **/node_modules
Auto-excluding **/__pycache__
Auto-excluding **/.*
Searching for source files
Found 2 source files
pyright 1.1.274
/tmp/pants-sandbox-yBqex3/src/foo.py
/tmp/pants-sandbox-yBqex3/src/foo.py:1:18 - error: "StrEnum" is unknown import symbol (reportGeneralTypeIssues)
/tmp/pants-sandbox-yBqex3/src/foo.py:28:26 - error: Argument of type "(instance: AttrsFrame, attribute: Attribute[Unknown], value: IndexType@index_field_factory) -> None" cannot be assigned to parameter "__object" of type "(Any, Attribute[IndexType@index_field_factory | Index], IndexType@index_field_factory | Index) -> Any" in function "append"
Type "(instance: AttrsFrame, attribute: Attribute[Unknown], value: IndexType@index_field_factory) -> None" cannot be assigned to type "(Any, Attribute[IndexType@index_field_factory | Index], IndexType@index_field_factory | Index) -> Any"
Parameter 3: type "IndexType@index_field_factory | Index" cannot be assigned to type "IndexType@index_field_factory"
Type "IndexType@index_field_factory | Index" cannot be assigned to type "IndexType@index_field_factory" (reportGeneralTypeIssues)
/tmp/pants-sandbox-yBqex3/src/foo.py:29:12 - error: Expression of type "IndexType@index_field_factory | Index" cannot be assigned to return type "IndexType@index_field_factory"
Type "IndexType@index_field_factory | Index" cannot be assigned to type "IndexType@index_field_factory" (reportGeneralTypeIssues)
3 errors, 0 warnings, 0 informations
Completed in 0.913sec
stubPath /tmp/pants-sandbox-yBqex3/typings is not a valid directory.
The StrEnum issue may be because it's using the wrong version of Python? StrEnum was introduced in Python 3.11.
Perhaps the other issue is a result of VS Code using the latest version of PyRight (1.1.326) whereas the PyRight backend for Pants is using 1.1.274?
Pants version
2.17
OS
Linux (in a docker contained based on python:3.11.5-slim-bookworm
"Minimal" repo to reproduce: https://github.com/olivercoleman-switchdin/pants_test
pantsbuild/pants