.pyi file in visual studio code (python extension) in my case _csv.pyi file has more details on type hints compared to the .pyi file generated by mypy stubgen
for example, in the code below you can see both .pyi file
visual studio code _csv.pyi:
from typing import Any, Iterable, Iterator, Protocol, Union
from typing_extensions import Literal
__version__: str
QUOTE_ALL: Literal[1]
QUOTE_MINIMAL: Literal[0]
QUOTE_NONE: Literal[3]
QUOTE_NONNUMERIC: Literal[2]
class Error(Exception): ...
class Dialect:
delimiter: str
quotechar: str | None
escapechar: str | None
doublequote: bool
skipinitialspace: bool
lineterminator: str
quoting: int
strict: int
def __init__(self) -> None: ...
_DialectLike = Union[str, Dialect, type[Dialect]]
class _reader(Iterator[list[str]]):
dialect: Dialect
line_num: int
def __next__(self) -> list[str]: ...
class _writer:
dialect: Dialect
def writerow(self, row: Iterable[Any]) -> Any: ...
def writerows(self, rows: Iterable[Iterable[Any]]) -> None: ...
class _Writer(Protocol):
def write(self, __s: str) -> object: ...
def writer(csvfile: _Writer, dialect: _DialectLike = ..., **fmtparams: Any) -> _writer: ...
def reader(csvfile: Iterable[str], dialect: _DialectLike = ..., **fmtparams: Any) -> _reader: ...
def register_dialect(name: str, dialect: Any = ..., **fmtparams: Any) -> None: ...
def unregister_dialect(name: str) -> None: ...
def get_dialect(name: str) -> Dialect: ...
def list_dialects() -> list[str]: ...
def field_size_limit(new_limit: int = ...) -> int: ...
mypy stubgen _csv.pyi:
from typing import Any, ClassVar
QUOTE_ALL: int
QUOTE_MINIMAL: int
QUOTE_NONE: int
QUOTE_NONNUMERIC: int
_dialects: dict
class Dialect:
delimiter: ClassVar[getset_descriptor] = ...
doublequote: ClassVar[member_descriptor] = ...
escapechar: ClassVar[getset_descriptor] = ...
lineterminator: ClassVar[getset_descriptor] = ...
quotechar: ClassVar[getset_descriptor] = ...
quoting: ClassVar[getset_descriptor] = ...
skipinitialspace: ClassVar[member_descriptor] = ...
strict: ClassVar[member_descriptor] = ...
@classmethod
def __init__(cls, *args, **kwargs) -> None: ...
class Error(Exception): ...
def field_size_limit(*args, **kwargs) -> Any: ...
def get_dialect(name) -> Any: ...
def list_dialects() -> Any: ...
def reader(*args, **kwargs) -> Any: ...
def register_dialect(*args, **kwargs) -> Any: ...
def unregister_dialect(name) -> Any: ...
def writer(*args, **kwargs) -> Any: ...
as you can see visual studio code has a more accurate type hint compared to mypy stubgen...
why is this the case? which tool visual studio code (python extension precisely) used to generate these .pyi files?
_cvs.pyi
is part of typeshed
installed with mypy
. You can see it here: https://github.com/python/typeshed/blob/master/stdlib/_csv.pyi