Releases: microsoft/pyright
Releases Β· microsoft/pyright
Published 1.1.368
Bug Fixes:
- Fixed a bug that causes
warnings.deprecatednot to work if the python version is 3.13. This was caused by recent changes to typeshed stubs. - Fixed bug that results in inconsistent diagnostics when surrounding an argument expression with parentheses.
- Fixed bug that causes a "bare"
type(with no type argument) ortype[Any]to be treated as a possible descriptor object. - Fixed regression that results in an internal assertion (and crash) related to TypeVar variance inference.
- Fixed a bug in the "type printer" (the component responsible for translating a type into its textual form) for type aliases defined using PEP 695 syntax.
- Fixed bug that resulted in the incorrect synthesis of
__dataclass_fields__for named tuples. - (Contributed by @insync) Fixed
stubPath's default value in configuration schema. - Fixed bug in pattern matching for
Callable()in the negative (fall-through) case. - Fixed bug that results in unions consisting of different specialized forms of a generic TypedDict to "lose" all but one of these subtypes.
Behavior Changes:
- Changed inference behavior for generator functions with no reachable
yieldoryield fromstatements. The "yield type" (the first type argument toGenerator) is now inferred asNeverin this case rather thanNone. - Changed the behavior of double underscored symbols that are part of a module's namespace when that module is not a stub or in a "py.typed" package. Such symbols are no longer ignored, although they are considered private.
- Changed the way that PEP 695 type aliases are displayed when hovering over a reference to the type alias. Previously, the symbol was displayed as
TypeAliasTyperather than the expanded type alias type.
Enhancements:
- Added support for
deprecatedobjects that are instantiated prior to being used as a decorator. This allows for a factory usage pattern. - Added check for illegal use of
Protocoltype argument that is not a type parameter. The runtime generates an exception for this condition.
Published 1.1.367
Bug Fixes:
- Fixed bug that results in incorrect truthy/falsy type narrowing for an enum that overrides
__bool__. - Fixed bug that results in a false positive when accessing a generic attribute in a base class from a subclass that explicitly specializes the generic type.
- Fixed bug that results in duplicate and (contradictory) diagnostic outputs in certain cases where
reveal_typeis used in a loop. - Fixed a bug that results in incorrect (local) type evaluation of an instance variable with a declared type when assigned within a loop that uses an augmented assignment.
- Fixed bug that causes
Finalannotation not to be honored when wrapped in anAnnotatedannotation. - Fixed bug that results in a false positive error under certain circumstances involving tuple type narrowing in a loop.
- Fixed bug that led to divergent behaviors between pyrightconfig.json and pyproject.toml configurations. Specifically, default exclude patterns were not added in the case of pyproject.toml. Thanks to @augustelalande for contributing to this fix.
- Fixed bug that results in parameter types being converted to
Anywhen converting aNewTypeor dataclass constructor to a callable.
Enhancements:
- Updated typeshed stubs to the latest version.
- Implemented provisional support for PEP 746, which provides consistency checks for metadata used in an
Annotatedannotation. - Added check for
except*to enforce that exception class does not derive fromBaseExceptionGroup. - Added the ability to override type checking configuration settings for each execution environment. This allows, for example, a test directory to use different settings than the directories that contain production code.
Behavior Changes:
- Added extra blank line to JSON output to assist with parsing when used in watch mode.
- Changed the import resolution order to better reflect runtime behavior and match a proposed change to the typing spec. In particular, stdlib typeshed stubs are now resolved prior to
site_packages.
Published 1.1.366
Bug Fixes:
- Fixed bug that results in a false positive error under certain circumstances involving a call to a higher-order generic function with another function that involves a class with a contravariant type variable.
- Fixed bug that results in a confusing error message when stub generation fails.
- Fixed bug that results in false positive when evaluating the call to a generic function that involves a type variable used in both a covariant and contravariant (or invariant) position and both literal and non-literal types are involved.
- Fixed bug that results in a false negative when solving a type variable that involves an invariant context.
- Fixed a bug that can result in incorrect type inference for a subexpression that is part of an assignment expression if executed with an inference context (bidirectional type inference).
- Fixed bug in
x is Etype narrowing pattern whereEis an enum literal andxis a supertype ofElikeobject.
Behavior Changes:
- Changed behavior of constructor call evaluation when
__new__evaluation results in type evaluation errors. Previously, pyright skipped the__init__evaluation in this case. It now proceeds to evaluate__init__, potentially generating redundant errors. - Removed support for inlined TypedDict annotations. This was an experimental feature that never gained enough support to make it into a PEP.
- Changed behavior of pyright to match the latest typing spec when it encounters an attribute with a type annotation within an
Enumclass body in a stub. These are now treated as non-member attributes rather than members. Typeshed stubs have been updated to conform to the new standard. - Added diagnostic check for an enum member with a type annotation. The typing spec says that this should be considered a typing error.
Enhancements:
- Updated typeshed stubs to the latest version.
Published 1.1.365
Bug Fixes:
- Fixed regression that results in the incorrect type evaluation for the
valueattribute of aStrEnumorIntEnumclass. - Fixed a bug that results in incorrect type compatibility checks for a callable that uses
*args: *tuple[T, *tuple[S, ...]]. - Fixed a bug that results in an unsolved TypeVar when calling
list(tuple()). - Fixed bug that leads to inconsistent narrowing-on-assignment behavior when a
tupleinstance with unknown type arguments is assigned to a target symbol with a declaredtupletype. - Fixed bug that results in a false negative when a
Finalclass variable is assigned a value in the class body and reassigned a value in the__init__method.
Behavior Changes:
- Changed tuple expression inference behavior to not preserve literal entry types if the tuple expression is embedded within another tuple, set, list, or dictionary expression.
- [Contribution by @ujan-r] Use typeshed version info for stdlib module list.
Enhancements:
- Improved diagnostic messages for parameter mismatch.
- Added support for configuration inheritance through an "extends" configuration option.
- Added support for custom ".toml" files specified via the
-poption on the command line.
Published 1.1.364
Bug Fixes:
- Fixed bug that results in a false negative syntax error when a PEP-695 type alias uses a keyword as a name.
- Fixed a bug that leads to a false positive error when first argument to
supercall is an instance of a metaclass. - Fixed recent regression that results in a false positive when accessing an enum member from an instance of an enum class.
- Fixed bug that results in a false negative when determining if a callable type is compatible with another callable type and the first has a
*argsparameter and the second has a single positional+keyword parameter. - Fixed a bug in the code flow engine that results in incorrect type evaluation in certain cases involving codependent variables in a loop.
- Fixed a bug that results in incorrect type narrowing for a type guard function that uses
TypeIs[type[T]]. - Fixed regression related to "converter" field parameter for dataclasses when the converter refers to a generic class constructor.
- Fixed a bug that results in a false negative when a generic function has a parameter with a generic type and a default argument value. This could lead to a typing hole when considering subtyping rules for callables.
- Fixed a bug in the dataclass "converter" support that resulted in an error if the converter is
tuple. - Fixed regression that results in incorrect type evaluation for annotations that involve nested protocols (such as
P[P[T]]). - Fixed a bug that resulted in an infinite loop when a function that uses an
*args: *Tsparameter is passed as an argument to itself. - Fixed bug that leads to a false negative when calling a callback function that returns a callable with a generic parameter type.
Behavior Changes:
- Changed the handling of
Enumsubclasses that explicitly overridevalueornameto avoid using the special-case logic for computing these types. This is done regardless of whether the class uses a custom metaclass. - Changed support for dataclass "converter" field parameter to be off by default. The "enableExperimentalFeatures" must now be enabled to use this feature. If and when PEP 712 is approved, it will be moved out of experimental.
- Added support for using
Literaland various other special forms in a value expression.
Enhancements:
- Added support for recent addendum to typing spec that provides a special case for dataclasses so
ClassVarandFinalcan be used together to distinguish between a regularFinalinstance variable and aClassVarthat is alsoFinal. - Updated typeshed stubs to the latest version.
- Improved type printer (the component that converts an internal type to textual format for diagnostic messages) so it better handles special forms like
Literalor unions when used in a value expression.
Published 1.1.363
Bug Fixes:
- Updated manifest to reflect the correct default value for
reportInvalidTypeForm. - Fixed bug that resulted in diagnostics associated with the
reportUnnecessaryTypeIgnoreCommentcheck to not include the error code. - Fixed bug that causes a false positive
reportPrivateUsageerror when a global or nonlocal binding is used within a class to access an outer-scoped variable. - Fixed bug that results in a false positive
reportUnnecessaryComparisonwhen a variable is used in a conditional expression and its type is a union that includes aCoroutineand a non-coroutine. - Fixed false positive
deprecatedTypingAliasesdeprecation forcollections.abc.AbstractSetdue to a recent change in typeshed stubs. - Fixed recent regression that results in
assert_typefailure when a class is parameterized by a ParamSpec with a default value. - Improved handling of constrained TypeVars when used with unary operators.
- Fixed bug that results in incorrect type narrowing for a tuple with determinate length when indexed with an out-of-bounds slice.
- Fixed bug that results in incorrect type narrowing for
isinstanceorissubclasstype guard when the filter is a generic class whose type parameter has a default value. - Fixed bug that results in incorrect type evaluation behavior within class body of an enum class when one enum member is used to define another enum member. This involved a significant rewrite of the logic involving enum symbol evaluation.
- Fixed a bug that results in a false positive error when a decorator is applied to a property.
- Fixed bug that resulted in false positive when evaluating a function call involving a TypeVarTuple under certain circumstances.
- Fixed a bug that results in incorrect type evaluation when a function parameterized with a TypeVarTuple is passed as an argument to another function parameterized with a TypeVarTuple.
Behavior Changes:
- Deferred execution of type annotations (PEP 649) did not make it into Python 3.13 and has been deferred (again) until Python 3.14. Changing pyright's logic accordingly.
- Changed the type evaluation for
type(Any)ortype(x)wherexis a value of typeAnyorUnknown. These now evaluate totype[Unknown]. - Changed the TypeVar scoping behavior for TypeVars that appear only within a Callable subtype within a function's declared return type. Previously, pyright scoped these TypeVars to the Callable rather than the function. This was due to issue #4285. I'm reversing this decision because it's not spec-compliant, creates a bunch of unnecessary complexity, and results in buggy behavior.
Published 1.1.362
Bug Fixes:
- Fixed a bug that results in incorrect type narrowing when a
matchstatement uses an empty (zero-element) sequence pattern and the subject expression type is a tuple that potentially (but does not always) have a zero length. - Fixed a crashing bug that results from an internal assertion failure when a generic class that uses PEP 695 syntax is located within an unreachable code block.
- Fixed a bug that results in incorrect type narrowing in the negative (fall-through) case when a
matchstatement includes a class pattern with a runtime-checkable protocol class. - Fixed recent regression with the
TypeIstype guard that resulted in incorrect type narrowing in the negative (else) case. - Fixed a bug that results in incorrect type evaluation for a variable that uses a nonlocal or global binding within an inner scope. Such a variable should never honor the narrowed type from the outer scope.
- Fixed false positive when a TypeVar appears within a function type comment.
- Fixed incorrect type narrowing for a class pattern argument if the class is a generic whose type parameters have default values.
- Fixed recent regression that resulted in incorrect type narrowing when a
*args: P.argsparameter was used in the expressionlen(args) >= x. - Fixed a bug that resulted in a false negative when a
Literalwith multiple arguments is used in a value expression. It should be treated as aUnionTypespecial form in this case.
Enhancements:
- Addressed a performance issue when indexing into a value that has a type consisting of a union of many (dozens or hundreds) of tuple types.
- Updated typeshed stubs to the latest version.
Behavior Changes:
- Changed interpretation of function definitions with (*args: Any, **kwargs: Any) to be
...in compliance with latest typing spec. - Added special-case handling for
__init_subclass__checks for classes that haveABCMetaas a metaclass. Previously, these were exempted from__init_subclass__becauseABCMetahas a custom__new__method, but we know that this metaclass calls through totype.__new__which calls__init_subclass__.
Published 1.1.361
Bug Fixes:
- Fixed a bug that results in a false negative when using bidirectional type inference to evaluate the type of a lambda expression if the expected type is a union of two or more callables.
- Fixed bug caused by incorrect synthesis of
itemandkeysattributes for named tuple classes. - Fixed bug that resulted in incorrect bidirectional type inference when calling a constructor for a generic class that defines no
__new__or__init__method. - Fixed bug that results in a false positive error when a
yieldstatement is used within a lambda following a function. - Fixed a bug that led to poor performance (effectively a hang) if an unannotated function is called through many (greater than 8) call expressions within a loop using different literal-value arguments each time.
- Fixed a bug that results in a false positive error when using
__extra_items__(PEP 728) with aTypedDictimported fromtyping_extensions. - Fixed a bug that leads to an infinite loop when performing protocol matching under certain circumstances that involve recursive protocol definitions.
- Fixed a bug that results in a false positive error when
Callable()is used as a class pattern and the subject type isAnyorUnknown. - Fixed a false negative that occurs when reassigning a
Finalvariable within a class body. - Changed the tokenizer so it is bug-for-bug compatible with the CPython tokenizer in versions 3.10 and newer in the case where a backslash (continuation character) is located by itself on a line.
- Fixed a bug that results in incorrect type evaluation when a global (module-scoped) variable is captured within an inner scope and the variable is not modified anywhere below the inner scope. It's possible in this case for the variable to be modified by code outside of the module.
- Fixed bug that resulted in incorrect evaluation of an identifier used in a method parameter type annotation if it shadows a forward reference in a class scope when the method is using PEP 695 type parameters.
- Fixed a bug that results in a false negative when an Unpack is used in a union. This isn't allowed.
- Fixed bug that produces incorrect output when converting to a textual representation the type
type[Foo]whereFoois a type alias.
Behavior Changes:
- Changed logic that synthesizes the constructor methods for a NamedTuple subclass (using the class syntax) so the
__new__method contains parameters based on field names and the__init__method contains a general*args: Any, **kwargs: Anyparameter signature. Previously, this was swapped, but the new way is more faithful to the runtime. - Changed
TypeIsto use the same logic asisinstancetype narrowing logic for consistency.
Published 1.1.360
Enhancements:
- Added support for
@deprecationmessages for decorators that wrap a function in a callable object. The deprecated message is now propagated through the ParamSpec and the__call__method. - Updated typeshed stubs to the latest version.
Behavior Changes:
- Moved check for invalid use of class-scoped TypeVar within a
selfannotation in__init__. It was previously reported underreportGeneralTypeIssues, but it's now moved toreportInvalidTypeVarUse. This was done to help typeshed maintainers migrate away from this pattern. - Changed behavior to no longer exempt unguarded access to not-required TypedDict member within a
tryorwithblock. Previously, such errors were exempt, but this is inconsistent with other type checks in pyright which eschew the practice of using exception handling for normal code flow.
Bug Fixes:
- Fixed recent regression that affected unannotated
__call__methods in a metaclass. This change aligns pyright's behavior to the typing spec. - Fixed recent regression that incorrectly narrowed the type of
kwargswhen used in a type guard of the formif "a" in kwargs. - Fixed bug in protocol matching that results in a false positive when the subject object is a dataclass that contains a callable. It should be considered an instance member in this case, so it should not be bound to the class.
- Fixed a bug that results in a false positive error when bidirectional type inference is used for a dictionary comprehension when the expected type is a union.
- Redesigned the handling of PEP 695-style type parameter scoping to better match the CPython runtime implementation. This fixes multiple bugs with type parameter symbol resolution. For example, if a type parameter is quoted as a forward reference.
- Fixed bug that leads to false negative when binding an object to an overloaded method where all of the overloads have incompatible
selfparameter types. - Fixed bug that leads to incorrect metatype for a class object that is created by calling the metaclass with a two-argument form.
Published 1.1.359
Enhancements:
- Expanded support for
len(x) == Ltype guard pattern (where x is a tuple) to support<,<=,>and>=comparisons as well. - Improved some diagnostic messages, moving away from the term "member" to prefer "attribute". Switched from "cannot assign to type" to "incompatible with type" for consistency and clarity.
- Extended type narrowing logic for
inandnot inoperators that target TypedDicts to also support constrained TypeVars that use TypedDicts as value constraints. - Added a check for the case where a frozen dataclass overrides a field from its parent class but doesn't provide a default value (where its parent does). This can result in a type violation if the parent's default value is not compatible with the child's (covariant) field type.
Behavior Changes:
- Changed behavior when evaluating the upper bound expression, value constraints expression, or default expression for a PEP-695 type parameter. At runtime, these are always evaluated in a deferred manner even if they are not quoted. Pyright now follows the runtime behavior.
- Modified handling of annotated
selfparameter in__init__method when evaluating constructor call so pyright conforms to the latest typing spec. - Added missing check for the errant use of class-scoped type variables in a type annotation for the "self" parameter within an "init" method. The typing spec now clarifies that this is illegal and should generate an error.
- Updated logic for converting a class constructor to a callable to conform to the newly-updated typing spec.
- Changed the behavior when invoking constructor for
type[T]whereTis a TypeVar with no explicit upper bound (and therefore has an implicit upper bound ofobject). According to the newly-clarified typing spec, this should enforce the constructor signature ofobject. - Modified behavior in constructor call code that previously applied some (now non-compliant) heuristics to reconcile a metaclass
__call__method with a__new__method. The new behavior is now compliant with the typing spec. - Changed behavior of conversion from class constructor to callable to conform with the typing spec in the case where the
__new__method of the class returns a value that indicates the__init__method should be ignored. - Changed behavior of conversion from class constructor to callable to conform to honor the annotated type of
selfin the__init__method. - Changed behavior of conversion from class constructor to callable to conform to honor return type of the
__new__method.
Bug Fixes:
- Fixed a bug that leads to inconsistent behaviors when an assignment leads to a type violation. When assigning to a local variable, the target expression is not "narrowed" to include the assigned type in this case. The new behavior applies this same behavior when assigning to instance or class variables.
- Fixed recent regression that results in a false positive error when applying a
@propertydecorator to a method that has already had a decorator applied to it. - Fixed bug that results in a spurious
reportAbstractUsageerror when an abstract class is captured through atype[T]. - Fixed bug that results in incorrect type evaluation when solving a ParamSpec type when there are multiple constraints provided.
- Fixed a bug that results in incorrect type evaluation when assigning a function with a
NoReturnreturn type to aCallable[..., T]. - Fixed a bug that leads to a false negative when an unparenthesized assignment expression is used in a dictionary key within a dictionary expression or comprehension.
- Fixed bug that results in false positive error under certain circumstances that involve unions of TypeVars in an invariant context.