Releases: microsoft/pyright
Releases Β· microsoft/pyright
Published 1.1.360
Enhancements:
- Added support for
@deprecation
messages 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
self
annotation 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
try
orwith
block. 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
kwargs
when 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
self
parameter 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) == L
type 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
in
andnot in
operators 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
self
parameter 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]
whereT
is 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
self
in 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
@property
decorator to a method that has already had a decorator applied to it. - Fixed bug that results in a spurious
reportAbstractUsage
error 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
NoReturn
return 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.
Published 1.1.358
Bug Fixes:
- (from Pylance): Fixed a bug that caused a crash under certain circumstances when an import cannot be resolved.
- Fixed non-compliance issue with
TypeIs
, which is documented to have an invariant type parameter. - Fixed a bug that results in incorrect type evaluation when a sequence pattern in a
match
statement includes a*
element and the subject includes a tuple with an element with indeterminate length. - Fixed bug that results in an intermittent false positive "circular dependency" error for fields within a dataclass.
- Fixed a bug that results in a false positive error under certain circumstances when a TypeVar or TypeVarTuple is being solved with literal values in both an invariant and non-invariant context.
- Fixed bug that results in incorrect type evaluation in cases where a generic function returns a callable, and the function is called with a higher-order generic function as an argument.
- Fixed a bug that results in a false negative when a generic function returns a Callable type that is specialized to include a live (in-scope) type variable.
- Fixed bug that results in inconsistent type narrowing on assignment based on whether the assignment occurs within the same statement that includes the (declared) type annotation for the variable and whether the type annotation is provided as a type comment.
Enhancements:
- Added optimization for TypedDict type assignments. Under certain circumstances (e.g. when comparing large unions of TypedDict types), this can save significant time.
- Modified the handling of enum class attributes so those with private (mangled) names are exempted from being considered enum members. This reflects the runtime behavior.
- Added support for narrowing of subject subexpression within a match statement for references to the subexpression after the completion of the match statement.
- Updated typeshed stubs to the latest version.
- Improved error handling for quoted annotations. Bytes, raw strings, and f-strings are not allowed according to the typing spec.
- Added an error message for a
Literal
type annotation that includes a string with a named unicode escape sequence. These are not supported.
Published 1.1.357
Bug Fixes:
- Fixed bug that results in a false positive error when explicitly calling
__new__
on a dataclass, namedtuple, or TypedDict. These classes all require synthesized__new__
methods. - Fixed bug that results in false negative when a
__new__
or__init__
method cannot be bound without a type violation. - Fixed a bug that results in incorrect type narrowing of enums that derive from
enum.Flag
. - Fixed a type hole when a dictionary expression includes a dictionary expansion operator that acts on a non-closed TypedDict.
- Fixed bug that results in a type not being narrowed when using the
K in TD
type guard pattern (whereTD
is a TypedDict andK
is a literal key). Narrowing was skipped if the RHS operand was not a simple identifier. - Fixed inconsistent handling of literal values in a list comprehension.
- Fixed a bug that results in a false positive error when an unpacked TypeVarTuple is used in a function defined with PEP-695 syntax.
- (From Pylance) Improved heap usage tracking within language server to reduce the likelihood of crashes related to heap exhaustion.
- Fixed a bug that results in incorrect inferred parameter types for an unannotated method in a subclass when the parent class method contains function-scoped TypeVars.
Enhancements:
- Added support for negative (fall-through) type narrowing for subject subexpressions in
match
statement when subject consists of a tuple expression and patterns exhaustively match the tuple. - Enhanced dictionary type evaluation to support dictionary items that overwrite previous dictionary items. Only the last value type is now considered, so if previous values (which are overwritten) would otherwise violate typing rules, this no longer generates a type error.
- Enhanced discriminated class support to include not only literal field values but also
None
. - Improved diagnostic message for access to unknown member in the case where the user probably meant to access an item in a TypedDict but used a member access expression rather than an index expression.
- Improved return result for synthesized
get
method for closedTypedDict
classes (as defined in PEP 728). - Refactored tokenizer and parser output to help reduce the amount of memory needed.
Behavior Changes:
- Changed the handling of
Final
variables (that are not explicitly markedClassVar
) within dataclass class bodies. This is consistent with the runtime and this proposed change to the typing spec.
Published 1.1.356
Bug Fixes:
- Fixed bug that results in a false positive error when a class-scoped TypeVar with a default that references another class-scoped TypeVar is used in a method signature in that class.
- Fixed bug that resulted in a false positive error if a PEP-695
type
statement uses a type parameter and encloses the RHS in quotes. - Fixed bug that results in incorrect type narrowing in the negative (fall-through) case when a runtime-checkable protocol class is used as a class pattern with arguments within a match statement.
- Fixed a bug that results in a false positive when a class-scoped TypeVar used within a method has a default that refers to another class-scoped TypeVar.
- Fixed a bug that results in a false positive
reportImplicitOverride
diagnostic if the class derives from an Unknown or Any class.
Behavior Changes:
- Tweaked bidirectional type inference behaviors for lists to improve certain inference cases.
- Changed the logic for metaclass instance variable lookups to ignore the lookup if the metaclass MRO contains an unknown class.
Enhancements:
- Update Unicode range tables to match Unicode 15.1.
- Added check for the use of a non-runtime-checkable protocol class in a class pattern. This generates an exception at runtime.
- Updated typeshed stubs to the latest version.
Published 1.1.355
Bug Fixes:
- Fixed a bug that results in incorrect type evaluation if a list expression includes a generator expression.
- Fixed bug that results in a false negative when a TypeAliasType object is used in a class pattern.
- Fixed bug that results in false positive when implicitly specializing a class parameterized by a TypeVarTuple when there is no default.
- Fixed bug that results in false positive when a list or set expression is evaluated using bidirectional type inference when the expected type is
MutableSet
orMutableSequence
. - Fixed bug that results in a false negative when overriding a method that has keyword parameters with a method that has a
*args
parameter. - Fixed a bug that results in a false positive error in certain circumstances involving a TypeVarTuple used within an overload.
- Fixed bug that results in a false positive error when a base class defines a writable property and a subclass writes to the property.
- Fixed bug that results in a false positive "overload implementation does not match overloads" diagnostic when positional-only and keyword-only parameters are involved.
- Fixed a bug that results in a false positive in a complex situation that involves generic protocols, properties, and mix-in classes.
- Fixed bug that results in false positive error when a
__new__
method in a metaclass uses PEP 692 (unpacked TypeDict) to annotate its**kwargs
parameter.
Enhancements:
- Updated typeshed stubs to the latest. This version of typeshed replaces the older-style positional-only parameters with PEP 570 syntax.
- Improved validation for
except
andexcept*
statements to catch some previously-undetected invalid cases. - Expanded handling of python versions to handle more than just major/minor version numbers. Pyright now handles micro, releaseLevel, and serial numbers as well.
Published 1.1.354
Bug Fixes:
- Fixed a bug that resulted in an incorrect type evaluation when an augmented assignment is used within an inner-scoped function to add a constant to a variable. Literal math should not be used in this case.
- Fixed two bugs that resulted in false negatives when redefining a constant variable with a non-variable symbol and when redefining a Final variable with a non-variable symbol.
- Fixed bug that results in false positive when a generic class or type alias uses a TypeVarTuple followed by one or more ParamSpecs that have default values.
- Fixed bug that resulted in false negative when narrowing a constrained or bound TypeVar with a
complex()
orfloat()
class pattern. - Fixed bug that results in a false positive under certain circumstances when a constrained TypeVar is used as the default for another constrained TypeVar.
- Fixed a bug that results in a false positive under certain circumstances when defining a type alias using the old
typing.TypeAlias
annotation. - Fixed a bug that results in a false negative when a class explicitly inherits from a protocol that defines an instance variable but the child re-declares as a
ClassVar
without an explicit type. - Fixed a bug that made locale overrides through environment variables no longer work on node 21.
Enhancements:
- Enhanced handling of
type
function when it is passed a class. Pyright previously evaluated this asAny
, but now it returns the class' metaclass. - Added check for generic classes and type aliases that include a TypeVarTuple followed by a TypeVar that has a default value. This is illegal according to PEP 696.
- Changed the behavior when accessing a class attribute from a generic class that is not specialized. The class is now automatically specialized in the case using default type parameter values (from PEP 696) or Unknown. This change is required for conformance with PEP 696.
- (From pylance) Added some optimizations to the tokenizer to reduce memory usage.
- Added new
reportUnhashable
diagnostic rule.
Published 1.1.353
Breaking Changes:
- The CLI and language server versions of pyright now require a minimum node version of 14. Previously node 12 and 13 were supported.
Enhancements:
- Enabled PEP 705 and PEP 696 functionality without the use of enableExperimentalFeatures now that these PEPs are officially accepted.
- Improved support for instance variables whose type is declared in a metaclass. Pyright now honors this type and enforces type consistency in derived classes.
Bug Fixes:
- Fixed a bug that results in a false negative when a dundered method overrides a base class method of the same name and uses different parameter names along with different types.
- Fixed a bug that leads to a false positive error when a
match
statement is used in a loop and the subject expression is potentially narrowed as a result of thematch
statement. - Added check for inappropriate use of
Annotated
passed as second argument toNewType
call. - Fixed a bug that results in a false positive error when expanding the type arguments to a TypeVarTuple under certain circumstances.
- Fixed a bug that results in incorrect type evaluation when an index expression is assigned a value within a doubly-nested loop under certain circumstances.
- Fixed a regression that caused the signature help provider to not display the
__new__
method of a constructor if it is overloaded. - Fixed hard-coded type information for module attribute
__package__
. It should bestr | None
rather thanstr
. - Fixed a bug in the
isinstance
type guard logic. It was not properly handling tuples that included unions. - Fixed bug in signature help provider so
str
method docstrings are showed when called onLiteralString
. - Fixed a bug that results in incorrect type narrowing behavior for member access expressions under certain circumstances.
- Fixed bug that resulted in a false negative when a possibly-unbound variable is captured by an inner scope under certain circumstances.
Published 1.1.352
Enhancements:
- Implemented provisional support for PEP 728 (support for extra items within TypedDicts). You must set enableExperimentalFeatures to true for now.
- Added support for concatenated strings used in a
@deprecated
decorator. - Added support for call-site return type inference for class and instance methods.
- Improved handling of
enum.nonmember
in cases where the attribute has a declared type. - Added missing check for inappropriate use of
InitVar
outside of a dataclass.
Behavior Changes:
- Added special-case handling for 'typing_extensions' module whose stubs are part of typeshed's stdlib stubs even though it is not part of stdlib.
- Refined the heuristic for when to use bidirectional type inference for the RHS of
and
andor
operators. - Changed behavior of command-line "--pythonversion" and "--pythonplatform" options so they now override the same-named options in the config file.
Bug Fixes:
- Fixed a bug that resulted in a false negative when attempting to use
TypedDict
orProtocol
as an upper bound when using PEP 695 syntax. - Fixed a bug that resulted in "reportUnnecessaryTypeIgnoreComment" diagnostics to be generated even if the source file was in the "ignore" list.
- Fixed a bug that leads to incorrect type inference for a lambda when passed to a constructor in certain circumstances.
- Fixed a bug that leads to a false positive type violation when reassigning a value within a loop and the target variable has a declared type of a constrained type variable.
- Fixed a bug that results in a false negative when passing an unpacked dict of the wrong type to a function that contains a positional-only parameter marker plus one or more keyword parameters.
- Fixed a bug in the import resolver that resulted in an incorrect resolution when an import within a
__init__.py
file uses the formfrom .a import a
. - Fixed a bug that results in a false positive error when an
await
expression is passed as an argument to an overloaded function. - Fixed a bug that results in an incorrect "Unbound" type evaluation for a variable assigned within a loop.
Published 1.1.351
Bug Fixes:
- Fixed bug that results in a false positive "no overload implementation" error if an overloaded function is passed through a decorator that uses a ParamSpec.
- Fixed a recent regression that results in a false positive error when an
Enum
subclass overrides__new__
or__init__
and then a subclass of that class assigns tuple values when defining enum members - Fixed a bug that results in a false positive error when a method defined within a named tuple is overridden by a subclass
- Fixed a bug that results in a false positive error when a
enum.nonmember
value is assigned to a class-scoped variable with a type annotation in an Enum class. - Fixed a bug in the type narrowing logic for class pattern matching that resulted in incorrect narrowing in the negative (fall-through) case.
- Added missing check for inappropriate use of an unpacked TypeVarTuple within a TypeAliasType type parameter list.
- Fixed a false positive
reportUnknownArgumentType
error when assigning an empty list or dict expression to an index expression subscripted with a slice. - Fixed bug that results in a false positive error when assigning a tuple value that includes an unpacked TypeVarTuple to another tuple that also includes an unpacked TypeVarTuple.
- Fixed bug that results in a false positive error when calling
update
on a TypedDict with zero defined entries. - Fixed a bug that results in a false positive with the
reportUnnecessaryCast
check if the second argument is a special form. - Fixed a bug that led to incorrect type evaluation for a call that targets a generic function that uses a default argument for one of the generic parameters.
Behavior Changes:
- Change the heuristic for determining whether a metaclass supports
__or__
. In the case where the metaclass derives from Any or Unknown, pyright now assumes that it doesn't override__or__
. - Changed behavior of CLI's
--watch
mode. Previously, it reported diagnostic deltas when it detected a change, but it is more useful if it reports all remaining diagnostics even for files that it didn't reanalyze due to a file change.
Enhancements:
- Updated typeshed stubs to the latest version.
- Added provisional support for draft PEP 742 (TypeIs).
- Added check for the use of an implicit position-only parameter (one that starts with a double underscore) that is located after a non-position-only parameter.