Bug Fixes:
- Fixed bug that results in an incorrect type evaluation when
functools.partial
is used with a constructor wheretype[Self]
is passed as the first argument. - Fixed bug that resulted in a crash during type analysis.
- Fixed bug that results in false positive when indexing an enum class.
- Fixed a bug that led to a false positive error when calling the same generic function multiple times in a call expression. This bug specifically affected the case where the generic function used PEP 695 syntax.
- Fixed a bug that led to a false negative when a subclass overrides a parent class with an overloaded method in an incompatible manner.
- Fixed bug in the import resolver that allowed typeshed stubs and stub files within installed third-party libraries to take precedence over local modules.
- Fixed a bug that leads an incorrect type evaluation when binding a magic method (like
__add__
) toself
when the magic method returnsSelf
. - Fixed a bug that resulted in an incorrect type evaluation when accessing a property that returns
Self
ortype[Self]
. - Fixed bug that resulted in incorrect type evaluation of a symbol imported twice by two redundant wildcard imports.
- Fixed a bug that leads to a false positive
reportPrivateUsage
diagnostic when importing a public symbol from a "py.typed" library if that symbol is imported from a private symbol (and re-exported publicly) within the library. - Fixed a bug that led to incorrect type evaluation when an inferred method return type includes a union where the subtypes are conditioned on constraints of a constrained TypeVar that parameterizes the class. In this case, one or more of these subtypes should be eliminated when a specialized class is bound to the method.
- Add support non english works in docstring arguments.
- Fix bug in the contravariant return type check where a contravariant used in a union was not reported.
Behavior Changes:
- Changed behavior when converting a class to a callable. If the class has no
__init__
or__new__
method in its class hierarchy (other than those provided byobject
), pyright previously converted the constructor to a signature of(*args: Any, **kwargs: Any)
. It now converts it to a signature of()
(i.e. no params) unless it's atype[T]
or a protocol class. - Modified the
isinstance
type narrowing logic to retain a TypeVar when narrowing in the positive case and the value is not a constrained TypeVar.
Enhancements:
- Added "metacls" as an allowed name for the "cls" parameter in a metaclass
__new__
method. - Improved pyright's enforcement of keyword arguments passed within a
class
statement when the class has no custom metaclass or__init_subclass__
in its hierarchy. In this case, theobject.__init_subclass__
method applies, and it accepts no additional keyword arguments. Also improved the error reporting for__init_subclass__
in general. - Improved handling of
+
operator when both operands are tuples. It now produces a more accurate type when one (but not both) of the two tuples is of indeterminate length. - Updated typeshed stubs to the latest version.
- Added code to CLI to verify file specs passed on the command line. If they don't exist, emit an error and a non-zero exit code.
- Improved check for second argument to
isinstance
andissubclass
so non-runtime-checkable protocol classes are rejected. - Added special-case handling
x in y
narrowing logic for the case wherex
is adict
orMapping
andy
is an iterable ofTypedDict
s. - Added check for the use of contravariant TypeVars in an inferred return type.