Files
astral-ty/CHANGELOG.md
T
Micha Reiser ef52a1940d Bump version to 0.0.1-alpha.21 (#1205)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2025-09-19 08:42:23 +02:00

76 KiB

Changelog

0.0.1-alpha.21

Bug fixes

  • Fix inference of constructor calls to generic classes that have explicitly annotated self parameters in their __init__ methods (#20325)
  • Fix a stack overflow when computing completions for recursive types (#20354)
  • Fix panic in BoundMethodType::into_callable_type() (#20369)
  • Fix stack overflows in binary comparison inference (#20446)
  • Fix many "too many cycle iterations" panics concerning recursive type aliases and/or recursive generics (#20359)
  • Fix stack overflow involving subtype checks for recursive type aliases (#20259)
  • Fix panic when inferring the type of an infinitely-nested-tuple implicit instance attribute (#20333)

Server

  • Add autocomplete suggestions for unimported symbols (#20207, #20439)
  • Include generated NamedTuple methods such as _make, _asdict and _replace in autocomplete suggestions (#20356)

Configuration

  • Automatically add python/ to environment.root if a python/ folder exists in the root of a repository (#20263)

CLI

  • Add GitHub output format (#20358)
  • Add GitLab output format (#20155)

Typing semantics and features

  • Add support for generic PEP-695 type aliases (#20219)
  • Allow annotation expressions to be ast::Attribute nodes (#20413)
  • Allow protocols to participate in nominal subtyping as well as structural subtyping (#20314)
  • Attribute access on top/bottom materializations (#20221)
  • Bind Self type variables to the method, not the class (#20366)
  • Ensure various special-cased bound methods are understood as assignable to Callable (#20330)
  • Ensure various special-cased builtin functions are understood as assignable to Callable (#20331)
  • Fall back to object for attribute access on synthesized protocols (#20286)
  • Fix signature of NamedTupleLike._make (#20302)
  • Fix subtyping/assignability of function- and class-literal types to callback protocols (#20363)
  • Implement the legacy PEP-484 convention for indicating positional-only parameters (#20248)
  • Infer more precise types for collection literals (#20360)
  • Make TypeIs invariant in its type argument (#20428)
  • Narrow specialized generics using isinstance() (#20256)
  • Proper assignability/subtyping checks for protocols with method members (#20165)
  • Reduce false positives for ParamSpecs and TypeVarTuples (#20239)
  • Overload evaluation: retry parameter matching for argument type expansion (#20153)
  • Simplify unions of enum literals and subtypes thereof (#20324)
  • Support "legacy" typing.Self in combination with PEP-695 generic contexts (#20304)
  • Treat Hashable, and similar protocols, equivalently to object for subtyping/assignability (#20284)
  • Treat __new__ as a static method (#20212)
  • TypedDict: Add support for typing.ReadOnly (#20241)
  • Detect syntax errors stemming from yield from expressions inside async functions (#20051)
  • "foo".startswith is not an instance of types.MethodWrapperType (#20317)
  • Eliminate definitely-impossible types from union in equality narrowing (#20164)
  • Infer more precise types for the name and value properties on enum members (#20311)
  • Initial support for slots=True in dataclasses (#20278)
  • Improve type narrowing in situations involving nested functions (#19932)
  • Support type aliases in binary comparison inference (#20445)
  • Sync vendored typeshed stubs (#20394). Typeshed diff

Diagnostics

  • Improve specialization-error diagnostics (#20326)

Contributors

0.0.1-alpha.20

Bug fixes

  • Server: Cancel background tasks when shutdown is requested (#20039)
  • Server: Close signature help after ) (#20017)
  • Server: Fix incorrect docstring in call signature completion (#20021)
  • Fix 'too many cycle iterations' for unions of literals (#20137)
  • Fix namespace packages that behave like partial stubs (#19994)
  • Fix server hang (unchanged diagnostics) when changing file on Windows (#19991)
  • Apply KW_ONLY sentinel only to local fields (#19986)
  • Ignore field specifiers when not specified in @dataclass_transform (#20002)

Server

  • Add completion support for import and from ... import statements (#19883)
  • Add type as detail to completion items (#20047)
  • Ask the LSP client to watch all project search paths (#19975)
  • Fix incorrect inlay hint type (#20044)
  • Update goto definition, goto declaration and hover to consider constructor method (__init__) (#20014)
  • Add docstrings to completions based on type (#20008)
  • Fix goto targets for keyword arguments in nested function calls (#20013)
  • Introduce multiline pretty printer to render function signatures across multiple lines (#19979)

Configuration

  • Distinguish base conda from child conda (#19990)

Typing semantics and features

  • Add support for PEP 750: t-strings (#20085)
  • Add support for PEP 800: Disjoint bases (#20084)
  • Add precise inference for unpacking a TypeVar if the TypeVar has an upper bound with a precise tuple spec (#19985)
  • Add precise iteration and unpacking inference for string literals and bytes literals (#20023)
  • Completely ignore typeshed's stub for Any (#20079)
  • Enforce that an attribute on a class X must be callable in order to satisfy a member on a protocol P (#20142)
  • Evaluate static truthiness of non-definitely-bound symbols to "ambiguous" (#19579)
  • Fix the inferred interface of specialized generic protocols (#19866)
  • Infer slightly more precise types for comprehensions (#20111)
  • Disable boundness analysis for implicit instance attributes (#20128)
  • Add Top[] and Bottom[] special forms (#20054)
  • Preserve qualifiers when accessing attributes on unions/intersections (#20114)
  • Strict validation of protocol members (#17750)
  • Support __init_subclass__ (#20190)
  • Unpack variadic argument type in specialization (#20130)
  • Use invalid-assignment error code for invalid assignments to ClassVars (#20156)
  • Use specialized parameter type for overload filter (#19964)
  • __class_getitem__ is a classmethod (#20192)
  • Add cycle detection for find_legacy_typevars (#20124)
  • Add support for cyclic legacy generic protocols (#20125)
  • Don't eagerly unpack aliases in user-authored unions (#20055)
  • Don't mark entire type-alias scopes as Deferred (#20086)
  • Ensure union normalization really normalizes (#20147)
  • Improve cycle-detection coverage for apply_type_mapping (#20159)
  • Linear variance inference for PEP-695 type parameters (#18713)
  • Minor TypedDict fixes (#20146)
  • Typecheck dict methods for TypedDict (#19874)
  • Validate constructor call of TypedDict (#19810)
  • Sync vendored typeshed stubs (#20031, #20083, #20188) Typeshed diff

Diagnostics

  • Add search paths info to unresolved import diagnostics (#20040)
  • Better error message for attempting to assign to a read-only property (#20150)
  • Improve diagnostics for bad calls to functions (#20022)
  • Improve disambiguation of types via fully qualified names (#20141)
  • Print diagnostics with fully qualified name to disambiguate some cases (#19850)

Performance

  • Avoid unnecessary argument type expansion (#19999)
  • Limit argument expansion size for overload call evaluation (#20041)
  • Optimize TDD atom ordering (#20098)

Contributors

0.0.1-alpha.19

Bug fixes

  • Fix false-positive diagnostics if a function parameter is annotated with type[P] where P is a protocol class (#19947)
  • Fix ANSI colors in terminal output on old Windows terminals (#19984)
  • Fix protocol interface inference for protocols in stub files with ClassVar members and "subprotocols" that extend other protocols (#19950)
  • Fix inference of equality comparisons between enum members (#19666)
  • Remove incorrect type narrowing for if type(x) is C[int] (#19926)
  • Improve detection of TypeErrors resulting from protocol classes illegally inheriting from non-protocol classes (#19941). We previously detected this error, but only when the protocol class illegally inherited from a non-generic class or an unspecialized generic class. We now also detect it when the protocol class inherits from a specialized generic class.
  • Fix incorrectly precise type inference in some situations involving nested scopes (#19908)
  • Fix unpacking a type alias with a precise tuple spec (#19981)

NamedTuple semantics improvements

  • Synthesize read-only properties for all declared members on NamedTuple classes (#19899)
  • Allow any instance of a NamedTuple class to be passed to a function parameter annotated with typing.NamedTuple (#19915)
  • Detect NamedTuple classes where fields without default values illegally follow fields with default values (#19945). This causes TypeError to be raised at runtime.
  • Detect illegal multiple inheritance with NamedTuple (#19943). This causes TypeError to be raised at runtime.

Other typing and semantics improvements

  • Add support for stubs packages with partial in their py.typed files (#19931)
  • Look for site-packages directories in <sys.prefix>/lib64/ as well as <sys.prefix>/lib/ on non-Windows systems (#19978). This change fixes a number of unresolved-import false-positive diagnostics reported by Poetry users.
  • Add diagnostics for invalid await expressions (#19711)
  • Add else-branch narrowing for if type(a) is A when A is @final (#19925)
  • Improve solving of typevars with defaults, and typing.Self (#19786)
  • Support the kw_only parameter for dataclasses.dataclass() and dataclasses.field() (#19677)
  • Sync vendored typeshed stubs (#19923). Typeshed diff.

Server improvements

  • Improve goto/hover for definitions (#19976)

Performance improvements

  • Short-circuit a server inlay hints request if all settings under ty.inlayHints are disabled (#19963)
  • Speedup server tracing checks (#19965)
  • Add caching to logic for inferring whether a class is a NamedTuple, a dataclass or a TypedDict (#19912)
  • Speedup project file discovery (#19913)

Contributors

0.0.1-alpha.18

Bug fixes

Server

  • Implement support for "rename" language server feature (#19551)
  • Add ty.experimental.rename server setting (#19800)
  • Add ty.inlayHints.variableTypes server setting (#19780)
  • Add inlay hints for call arguments (configured by ty.inlayHints.callArgumentNames server setting) (#19269)
  • Enable goto definition to jump to the runtime definition in the standard library for stdlib symbols (rather than the type definition in typeshed's stubs) (#19529)
  • Support LSP client settings (#19614)
  • Update goto range for attribute access to only target the attribute (#19848)
  • Warn users if the server received unknown options (#19779)
  • Render docstrings in hover (#19882)
  • Resolve docstrings for modules (#19898)

Typing semantics and features

  • Add precise inference for indexing, slicing and unpacking NamedTuple instances (#19560)
  • Disallow typing.TypedDict in type expressions (#19777)
  • Implement module-level __getattr__ support (#19791)
  • Improve ability to solve TypeVars when they appear in unions (#19829)
  • Improve subscript narrowing for collections.ChainMap, collections.Counter, collections.deque and collections.OrderedDict (#19781)
  • Extend all tuple special casing to tuple subclasses (#19669)
  • Use separate Rust types for bound and unbound type variables (#19796)
  • Validate writes to TypedDict keys (#19782)
  • typing.Self is bound by the method, not the class (#19784)
  • Fix deferred name loading in PEP695 generic classes/functions (#19888)
  • Improve handling of symbol-lookup edge cases involving class scopes (#19795)

Performance

  • Improve performance around tuple types (#19840)
  • Improve performance of subtyping and assignability checks for protocols (#19824)
  • Improve multithreaded performance for large codebases (#19867)

Memory usage optimizations

  • Reduce memory usage of TupleSpec and TupleType (#19872)
  • Reduce size of member table (#19572)

Contributors

0.0.1-alpha.17

Bug fixes

  • Always refresh diagnostics after a watched files change (#19697)
  • Correctly instantiate generic class that inherits __init__ from generic base class (#19693)
  • Don't panic with argument that doesn't actually implement Iterable (#19602)
  • Fix "peek definition" in playground (#19592)
  • Fix empty spans following a line terminator and unprintable character spans in diagnostics (#19535)
  • Fix incorrect diagnostic when calling __setitem__ (#19645)
  • Fix lookup order of class variables before they are defined (#19743)
  • Fix more false positives related to Generic or Protocol being subscripted with a ParamSpec or TypeVarTuple (#19764)
  • Keep track of type qualifiers in stub declarations without right-hand side (#19756)

Server

  • Add progress reporting to workspace diagnostics (#19616)
  • Add stub mapping support to signature help (#19570)
  • Added support for "document symbols" and "workspace symbols" (#19521)
  • Fix server panic in workspace diagnostics request handler when typing (#19631)
  • Implement caching for workspace and document diagnostics (#19605)
  • Implement long-polling for workspace diagnostics (#19670)
  • Implement streaming for workspace diagnostics (#19657)
  • Implemented support for "selection range" language server feature (#19567)

CLI

  • Add progress bar to --watch mode (#19729)
  • Clear the terminal screen in --watch mode (#19712)
  • Resolve file symlinks in src walk (#19674)

Typing semantics and features

  • Support async/await, async with and yield from (#19595)
  • Add support for async for loops and async iterables (#19634)
  • Don't include already-bound legacy typevars in function generic context (#19558)
  • Infer types for key-based access on TypedDicts (#19763)
  • Improve isinstance() truthiness analysis for generic types (#19668)
  • Infer type[tuple[int, str]] as the meta-type of tuple[int, str] (#19741)
  • Remove false positives when subscripting Generic or Protocol with a ParamSpec or TypeVarTuple (#19749)
  • Remove special casing for string-literal-in-tuple __contains__ (#19642)
  • Remove special casing for tuple addition (#19636)
  • Return Option<TupleType> from infer_tuple_type_expression (#19735)
  • Support as-patterns in reachability analysis (#19728)
  • Support __setitem__ and improve __getitem__ related diagnostics (#19578)
  • Synthesize precise __getitem__ overloads for tuple subclasses (#19493)
  • Track different uses of legacy typevars, including context when rendering typevars (#19604)
  • Upcast heterogeneous and mixed tuples to homogeneous tuples where it's necessary to solve a TypeVar (#19635)
  • Fix incorrect lazy scope narrowing (#19744)
  • Synthesize __replace__ for dataclasses (#19545)

Diagnostics

  • Add diagnostics for async context managers (#19704)
  • Display generic function signature properly (#19544)
  • Improve the Display for generic type[] types (#19667)
  • Remap Jupyter notebook cell indices in ruff_db (#19698)

Documentation

  • Add the ty badge (#897)

Contributors

0.0.1-alpha.16

Bug fixes

  • Fix server panics when hovering over invalid syntax in Callable annotations (#19517)
  • match statements: Fix narrowing and reachability of class patterns with arguments (#19512)
  • Fix server panics when hovering over illegal Literal[…] annotations with inner subscript expressions (#19489)
  • Pass down specialization to generic dataclass bases (#19472)

Server

  • Add support for "go to definition" for attribute accesses and keyword arguments (#19417)
  • Add support for "go to definition" for import statements (#19428)
  • Add support for "document highlights" (#19515)
  • Add partial support for "find references" (#19475)
  • Prefer the runtime definition, not the stub definition, on a go-to-definition request for a class or function. Currently this is only implemented for definitions originating outside of the stdlib. (#19471)
  • Add semantic token support for more identifiers (#19473)
  • Avoid rechecking the entire project when a file in the editor is opened or closed (#19463)

Typing semantics and features

  • Handle splatted arguments in function calls (#18996)
  • Improve place lookup and narrowing in lazy scopes (#19321)
  • Add exhaustiveness checking and reachability analysis for match statements (#19508)
  • Improve reachability analysis for isinstance(…) branches (#19503)
  • Make tuple subclass constructors sound (#19469)
  • Extend tuple __len__ and __bool__ special casing to also cover tuple subclasses (#19289)
  • Add support for dataclasses.field (#19553)
  • Add support for dataclasses.InitVar (#19527)
  • Add support for @warnings.deprecated and typing_extensions.deprecated (#19376)
  • Do not consider a type T to satisfy a method member on a protocol unless the method is available on the meta-type of T (#19187)
  • Implement expansion of enums into unions of literals (#19382)
  • Support iterating over enums (#19486)
  • Detect enums if metaclass is a subtype of EnumType / EnumMeta (#19481)
  • Infer single-valuedness for enums deriving from int or str (#19510)
  • Detect illegal non-enum attribute accesses in Literal annotations (#19477)
  • Disallow assignment to Final class attributes (#19457)
  • Handle implicit instance attributes declared Final (#19462)
  • Disallow Final in function parameter- and return-type annotations (#19480)
  • Disallow illegal uses of ClassVar (#19483)
  • Make del x force a local resolution of x in the current scope (#19389)
  • Perform type narrowing for places marked global (#19381)
  • Infer correct types for attribute accesses on intersections with negative parts (#19524)
  • Sync vendored typeshed stubs (typeshed diff)

Memory usage optimizations

Contributors

0.0.1-alpha.15

Bug fixes

  • Avoid stale diagnostics for open-files diagnostic mode (#19273)
  • Fix inconsistent semantic syntax highlighting for parameters (#19418)
  • Fix checking of virtual files after re-opening from an unsaved edit (#19277)
  • Show the correct ty version in the LSP server (#19284)
  • Do not surface settings errors in unrelated Python files (#19206)
  • Do not ignore conditionally defined dataclass fields (#19197)
  • Fix panic for attribute expressions with empty value (#19069)
  • Fix assignabiliy of dataclasses to Callable types (#19192)
  • Fix __setattr__ call check precedence during attribute assignment (#18347)

Server

  • Add definition and declaration providers (go-to-definition, go-to-declaration) (#19371)
  • Add signature help provider (show signature and docstring when writing a call expression) (#19194)
  • Add "kind" to completion suggestions (#19216)
  • Add completions for submodules that aren't attributes of their parent (#19266)
  • Filter out private type aliases from stub files when offering autocomplete suggestions (#19282)
  • Handle configuration errors in the LSP more gracefully (#19262)
  • Use Python version and path from VSCode Python extension (#19012)
  • Publish errors in settings as LSP diagnostics (#19335)

Typing semantics and features

  • Add support for nonlocal statements (#19112)
  • Support empty function bodies in if TYPE_CHECKING blocks (#19372)
  • Emit a diagnostic when attempting to modify a typing.Final-qualified symbol (#19178)
  • Infer enum literal types when accessing enum members (#19328)
  • Synthesize __setattr__ for frozen dataclasses (#19307)
  • Improve equivalence for module-literal types (#19243)
  • Reduce false positives for TypedDict types (#19354)
  • Emit an error for global uses if there is no explicit definition in the global scope (#19344)
  • Sync vendored typeshed stubs (typeshed diff)

CLI

  • Add a -q/--quiet mode, -qq for silent output mode (#19233)

Contributors

0.0.1-alpha.14

Bug fixes

  • Add cycle detection to ty's implementation of disjointness between types, fixing a possible source of stack overflows when analysing recursive types (#19139)
  • Don't allow first-party code to shadow the stdlib types module (#19128). This fixes another possible source of stack overflows.
  • Fix descriptor lookups for most types that overlap with None (#19120). This means that e.g. object().__str__() now correctly binds the self argument of the __str__ method, as the object type overlaps with None.

Server

  • Filter a symbol from a stub file in autocomplete suggestions if it is an implementation detail of the stub (#19121)
  • Add initial support for semantic tokens (#19108). This feature allows editors to apply more advanced syntax highlighting. Currently, the supported tokens are: Namespace, Class, Parameter, SelfParameter,ClsParameter, Variable, Property, Function, Method, Keyword, String, Number, Decorator, BuiltinConstant and TypeParameter.
  • Initial support for workspace diagnostics (#18939). Enable this feature by setting the ty.diagnosticMode configuration setting to "workspace".
  • Use Python syntax highlighting in on-hover content (#19082)

Typing semantics and features

  • Understand that calls to functions returning Never / NoReturn are terminal with respect to control flow (#18333)
  • Add subtyping between type[] types and Callable types (#19026)
  • Support bare ClassVar annotations (#15768)
  • Understand that two protocols with equivalent method members are equivalent (#18659)
  • Support declared-only instance attributes such as self.x: int (#19048)
  • Sync vendored typeshed stubs (#19174): typeshed diff
  • Use the inferred type as the declared type for bare Final symbols (#19142)

Contributors

0.0.1-alpha.13

Bug fixes

  • Fix stack overflows related to mutually recursive protocols (#19003)
  • Don't add incorrect subdiagnostic for unresolved-reference in staticmethods and classmethods (#18487)
  • Fix rendering of long lines in diagnostic messages that are indented with tabs (#18962)
  • Fix reachability of star import definitions for nonlocal lookups (#19066)

Typing semantics and features

  • Support variable-length tuples in unpacking assignments (#18948)
  • Allow declared-only class-level attributes to be accessed on the class (#19071)
  • Infer nonlocal types as unions of all reachable bindings (#18750)
  • Use all reachable bindings for instance attributes and deferred lookups (#18955)
  • Improve protocol member type checking and relation handling (#18847)
  • Rework disjointness of protocol instances vs types with possibly unbound attributes, preventing some false instances of Never in hasattr narrowing (#19043)
  • Make tuple instantiations sound (#18987)
  • Add subdiagnostic about empty bodies in more cases (#18942)
  • Improve type-inference for __import__(name) and importlib.import_module(name) (#19008)
  • Eagerly evaluate certain constraints when analyzing control flow (#18998, #19044, #19068)
  • Update typeshed stubs (#19060): typeshed diff

Server

  • Add builtins to completions (#18982)
  • Support LSP go-to with vendored typeshed stubs (#19057)

Documentation

Performance

  • Remove ScopedExpressionId (#19019)

Contributors

0.0.1-alpha.12

Bug fixes

  • Avoid duplicate diagnostic when reporting errors in unpacked assignments (#18897)
  • Fix panics when "pulling types" for ClassVar or Final parameterized with >1 argument (#18824). These could cause issues when hovering over symbols in an IDE.

Improved modeling of Python runtime semantics

  • Add support for @staticmethods (#18809)
  • Discover implicit class attribute assignments in @classmethod-decorated methods. Recognize that assignments in the body of a @staticmethod-decorated method are never instance attributes (#18587)
  • Report when a dataclass contains more than one KW_ONLY field (#18731)

Type narrowing improvements

  • Ty will now perform isinstance() and issubclass() narrowing when the second argument is a union type, intersection type or TypeVar type (#18900)
  • Ty now narrows types in comprehensions and generator expressions (#18934)
  • Understand two NominalInstanceTypes as disjoint types if attempting to use multiple inheritance with their underlying classes would result in an instance memory layout conflict (#18864)

Other typing semantics features

  • Support "mixed" tuples such as tuple[int, *tuple[str, ...]] (#18600, #18901)
  • Support type inference for subscript expressions on union types (#18846)
  • Introduce a new subtyping framework in which gradual types can participate, allowing for more advanced union type simplification (#18799)
  • Surface the matched overload directly when reporting a diagnostic for an invalid call to an overloaded function (#18452)

Improvements to server autocompletions

  • Add completions for from module import <CURSOR> (#18830)
  • Enforce sort order of completions (#18917)
  • Include imported sub-modules as attributes on modules for completions (#18898)

Configuration

  • Anchor all src.exclude patterns, for consistency with src.include patterns (#18685)
  • Change environment.root to accept multiple paths (#18913)
  • Rename src.root setting to environment.root (#18760)
  • Support --python=<symlink to executable> (#18827)

Contributors

0.0.1-alpha.11

Breaking changes

  • Stabilize auto-complete; remove the opt-in experimental setting (#18650)

Bug fixes

  • Fix binary expression inference between Boolean literals and bool instances (#18663)
  • Fix panic that could occur when printing a class's "header" in diagnostic messages (#18670)
  • Fix panic when attempting to provide autocompletions for an instance of a class that assigns attributes to self[0] (#18707)
  • Fix panics when "pulling types" for various special forms that have the wrong number of parameters. These could cause issues when hovering over symbols in an IDE. (#18642)

Typing semantics and features

  • Support type narrowing for attribute and subscript expressions (#17643)
  • Add partial support for TypeIs (#18589)
  • Support dataclasses.KW_ONLY (#18677)
  • Filter overloads based on Any / Unknown (#18607)
  • Improve reachability analysis (#18621)
  • Model T: Never as a subtype of Never (#18687)
  • Update typeshed stubs (#18679): typeshed diff

Configuration

  • Allow overriding rules for specific files (#18648)

Server

  • Add python.ty.disableLanguageServices config (#18230)

Contributors

0.0.1-alpha.10

Server

  • Improve support for object.<CURSOR> completions (#18629)

Configuration

  • Add file inclusion and exclusion (#18498)
  • Infer the Python version from --python=<system installation> on Unix (#18550)

Bug fixes

  • Delay computation of 'unbound' visibility for implicit instance attributes (#18669). This fixes a significant performance regression in version 0.0.1-alpha.9.

Typing semantics and features

  • Support the del statement; model implicit deletion of except handler names (#18593)

Release

  • Include ruff/ directory in release source tarballs (#617)

Contributors

0.0.1-alpha.9

Typing semantics and features

  • Add generic inference for dataclasses (#18443)
  • Add support for global __debug__ constant (#18540)
  • Argument type expansion for overload call evaluation (#18382)
  • Exclude members starting with _abc_ from a protocol interface (#18467)
  • Infer list[T] for starred target in unpacking (#18401)
  • Infer list[T] when unpacking non-tuple type (#18438)
  • Support type annotation for legacy typing aliases for generic classes (#18404)
  • Allow using dataclasses.dataclass as a function (#18440)
  • Type narrowing for attribute/subscript assignments (#18041)

Diagnostics

  • Add hints to invalid-type-form for common mistakes (#18543)
  • Add subdiagnostic suggestion to unresolved-reference diagnostic when variable exists on self (#18444)
  • Track the origin of the environment.python setting for better error messages (#18483)

CLI

  • Fix --python argument for Windows, and improve error messages for bad --python arguments (#18457)

Bug fixes

  • Meta-type of type variables should be type[..] (#18439)
  • Only consider a type T a subtype of a protocol P if all of P's members are fully bound on T (#18466)
  • Fix false positives for legacy ParamSpecs inside Callable type expressions (#18426)
  • Fix panic when pulling types for UnaryOp expressions inside Literal slices (#18536)
  • Fix panic when trying to pull types for attribute expressions inside Literal type expressions (#18535)
  • Fix panic when trying to pull types for subscript expressions inside Callable type expressions (#18534)
  • Treat lambda functions as instances of types.FunctionType (#18431)
  • Implement disjointness between Callable and SpecialForm (#18503)

Server

  • Fix stale diagnostics in documents on Windows (#18544)
  • Add support for object.<CURSOR> completions (#18468)
  • Only provide declarations and bindings as completions (#18456)

Documentation

  • Add CONDA_PREFIX to --python documentation (#18574)
  • Update list of referenced environment variables (#612)
  • Document how the default value for python-version is determined (#18549)
  • Document the "all" option for python-platform (#18548)

Contributors

0.0.1-alpha.8

Typing semantics and features

  • Add subtyping between Callable types and class literals with __init__ (#17638)
  • Implement implicit inheritance from Generic[] for PEP-695 generic classes (#18283)
  • Infer the Python version from the environment if feasible (#18057)
  • Support ephemeral uv virtual environments (#18335)
  • Model that some Callable types should have all FunctionType attributes available (#18242)

Diagnostics

  • Add diagnostic hints for a function that has a non-None return-type annotation but no return statements (#18359)
  • Add hint if async context manager is used in non-async with statement (#18299)
  • Improve diagnostics if the user attempts to import a stdlib module that does not exist on their configured Python version (#18403)
  • Tell the user why we inferred a certain Python version when reporting version-specific syntax errors (#18295)

Bug fixes

  • Fix multithreading related hangs and panics (#18238)
  • Ensure Literal types are considered assignable to anything their Instance supertypes are assignable to (#18351)
  • Callable types are disjoint from non-callable @final nominal instance types (#18368)
  • Support callability of bound/constrained typevars (#18389)

Server

  • Fix server hang after shutdown request (#18414)
  • Improve completions by leveraging scopes (#18281)
  • Support cancellation and retry in the server (#18273)
  • Support publishing diagnostics in the server (#18309)

CLI

  • Add --config-file CLI arg (#18083)

Contributors

0.0.1-alpha.7

Bug fixes

  • Implement Python's floor-division semantics for Literal ints (#18249)
  • Don't warn about a yield expression not being in a function if the yield expression is in a function (#18008)
  • Fix inference of attribute writes to unions/intersections that including module-literal types (#18313)
  • Fix false-positive diagnostics in binary comparison inference logic for intersection types (#18266)
  • Fix instance vs callable subtyping/assignability (#18260)
  • Ignore ClassVar declarations when resolving instance members (#18241)
  • Fix crash when hovering over a ty_extensions.Intersection[A, B] expression in an IDE context (#18321)
  • Respect MRO_NO_OBJECT_FALLBACK policy when looking up symbols on type instances (#18312)
  • get_protocol_members returns a frozenset, not a tuple (#18284)

Typing semantics and features

  • Support import <namespace> and from <namespace> import module (#18137)
  • Support frozen dataclasses (#17974)
  • Understand that the presence of a __getattribute__ method indicates arbitrary members can exist on a type (#18280)
  • Add a subdiagnostic if invalid-return-type is emitted on a method with an empty body on a non-protocol subclass of a protocol class (#18243)
  • Improve invalid-type-form diagnostic where a module-literal type is used in a type expression and the module has a member which would be valid in a type expression (#18244)
  • Split invalid-base error code into two error codes (#18245)
  • Rename call-possibly-unbound-method to possibly-unbound-implicit-call (#18017)

Configuration

  • Add tests to src.root by default if a tests/ directory exists and is not a package (#18286)
  • Tell the user why we inferred the Python version we inferred (#18082)
  • Add support for detecting activated Conda and Pixi environments (#18267)
  • Move respect-ignore-files configuration setting under src section (#18322)

Server

  • Fix server panic when calling system_mut (#18252)
  • Abort process if worker thread panics (#18211)
  • Gracefully handle salsa cancellations and panics in background request handlers (#18254)

Contributors

0.0.1-alpha.6

Server

  • Add rule link to server diagnostics (#18128)
  • Avoid panicking when there are multiple workspaces (#18151)
  • Show related information in diagnostic (#17359)

Configuration

  • Default src.root setting to ['.', '<project_name>'] if an src/ directory does not exist but a <project-name>/<project-name> directory does exist (#18141)

Typing semantics and features

  • Consider a class with a dynamic element in its MRO assignable to any subtype of type (#18205)
  • Ensure that a function-literal type is always considered equivalent to itself (#18227)
  • Promote literals when inferring class specializations from constructors (#18102)
  • Support typing.TypeAliasType (#18156)
  • Infer function-call type variables in both directions (#18155)

Improvements to modeling of runtime semantics

  • Integer indexing into bytes returns int (#18218)
  • Emit invalid-exception-caught diagnostics even when the caught exception is not bound to a variable (#18202)

Usability improvements

  • Add hint to some diagnostics that PEP 604 union syntax is only available on Python 3.10+ (#18192)
  • Add note to unresolved-import diagnostic hinting to users to configure their Python environment (#18207)
  • Make division-by-zero an opt-in diagnostic rather than opt-out (#18220)

Import resolution improvements

  • Add support for PyPy virtual environments (#18203)

Contributors

0.0.1-alpha.5

Bug fixes

  • Fix assignability checks for invariant generics parameterized by gradual types (#18138)
  • Revert boolean expression control flow change which caused a performance regression (#18150)
  • Remove pyvenv.cfg validation check for lines with multiple = (#18144)

Contributors

0.0.1-alpha.4

Enhancements

  • Allow unions including Any/Unknown as bases (#18094)
  • Better control flow for boolean expressions that are inside if (#18010)
  • Improve invalid method calls for unmatched overloads (#18122)
  • Add support for NamedTuple 'fallback' attributes (#18127)
  • type[…] is always assignable to type (#18121)
  • Support accessing __builtins__ global (#18118)

Bug fixes

  • Fix relative imports in stub packages (#18132)

Contributors

0.0.1-alpha.3

Enhancements

  • Include synthesized arguments in displayed counts for too-many-positional-arguments (#18098)

Bug fixes

  • Fix redundant-cast false positives when casting to Unknown (#18111)
  • Fix normalization of unions containing instances parameterized with unions (#18112)
  • Make dataclass instances adhere to DataclassInstance (#18115)

CLI

  • Change layout of extra verbose output and respect --color for verbose output (#18089)

Documentation

  • Use Cargo-style versions in the changelog (#397)

Contributors

0.0.1-alpha.2

Enhancements

  • Improve diagnostics for failure to call overloaded function (#18073)
  • Fix inconsistent casing in invalid-return-type diagnostic (#18084)
  • Add type-expression syntax link to invalid-type-expression diagnostics (#18104)

Bug fixes

  • Add cycle handling for unpacking targets (#18078)
  • Do not look up __init__ on instances (#18092)

Typing

  • Infer parameter specializations of explicitly implemented generic protocols (#18054)
  • Check assignments to implicit global symbols are assignable to the types declared on types.ModuleType (#18077)
  • Fix various generics-related TODOs (#18062)

Documentation

  • Fix rule link in the configuration description (#381)
  • Use https://ty.dev/rules when linking to the rules table (#18072)
  • Use ty server instead of ty lsp (#360)
  • Fix missing > in HTML anchor tags in CLI reference (#18096)
  • Fix link to rules docs (#378)
  • Fix repository in README transform script (#361)

Contributors

0.0.1-alpha.1

Enhancements

  • Add basic support for non-virtual Python environments (#17991)
  • Do not allow invalid virtual environments from discovered .venv or VIRTUAL_ENV (#18003)
  • Refine message for why a rule is enabled (#18038)
  • Update --python to accept paths to executables in environments (#17954)
  • Improve diagnostics for assert_type and assert_never (#18050)
  • Add a note to the diagnostic if a new builtin is used on an old Python version (#18068)

Bug fixes

  • Fix infinite recursion bug in is_disjoint_from (#18043)
  • Recognize submodules in self-referential imports (#18005)

Typing

  • Allow a class to inherit from an intersection if the intersection contains a dynamic type and the intersection is not disjoint from type (#18055)
  • Allow classes to inherit from type[Any] or type[Unknown] (#18060)
  • Apply function specialization to all overloads (#18020)
  • Implement DataClassInstance protocol for dataclasses (#18018)
  • Induct into instances and subclasses when finding and applying generics (#18052)
  • Infer parameter specializations of generic aliases (#18021)
  • Narrowing for hasattr() (#18053)
  • Silence false positives for PEP-695 ParamSpec annotations (#18001)
  • Understand homogeneous tuple annotations (#17998)
  • __file__ is always a string inside a Python module (#18071)

CLI

  • Avoid initializing progress bars early (#18049)

Contributors

0.0.0-alpha.8

Changes

  • Add --config CLI arg (#17697)
  • Add CLI documentation and update README (#284)
  • Add a warning about pre-release status to the CLI (#17983)
  • Add missing bitwise-operator branches for boolean and integer arithmetic (#17949)
  • Add progress bar for ty check (#17965)
  • Add CLI reference (#17978)
  • Change default severity for unbound-reference to error (#17936)
  • Change range of revealed-type diagnostic to be the range of the argument passed in, not the whole call (#17980)
  • Default to latest supported Python version (#17938)
  • Display "All checks passed!" message in green (#17982)
  • Document configuration schema (#17950)
  • Generate and add rules table (#17953)
  • Handle type variables that have other type variables as a default (#17956)
  • Ignore possibly-unresolved-reference by default (#17934)
  • Implement global handling and load-before-global-declaration syntax error (#17637)
  • Make unused-ignore-comment disabled by default for now (#17955)
  • Recognise functions containing yield from expressions as being generator functions (#17930)
  • Fix stack overflow on recursive protocols (#17929)
  • Report duplicate Protocol or Generic base classes with [duplicate-base], not [inconsistent-mro] (#17971)
  • Respect the gradual guarantee when reporting errors in resolving MROs (#17962)
  • Support typing.Self in methods (#17689)
  • Support extending __all__ from an imported module even when the module is not an ExprName node (#17947)
  • Support extending __all__ with a literal tuple or set as well as a literal list (#17948)
  • Understand classes that inherit from subscripted Protocol[] as generic (#17832)
  • Update ty metadata (#17943)
  • Add py.typed (#276)
  • Bottom-up improvement of diagnostic messages for union type function calls (#17984)
  • Fix more ecosystem/fuzzer panics with fixpoint (#17758)
  • Remove lint: prefix from top-level diagnostic preamble (#17987)

Contributors