pyright

Static Type Checker for Python

OTHER License

Downloads
2.3M
Stars
13.2K
Committers
119

Bot releases are hidden (Show)

pyright - Published 1.1.280

Published by erictraut almost 2 years ago

Bug Fix: Fixed bug that led to an incorrect type evaluation (and potential false negative) when an iterable iterates over an unpacked TypeVarTuple.

Bug Fix: Enabled the Never type to be used as an explicit type argument for a contravariant parameter.

Bug Fix: Fixed a bug in the type printing logic where it omitted a Union when an unpacked TypeVarTuple is used within a Union.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation when the type arguments for a tuple included an unpacked TypeVarTuple. In this case, the type argument should be treated as a Union[*Ts] rather than *Ts.

Bug Fix: Fixed a bug that resulted in a false positive for the reportIncompatibleMethodOverride check when the base method used an unpacked tuple for the *args parameter and the override used specific parameters.

Bug Fix: Fixed a bug that resulted in a false negative when a non-frozen dataclass subclasses from a frozen dataclass. This generates a runtime error, so it should be flagged by the type checker.

Bug Fix: Fixed a bug that resulted in a false positive error related to type narrowing in a match statement when matching against an enum with only one value.

pyright - Published 1.1.279

Published by erictraut almost 2 years ago

Behavior Change: Changed the way pyright handles the case where a dataclass or dataclass-like class handles a synthesized __init__ if one or more base classes are unknown.

Bug Fix: Fixed bug in type printer logic that resulted in a triple * before an unpacked TypedDict when it was used with a **kwargs parameter and the TypedDict was generic.

Bug Fix: Fixed a bug that resulted in a false positive when invoking the constructor for a generic class that uses an unpacked TypedDict with an **args parameter.

Bug Fix: Fixed regression that caused non-JSON output to be emitted when --verifytypes is used in conjunction with --outputjson.

Behavior Change: Changed the reportUninitializedInstanceVariable so it doesn't run on stub files.

Enhancement: Added new diagnostic rule reportShadowedImport that emits a diagnostic if a local module shadows a stdlib module.

Bug Fix: Fixed a bug that resulted in a false positive when a call expression includes an unpacked argument that is a tuple with a known length.

Bug Fix: Reverted recent change to the reportUnnecessaryComparison check that introduced a regression.

Bug Fix: Fixed a bug that resulted in a false negative when a *args parameter with an unpacked tuple is followed by additional keyword-only parameters that are not supplied by a caller.

Bug Fix: Added code to clean up the temp directory that pyright creates when determining whether the file system is case sensitive.

Bug Fix: Fixed bug that resulted in false positive error when evaluating an unpacked tuple or TypeVarTuple in an *args parameter annotation.

Bug Fix: Improved argument/parameter matching for unpacked tuple arguments.

Bug Fix: Fixed a bug in detection of variance inconsistency with base classes in a class definition.

Enhancement: Added support for detecting unhashable types within set and dict expressions. These result in a TypeError at runtime.

Bug Fix: Fixed bug that resulted in poor hover text message for keyword arguments passed to a TypedDict constructor.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation when a generic class implicitly referenced one of its own magic methods (e.g. __iter__).

Enhancement: Added support for recursive type references when using the functional "alternative syntax" for TypedDict.

Behavior Change: Changed the synthesized __dataclass_fields__ variable in dataclass to be a ClassVar so it cannot be overridden by an instance variable.

Behavior Change: Changed protocol matching logic to enforce that a protocol with a ClassVar requires that any compatible class also declare the corresponding field as a ClassVar. Previously, any class-scoped variable satisfied the protocol in this case. This change brings pyright and mypy into agreement.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation involving a recursive type alias that is defined as the union of other types, one of which introduces the recursion.

pyright - Published 1.1.278

Published by erictraut almost 2 years ago

Behavior Change: Changed the reportUnusedImport check to not report an error for "from y import x as x" since x is considered to be re-exported in this case. Previously, this case was exempted only for type stubs.

Enhancement: Expand enums in negative narrowing of x in y.

Bug Fix: Fixed bug that resulted in incorrect type evaluation when an f-string uses expressions that are unions of literal strings. The result should be LiteralString, not str.

Enhancement: Improved the reportUnnecessaryComparison diagnostic check to detect (and properly report) cases where a comparison if literals is always true or always false.

Bug Fix: Fixed bug that resulted in incorrect type evaluation when creating a union from two generic functions that are parameterized by different ParamSpecs but are otherwise identical.

Behavior Change: Updated the default Python version from 3.10 to 3.11 now that 3.11 has been released in its final form. Pyright assumes the default version if it is not otherwise told which version to use (explicitly as a setting or command-line argument or implicitly via the selected Python environment).

Enhancement: Enhanced --verifytypes so it honors the --pythonversion and --pythonplatform command-line arguments and falls back to the selected Python environment to get these values if they are unspecified.

Bug Fix: Fixed a bug in the type evaluator related to TypeVarTuple that caused it to incorrectly report a type incompatibility between *Ts and *tuple[*Ts]. These are the same type, so they should be compatible.

Bug Fix: Fixed a bug that results in incorrect specialization of a function or method that uses a TypeVarTuple parameter. The internal flags were being lost including the tracking of class methods and static methods.

Bug Fix: Added support for unpacked tuple arguments passed to an *args parameter declared with a TypeVarTuple.

pyright - Published 1.1.277

Published by erictraut almost 2 years ago

Enhancement: Added support for falsy type guard expressions when the evaluated type is a NamedTuples with at least one element. These always evaluate to True.

Bug Fix: Fixed bug that resulted in a false positive "possibly unbound" error when a builtin symbol is overridden in the global scope within a conditional block.

Enhancement: Improved error message for TypeVar constraints that contain generics. Fixed a bug that prevented an error message when keyword argument was duplicated in a call to TypeVar.

Enhancement: Added support for infer_variance parameter to TypeVar as specified in draft PEP 695.

Bug Fix: Improved consistency of assignment-based type narrowing when the type of the assigned value includes an Any or Unknown type argument that is nested more than one level deep and the expected (declared) value contains a type argument that is not Any.

Enhancement: Updated typeshed stubs to the latest version.

Bug Fix: Fixed bug that results in a false positive error when a protocol class implements an overloaded method.

Bug Fix: Added a workaround for a recent change to the typeshed stub dataclasses.pyi relating to the InitVar class. For Python 3.8, the stub indicates that the InitVar class has a metaclass called _InitVarMeta that has a __getitem__ method that returns a value of type InitVar[Any], but this creates a circularity because the evaluation of the expression InitVar[Any] depends on the return type of _InitVarMeta.__getitem__.

pyright - Published 1.1.276

Published by erictraut almost 2 years ago

Enhancement: Updated typeshed stubs to the latest version. This includes the removal of stubs for freezegun.

Enhancement: Added support for draft PEP 698 and the @override decorator.

Enhancement: Enhanced reportSelfClsParameterName so it applies to overload signatures. In the general case, this check is not applied to functions with decorators because decorators can change the semantics of parameters for the decorated function. But @overload is a special case, and its semantics are well known.

Enhancement: Extended the defineConstant mechanism to work with conditional statements that contain member access expressions that reference a defined member name.

pyright - Published 1.1.275

Published by erictraut about 2 years ago

Bug Fix: Fixed a bug that resulted in an incorrect type evaluation when a TypeVar bound to an Enum class is instantiated.

Bug Fix: Added a global "cache manager" to track heap usage for all type analyzer service instances. This prevents out-of-memory conditions when many roots are used in a multi-root workspace.

Behavior Change (from Pylance): Don't treat classes decorated with dataclass_transform as dataclasses for purposes of determining which fields should be represented in the synthesized __init__ method. This was an ambiguity in PEP 681, which was recently clarified.

Bug Fix: Fixed a bug that resulted in a false negative when using illegal annotation expression forms within a TypedDict inlined (call-based) definition.

Bug Fix: Fixed a bug in the code flow engine that resulted in incorrect type evaluation in certain cases involving nested loops.

Bug Fix: Fixed a bug that resulted in a false positive error when a call targets an object with a __call__ that is itself an object with a __call__ method.

Bug Fix: Added a check for a return statement with an explicit return value within an async generator function. This is considered a syntax error by the Python compiler, so it should be flagged at static analysis time.

Bug Fix: Fixed a bug that resulted in incorrect handling of binary files (e.g. ".so" or ".pyd" files) within a library when creating stub files.

Behavior Change: Enhanced the heuristics used to infer the type of an unannotated function parameter with a default value. If that value evaluates to an instance of a class with a private name (i.e. it starts with an underscore), pyright will now assume that the value is potentially a singleton sentinel value similar to None and will infer the type to be a union of that type and Unknown.

pyright - Published 1.1.274

Published by erictraut about 2 years ago

Bug Fix: Fixed a bug that resulted in incorrect type evaluation for members of a StrEnum subclass under certain circumstances. This was caused by a circular dependency in ReprEnum caused by pyright's validation of __init_subclass__ as part of class type evaluation. This change moves this validation step from the type evaluator to the checker, eliminating the potential for circular dependencies and improving performance.

Bug Fix: Fixed a bug that resulted in a false positive error indicating that a type definition relies on itself in a circular manner.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation for constructor calls using bidirectional type inference where the expected type includes TypeVars that are not in scope for the constructor call.

Bug Fix: Fixed a bug that resulted in incorrect type narrowing based on literal field discrimination (<a>.field == <literal>) where the expression <a> is a member access expression.

Bug Fix: Fixed a bug in the "--verifytypes" CLI option that resulted in incorrect calculation of the type completeness core in cases where a private symbol with an incomplete type was imported and re-exported from a public module.

Bug Fix: Fixed a bug that resulted in incorrect analysis when a ClassVar annotation was enclosed in quotes (i.e. a forward reference).

Bug Fix: Fixed a bug that resulted in a false positive error when a contravariant generic class was specialized with a union type argument used with bidirectional type inference.

Enhancement: Updated typeshed stubs to the latest.

pyright - Published 1.1.273

Published by erictraut about 2 years ago

Bug Fix: Fixed recent regression that resulted in a false positive error related to argument-to-parameter matching.

Enhancement: Added a missing check for class-scoped covariant or contravariant TypeVars that are used in a base class where the base class defines the corresponding type parameter to be invariant. This leads to a typing hole, so it should be considered an error.

Bug Fix: Fixed a bug that led to the incorrect inferred type for a parameter in an unannotated __init__ method in the case where the method overrides a method in a base class.

pyright - Published 1.1.272

Published by erictraut about 2 years ago

Enhancement: Added bidirectional type inference support for comprehension statements that create generators. This addresses https://github.com/microsoft/pyright/issues/3948.

Bug Fix: Improved handling of circular dependencies in a generic class hierarchy — in particular, where a class is parameterized by a constrained TypeVar where one of the constraints includes the class or its ancestors. This addresses https://github.com/microsoft/pyright/issues/3955.

Bug Fix: Fixed false positive reportInvalidTypeVarUse diagnostic in an overload implementation. This addresses https://github.com/microsoft/pyright/issues/3958.

Bug Fix: Fixed confusing error message when a value is written to a class attribute that is not defined on the class but is defined on the metaclass but with an incompatible type. This addresses https://github.com/microsoft/pyright/issues/3960.

Enhancement: Updated typeshed stubs to the latest version.

Enhancement: Improved error message readability for generic class type incompatibilities.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation when calling a generic class constructor from within that class implementation. This addresses https://github.com/microsoft/pyright/issues/3927.

Bug Fix: Fixed recent regression. Default includes/excludes should be used when pyproject.toml is present. This addresses #3965.

Enhancement: Extended support for method override completions that use member access expression forms in a parameter's default value expression. This addresses https://github.com/microsoft/pylance-release/issues/3374.

Bug Fix: Fixed false positive error when a call expression provides zero arguments for an unpacked tuple of indeterminate length within a Callable. This addresses #3972.

Bug Fix: Improved error message for positional parameter count mismatch when the signature contains an unpacked tuple with either a definite or indefinite length.

pyright - Published 1.1.271

Published by erictraut about 2 years ago

Bug Fix: Fixed a bug in assertNever internal function that resulted in a crash when attempting to stringify a recursive data structure. This shows up occasionally in the crash telemetry.

Bug Fix: Fixed an infinite recursion bug in the type printer that shows up occasionally in the crash telemetry.

Bug Fix: Fixed a bug that resulted in infinite recursion when a global statement is used within the global scope of a module.

Enhancement: Added new check for an attempt to instantiate Dict, Set, List, or Tuple from typing module. This generates a runtime exception.

Bug Fix: Fixed recent regression that resulted in a false positive error when defining a variable in a class body and using its own field name as a type annotation.

Bug Fix: Fixed bug that results in incorrect narrowing for sequence patterns in a match statement in the negative (fall-through) case when the subject type is a tuple of known length but with elements of type Any.

Enhancement: Added support for quoted TypeAlias type annotation.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation when narrowing types for class patterns in a match statement when the matched class is a generic subclass of the subject type.

Bug Fix: Fixed bug that resulted in incorrect type evaluation when an isinstance type guard results in an intersection type and one of the sources of the intersection is a conditional type.

Bug Fix: Fixed a bug that resulted in a transient false positive error in certain cases where a member access expression was used within a quoted type annotation.

pyright - Published 1.1.270

Published by erictraut about 2 years ago

Enhancement: Improved precision of error handling for tuple, list and set expressions.

Bug Fix: Fixed a bug that resulted in incorrect type narrowing for literal patterns in a match statement when the target expression type includes an instance of a class that derives from the literal's class (e.g. a subclass of str).

Bug Fix: Fixed a bug that led to the incorrect inferred return type for a super().__new__(cls) call.

Bug Fix: Added support for TypeVarTuple to capture an unpacked tuple with unbounded length.

Bug Fix: Fixed a bug that resulted in unpacked arguments to a class definition going unevaluated, which means that any symbols they referenced were not marked accessed.

Enhancement: Expanded reportUnusedExpression check to detect unused tuple, dictionary, list and set expressions if they don't contain comprehensions.

Bug Fix: Fixed a bug that resulted in a false positive when passing a generic function to an overloaded function that requires union expansion to resolve.

Bug Fix: Fixed type evaluation bug that led to a false positive error when assigning a type conditioned on a bound TypeVar to that same TypeVar in an invariant context.

Bug Fix (contribution by @timsu92): Fixed incorrect description of reportUndefinedVariable.

Bug Fix: Fixed bug in type evaluator that caused a false negative in some circumstances when constructing an instance of a generic class within that class implementation.

Bug Fix: Fixed a bug that resulted in a false negative when an annotated variable was assigned an expression that included the variable's name and the variable was undefined prior to the assignment.

Enhancement: Updated typeshed stubs to the latest version.

Bug Fix: Fixed a bug in the type checker that led it to conclude that two types were the same even though they were declared in separate modules. This occurred when the types had the same (local) name and both modules were located within project directories that contained characters that are invalid for module paths in an import statement (e.g. "-").

Enhancement: Updated PEP 695 functionality to reflect the latest changes in the spec.

pyright - Published 1.1.269

Published by erictraut about 2 years ago

Bug Fix: Fixed a bug that resulted in the reportImportCycles check to sometimes fail to detect and report some import cycles.

Bug Fix: Fixed bug that resulted in a false positive error when specifying a metaclass that contains an __init__ method with unannotated parameters.

Bug Fix: Fixed a bug that led to a false negative when assigning a concrete type to an instance variable with a generic (class-scoped) type.

Enhancement: Enhanced the type(x) is y type guard logic to support the case where x is typed with a TypeVar bound to a class.

Bug Fix: Fixed a bug that resulted in a false positive error when determining type compatibility of a generic type with an invariant type parameter and a type argument that is a union which includes an instance of a class and an instance of a subclass.

Bug Fix: Fixed bug that resulted in incorrect type evaluation when solving for a contravariant type variable when a union of callables is passed as an argument.

pyright - Published 1.1.268

Published by erictraut about 2 years ago

Behavior Change: Exempted __new__ from parameter covariance check. This is consistent with __init__, which is already exempted from this check.

Bug Fix: Fixed a bug that resulted in a false negative when using an unparenthesized assignment expression in an assert statement. Also improved the error messages and parser recovery for incorrect use of a unparenthesized assignment expressions.

Bug Fix: Fixed a bug that resulted in a false positive when analyzing a call to an instance method that omits a self parameter and instead uses *args.

Enhancement: Improved error reporting for dict literal expressions that are assigned to TypedDict types. Previously, the entire dict literal was included in the error range. Now the range is limited to a specific dictionary entry if there is only one error.

Enhancement: Extended type narrowing support for x in y pattern where y is a tuple of known length that includes literal types. In this case, negative ("else") type narrowing can be applied if x is a union that includes literals.

Behavior Change: Increased the code complexity limit that controls whether pyright performs return type inference for functions that have no parameter type annotations. This can be quite expensive, and without parameter types, the results are often low quality. Beyond a certain point, we just skip the expensive analysis and infer a return type of Unknown. The previous limit was quite low. This increases the limit in an attempt to handle return type inference in more of these cases.

Enhancement: Added a missing check for a **kwargs parameter immediately after a keyword-only separator * parameter. This generates a compiler error in Python.

Enhancement: Updated typeshed stubs to the latest version.

pyright - Published 1.1.267

Published by erictraut about 2 years ago

Bug Fix: Fixed bug that caused error to be suppressed when calling assert_never with bad arguments (incorrect number, etc).

Enhancement: Added support for dictionary expansion of a TypedDict within a dictionary literal expression.

Enhancement: Extended support for union expansion of constrained type variables when performing overload matching.

Bug Fix: Fixed a bug that resulted in different type evaluation behaviors depending on the order of callable types within a union.

Bug Fix: Fixed bug that resulted in a false positive error when the second argument to a type constructor call includes a tuple that includes a type class.

Bug Fix: Fixed a bug that resulted in incorrect type evaluation when a generic type alias consists solely of a type variable or a type variable wrapped in Annotated.

Bug Fix: Fixed bug in parser that resulted in crash when a soft keyword was used as a class pattern keyword argument name.

Bug Fix: Fixed a bug in the special-case logic that handles __all__.extend(<submodule>.__all__) so it better handles the case where <module> is imported using an import statement of the form from x import submodule.

pyright - Published 1.1.266

Published by erictraut about 2 years ago

Bug Fix: Fixed a bug that caused a false positive error when using a list comprehension within a method that is overloaded to accept either a LiteralString or a str. The incorrect overload was chosen in some cases, picking the LiteralString variant rather than the str variant even though LiteralString variant generated type errors.

Bug Fix: Fixed a bug that caused incorrect type evaluation because of stale module paths that are cached for specific source files. Module paths are dependent on the list of configured import resolution paths, so when the import resolution paths change, we may need to recompute the module path for a source file.

Bug Fix: Fixed a bug that resulted in a false negative when a del statement targeted a symbol that was unbound (i.e. referenced before assigned) within a function.

Behavior Change: Changed behavior of assert_type to treat Any the same as Unknown for purposes of type comparison. There is no way to express an Any type explicitly in the Python type system because it is, by definition, an "implicit" Any.

Bug Fix: Fixed a bug that resulted in a false negative when evaluating binary operations that involve unions for either the LHS or RHS or both.

Bug Fix: Fixed bug that resulted in incorrect type evaluation when bidirectional type inference was used along with a type alias that was involved in a circular declaration.

Bug Fix: Fixed a bug that resulted in a false positive error when LiteralString was used as the base type in an index expression.

Behavior Change: Changed the --verifytypes command to skip docstring checks for overloads and for property setters and deleters.

Bug Fix: Fixed a bug that resulted in a false positive when evaluating type compatibility of a type that includes an invariant type argument consisting of a union that contains a generic callable.

Enhancement: Enhanced support for handling of functions that return NoReturn to include support for overloaded functions where some of the overloads return NoReturn and others do not.

Enhancement: Updated typeshed stubs to the latest version.

Enhancement: Added better verbose logging for the case where an import cannot resolve the source file leading to a reportMissingModuleSource diagnostic.

pyright - Published 1.1.265

Published by erictraut about 2 years ago

Bug Fix: Fixed two type evaluation bugs that caused false positive errors when using join method with LiteralString and when a format string is interpreted as a LiteralString.

Bug Fix: Fixed false positive errors that resulted from the previous change to format string type inference.

Enhancement: Updated typeshed stubs to the latest version.

Bug Fix: Fixed a bug that led to sporadic false positive errors for expressions that involve a call to super().

Bug Fix: Fixed a bug that resulted in a false positive error when assigning a property created through the @property decorator to a variable or parameter annotated with the type property.

Bug Fix: Fixed a bug that resulted in incorrect bidirectional type inference for constructor calls for generic classes when the expected type was Self.

Bug Fix: Fixed a bug that resulted in a false positive error when using an unpack operator (*) in a quoted type annotation with versions of Python prior to 3.11.

Performance: Improved performance of code flow engine in cases where two variables have significant strong interdependencies and are modified within a loop.

pyright - Published 1.1.264

Published by erictraut about 2 years ago

Bug Fix: Fixed bug in reportUnnecessaryContains check that resulted in a false positive when the container element type is a TypeVar. The same logic error was present (and fixed) in the type narrowing logic for in expressions.

Bug Fix: Fixed bug in reportUnnecessaryComparison check that results in a false positive error when comparison chaining is used.

Bug Fix: Fixed bug that resulted in a false positive error when using a TypedDict that has been narrowed via an assignment to a not-required key.

Bug Fix: Fixed a bug that resulted in incorrect type inference for unannotated parameters with a default argument value in an __init__ method.

Enhancement: Added support for _generate_next_value_ override for Enum class.

Bug Fix: Fixed a bug in the type printer code that resulted in an infinite recursion and crash.

Behavior Change: Changed reportUninitializedInstanceVariable check to exempt protocol classes.

Bug Fix: Fixed a bug that resulted in infinite recursion and a crash when inferring return types for functions that returned another function that also has an inferred return type, etc. in a cycle.

pyright - Published 1.1.263

Published by erictraut about 2 years ago

Bug Fix: Fixed bug that resulted in inconsistent behavior for types inferred from tuple expressions containing literal entries.

Bug Fix: Fixed recent regression that resulted in incorrect type evaluation when a forward-referenced recursive type alias was used as an iterable type.

Bug Fix: Fixed bug that resulted in incorrect type evaluation within case statement in some situations.

Bug Fix: Fixed bug that resulted in sporadic errors when evaluating index expressions within a loop.

Performance: Simplified some internal types, which results in less memory usage and better performance.

Performance: ixed a performance issue (combinatoric explosion) related to TypedDict classes that were narrowed based on a series of in type guard tests.

pyright - Published 1.1.262

Published by erictraut about 2 years ago

Performance: Added a faster code path for testing the type compatibility of a non-union type to a union type when the union type contains no unsolved TypeVars.

Performance: Added optimization in overload path that eliminates one extra validation of arguments in the common case.

Enhancement: Updated typeshed stubs to latest version.

Performance: Implemented tighter scoping for contextual evaluation. This improves performance of type evaluation in various use cases including semantic tokens.

Bug Fix: Fixed bug in type narrowing logic for "in" operator. It was not properly handling the case where the reference (LHS) type was a subtype of the container's element type.

Enhancement: Added support for new reportUnnecessaryContains diagnostic rule to catch potential bugs in in and not in containment checks.

Bug Fix: Changed the validation logic for type argument lists when found outside of a type annotation. The normal type annotation restrictions (such as no dynamic variable usage) should not apply in this case.

Bug Fix: Fixed a bug that caused defineConstants configuration setting not to work with the pyright and pylance VS Code extensions.

Bug Fix: Fixed a bug in the dataclass logic that resulted in incorrect handling of a dataclass field that is annotated both in the class body and (redundantly) in a method within the same class.

pyright - Published 1.1.261

Published by erictraut over 2 years ago

Behavior Change: Reduced the max code complexity constant to lower the cyclomatic complexity threshold for code analysis to prevent crashes with certain highly-complex code.

Bug Fix: Fixed regression that caused an internal assertion (and therefore a crash) when using an expression that includes two index expressions, one with a string literal and one without, like a[n].b.c['x'].

Enhancement: Added support for overloaded __getitem__ in iterables for for statements.

Enhancement: Enhanced the reportIncompatibleVariableOverride check to catch cases where a Final variable overrides a non-Final variable.

Bug Fix: Fixed bug that resulted in sporadic errors during type evaluation based on evaluation order.

Bug Fix: Fixed bug in constraint solver that led to a false positive error in some situations where the solution to a TypeVar involved the union of two other TypeVars.

Bug Fix: Fixed a bug that resulted in an incorrect type evaluation when a generic callable class variable was specialized recursively with type variables for the same class.

Bug Fix: Improved handling of type consistency checks for unions so the results are less dependent on the order of subtypes within the union.

Enhancement: Enhanced reportUnnecessaryTypeIgnoreComment to ignore lines that are unreachable.