npm pyright 1.1.394
Published 1.1.394

14 hours ago

Enhancements:

  • Added missing check for a PEP 695 type parameter being the target of a nonlocal statement. This results in a runtime exception, so it should be reported as an error.
  • Improved error message for TypedDict base classes that are not closed but specify an extra_items. Also added check for cases where closed and extra_items are both specified.
  • Updated typeshed stubs to the latest version.
  • Added missing check for the override of a property that is marked @final.
  • Added support for tracking multiple constraint sets when performing protocol matching. This allows protocols with overloaded methods to contribute independent constraint sets.

Bug Fixes:

  • Fixed a bug that results in incorrect handling (and spurious errors) when accessing an attribute on a TypedDict that is shadowed by a TypedDict item.
  • Fixed a spec conformance issue relating to callable assignability when the dest type uses an unpacked TypedDict and the source does not accept **kwargs. The typing spec indicates that this should fail because TypedDicts are not closed.
  • Fixed bug that results in incorrect inferred type for an instance or class variable assigned a value as part of a tuple expression target with an unpack operator (e.g. a, *self.b = (1, 2, 3)).
  • Fixed bug that resulted in incorrect type inference for unannotated variables (either local or class-scoped) that are the target of an augmented assignment.
  • Fixed a bug that leads to a false negative when checking for partially overlapping overloads that have keyword parameters with default argument values.
  • Fixed a bug that causes a false positive "no overload implementation" error when a non-overloaded function uses a decorator that changes its type to a an overloaded function.
  • Fixed bug that results in false negative when a format string with a single quote has a newline character within it. This results in a syntax error at runtime.
  • Fixed regression that resulted in a false positive error when evaluating a call expression that targets an overloaded method and one of the arguments is an enum with more than 64 members.
  • Fixed a bug that results in a false positive "overlapping overload" error under certain circumstances involving recursive types.
  • Fixed a bug that results in a false positive error when assigning a tuple of indeterminate length to a zero-length tuple target.
  • Fixed a bug that leads to incorrect (unsound) type narrowing when using the x in y type guard pattern. The in operator uses equality checks, and __eq__ can succeed for objects of disjoint types, which means disjointedness cannot be used as the basis for narrowing here. This change also affects the reportUnnecessaryContains check, which leverages the same logic.
  • Fixed recent regression that affected the evaluation of calls that target certain overloads that include an *args parameter in the fallback (the last overload). In particular, this affected the zip constructor.
  • Removed errant check for @final consistency when it is applied to TypedDict.
  • Fixed a bug that results in incomplete renames when renaming a class or function that uses PEP 695 type parameter syntax.

Behavior Changes:

  • Changed behavior of TypedDict to synthesize a fall-back overload for the pop method to handle the case where the caller passes a key name that is not specified in the TypedDict definition.
  • Changed the type of an async def function from typing.Coroutine to types.CoroutineType for improved type accuracy.
  • Exempted __slots__ symbol when determining whether a class is a callback protocol.

Don't miss a new pyright release

NewReleases is sending notifications on new releases.