238 KiB
Changelog
0.0.34
Released on 2026-05-01.
Bug fixes
- Avoid panic in recursive protocol signature comparisons (#24665)
- Avoid panics for syntax error targets in invalid unpacking assignments (#24663)
- Fix unbounded type growth in nested-typevar substitutions (#24803)
- Prevent string annotation tokens from leaking across notebook cells (#24919)
- Support reference finding in stringified annotations (#24956)
LSP server
- Add hover support for PEP 695 type aliases (#24926)
- Offer string literal completion suggestions based on expected type (#24555)
- Support Go-to Definition, Go-To Declaration, and Find References for TypedDict and NamedTuple initializers (#24897)
- Support
Annotatedmetadata in semantic tokens (#24890)
Core type checking
- Add support for
functools.partial(#24582) - Fix ParamSpec defaults and alias variance (#24479)
- Fix
TypeIsassignability with gradual types (#24928) - Infer
dict(**TypedDict)inTypedDictcontext (#24709) - Support
infer_variancefor legacyTypeVar(#24930) - Support variance keywords in
ParamSpec(#24927) - Sync vendored typeshed stubs (#24952). Typeshed diff
- Unpack
UnionofTypedDictin various sites (#24958)
Diagnostics
- Add missing error context node for protocol to protocol assignability (#24905)
- Show a diagnostic for unsupported inferred Python version (#24581)
Performance
- Lazily build TypeVar accumulations (#24782)
Contributors
0.0.33
Released on 2026-04-28.
Notable changes
-
ty now prefers the declared type of an annotated assignment in more situations (#24802). Consider this example:
from some_library import untyped_function threshold: int | None = 0 result: str = untyped_function()ty previously favored the inferred type of the right hand side expression when
thresholdandresultwere used. This is useful forthreshold, as it allows something likethreshold += 1to work without an error: we know thatthresholdcould later becomeNone, but right now, we see that it is anint. However, forresult, the inferred type isUnknown. This is not a useful type and it can lead to false negatives. Starting with this release, ty will therefore prefer the declared type if the inferred and declared types are mutually assignable. In the above example,thresholdwill still be inferred asint(or ratherLiteral[1]), butresultwill now be inferred asstr. If you previously addedcasts to work around this behavior, you should be able to remove them after upgrading.
Bug fixes
- Fix reporting of annotation-only locals as unused (#24811)
- Fix project and workspace selection (#24824)
- Fix go-to definition for generic classes (#24714)
- Fix receiver coloring for aliased decorators (#24884)
LSP server
- Add support for go-to definition in literal enum member inlay hints (#24792)
- Add support for "baking" keyword argument inlay hints into the source code (#24667)
- Don't allow inlay hint edits when introducing a non global scope symbol (#24797)
- Omit semantic highlighting for unresolved symbols (#24718)
Core type checking
- Support narrowing with aliased conditional expressions (#24302)
- Model short-circuiting control flow in Boolean expressions (#24458)
- Handle
finallyblocks where alltry/exceptblocks are terminal (#24882) - Detect invalid
ClassVarvs instance-attribute overrides (#24767) - Emit diagnostic for invalid uses of
Unpack[...](#24868) - Infer lambda parameter types with
Callabletype context (#24317) - Support
**unpacking ofTypedDictin dict-literal assignments (#24703) - Support
Unpack[TypedDict]in**kwargssignatures (#24653) - Treat
[*xs]as an irrefutable pattern when matching onSequence(#24787) - Improve generics solving for unions in invariant positions (#24698)
- Improve generics solving for unions when matching against protocols (#24837)
Diagnostics
- Add error context to
invalid-return-typediagnostics,invalid-yielddiagnostics, attribute assignment diagnostics (#24770, #24771) - Add error context for invalid TypedDict assignments (#24790)
- Add error context for invalid intersection type assignments (#24772)
- Improve TypedDict to
dictassignment error diagnostics (#24768) - Add contextual secondary annotations in more places (#24696)
- Include full type in
invalid-keydiagnostics for unions of TypedDicts (#24693) - Emit more specific diagnostics for "possibly unbound" errors from context manager dunder methods invoked on a union. (#24662)
- Remove duplicate
invalid-type-formdiagnostics for PEP-613 type alias values (#24760) - Improve diagnostics for implicit calls to a possibly unbound unary operator (#24816)
- Improve diagnostics for possibly-unbound errors from implicit dunder calls on unions (#24676)
Performance
- Optimize signature checking based on number of arguments (#24674)
- Defer union of parameter types (#24756)
- Skip checks for gradual vararg calls (#24748)
Other changes
- Fix notifications about watched changes for entities outside any workspace (#24775)
Contributors
- @MatthewMckee4
- @lerebear
- @tonyxwz
- @sharkdp
- @felixscherz
- @MichaReiser
- @tamird
- @ibraheemdev
- @AlexWaygood
- @denyszhak
- @charliermarsh
- @mtshiba
- @EliteTK
- @carljm
0.0.32
Released on 2026-04-20.
Bug fixes
- Fix panic when
__get__usesConcatenateself-type and wraps a__call__(#24692) - Avoid panicking on overloaded
Callabletype context (#24661) - Expand class bases in per-base lint checks (#24695, #24699)
- Fix stack overflow for binary operator inference involving recursive types (#24551)
LSP server
- Dim out unreachable code in IDEs (#24580)
- Do not suggest argument completion when typing the value of a keyword argument (#24669)
- Retrieve the docstring from the overload implementation if an
@overload-decorated function has no docstring (#23920)
Core type checking
- Allow
ifstatements in TypedDict bodies (#24702) - Disallow
@disjoint_baseon TypedDicts and Protocols (#24671) - Do not consider a subclass of a
@dataclass_transform-decorated class to have dataclass-like semantics if it hastypein its MRO (#24679) - Reject using properties with
Neversetters or deleters (#24510) - Sync vendored typeshed stubs (#24646). Typeshed diff
Diagnostics
- Show error context for assignability diagnostics (#24309)
- Use partially qualified names when reporting diagnostics regarding bad calls to methods (#24560)
- Reduce source code context window to zero (#24689)
- Merge same-file annotations if there is only a single line separating them (#24694)
Performance
Contributors
- @JelleZijlstra
- @kc0506
- @denyszhak
- @carljm
- @dcreager
- @AlexWaygood
- @dylwil3
- @charliermarsh
- @sharkdp
- @ibraheemdev
0.0.31
Released on 2026-04-15.
Bug fixes
- Avoid panic from double inference for
namedtuple(typename=T, field_names=x, **{})(#24641) - Avoid panic from double inference with missing functional
Enum(...)names (#24638) - Avoid panic from double inference with functional
Enum(value=...)(#24639) - Fix cases where
invalid-keyfix doesn't converge, andoverride-of-final-methodproduces invalid syntax (#24649) - Fix unnecessary
ty:ignorecomments inserted by--add-ignorefor diagnostics starting on the same line (#24651)
CLI
- Add
--fixmode to enable auto-fix for diagnostics (#24097)
Performance
- Avoid excessive memory usage for dataclasses with many fields (#24620)
Core type checking
- Check inherited
NamedTuplefield conflicts (#24542) - Error when duplicate keywords are provided to TypedDict constructors (#24449)
- Respect mixed positional and keyword arguments in TypedDict constructor (#24448)
- Respect subclass shadowing for inherited NamedTuple fields (#24640)
- Skip
EnumMeta.__call__for enum constructor signatures (#24513)
Contributors
0.0.30
Released on 2026-04-13.
As of v0.0.30, ty no longer unions Unknown into most inferred types of unannotated attributes. For example:
class Foo:
def __init__(self) -> None:
self.value = 1
reveal_type(Foo().value) # revealed: int
Foo().value = "x" # error: [invalid-assignment]
In previous versions, reveal_type(Foo().value) would have included Unknown, so the assignment to "x" would not have been flagged. Since this can affect inferred attribute types throughout a codebase, upgrading may lead to both new and resolved diagnostics. Initializers of None and other non-literal singleton types remain exceptions. See #24531 for details.
Bug fixes
- Disallow bare
ParamSpecinConcatenateprefixes (#24474) - Ensure '/' parameter appears before '*' when rendering
Callabletypes (#24497) - Ensure nested conditional blocks inherit
TYPE_CHECKINGstate from outer blocks (#24470) - Fix bad diagnostic range for incorrect implicit
__init_subclass__calls (#24541) - Fix incorrect assignability of
type[T]to a metaclass (#24515) - Fix stack overflows from recursive types (#24413)
- Server: fix signature help for
ParamSpec-specialized class calls (#24399) - Use
TypedDictfield types as type context to inform the inference of arguments passed toTypedDictconstructors (#24422)
LSP server
- Adjust semantic tokens implementation to ensure that type alias values have "type form" syntax highlighting in IDEs (#24478)
- Completions: rank symbols from
typingandcollectionshigher than third party re-exports (#23643) - Ignore unsupported editor-selected Python versions (#24498)
- Improve
TypedDictconstructor support in the LSP by synthesizing__init__(#24476, #24522, #24535) - Return all attribute definitions for goto definition, rather than just the last definition in the given scope (#24332)
- Show
infosubdiagnostics in LSP diagnostic messages (#24328) - Use the context of the kind of object a parameter is expected to receive to inform syntax highlighting of arguments passed to call expressions (#23949)
Diagnostics
- Hide "Rule xyz is enabled"-style hints unless verbose mode was specified (#24469)
- Improve consistency of pedantic lints complaining about badly named types (#24575)
- Point to the first reachable declaration, rather than the first declaration, in declaration-based diagnostics (#24564)
Core type checking
- Add support for functional
Enum(...)syntax (#23602, #24570, #24571) - Allow
Finalvariable assignments in__post_init__(#24529) - Allow partially stringified
type[...]annotations, e.g.type["MyClass"](#24518) - Emit a diagnostic when attempting to inherit from a class with
__init_subclass__ = None(#24543) - Fix
TypeGuardandTypeIsnarrowing for unbound method calls (#24612) - Fix assignability of intersections with bounded TypeVars (#24502)
- Fix excess subscript argument inference for non-generic types so that
list[int][0]leads to 1 diagnostic, rather than 2 (#24354) - Inherit
dataclass_transformmetadata from metaclass bases (#24615) - Lazily evaluate declaration reachability in field and enum filters (#24451)
- Normalize explicit
Noneaccessors in manual property construction (#24492) - Reject deleting
Finalattributes (#24508) - Respect non-required keys in
TypedDictunpacking (#24446) - Respect property deleters in attribute deletion checks (#24500)
- Stop special-casing
strconstructor (#24514) - Stop unioning
Unknowninto types of un-annotated attributes (#24531) - Support
super()in metaclass methods (#24483) - Tighten up a few edge cases in
Concatenatetype-expression parsing (#24172) - Use basic blocks for determining if a node is in an
if TYPE_CHECKINGblock (#24394)
Contributors
- @charliermarsh
- @Glyphack
- @MichaReiser
- @sharkdp
- @carljm
- @YilunAllenChen
- @zanieb
- @AlexWaygood
- @thejchap
0.0.29
Released on 2026-04-05.
Bug fixes
- Avoid special-casing for
dataclasses.fieldif it's not infield_specifiers(#24397) - Reject unsupported
environment.python-versionvalues in configuration files (#24402) - Respect supported lower bounds from
requires-python(#24401)
Core type checking
- Add support for
types.new_class(#23144) - Fix PEP 695 type aliases in
withstatement (#24395) - Respect
__new__and metaclass__call__return types (#24357) - Treat enum attributes with type annotations as members (#23776)
Contributors
0.0.28
Released on 2026-04-02.
Bug fixes
- Mark loop header assignments as used to avoid false positives in "unused variable" diagnostics (#24336)
LSP server
- Show constructor signature of classes when hovering over them (#24257)
Core type checking
- Avoid emitting cascading diagnostics when parsing invalid type expressions (#24326)
- Handle most "deep" mutual TypeVar constraints (#24079)
- Improve consistency and quality of diagnostics relating to invalid type forms (#24325)
- Improve robustness of various type-qualifier-related checks (#24251)
- Infer the
extra_itemskeyword argument to class-based TypedDicts as an annotation expression (#24362) - Use bidirectional inference to fix false positives on operations such as
x: list[int | None] = [None] * 2(#24197) - Sync vendored typeshed stubs (#24340). Typeshed diff
- Tighten up validation of subscripts and attributes in type expressions (#24329)
- Use
infer_type_expressionfor parsing parameter annotations and return-type annotations (#24353) - Use
infer_type_expressionfor validating PEP-613 type aliases (#24370) - Validate TypedDict fields when subclassing (#24338)
- Validate type qualifiers in functional TypedDict fields and the
extra_itemskeyword to functional TypedDicts (#24360) - Improve diagnostics for invalid functional
TypedDicts (#24345)
Contributors
0.0.27
Released on 2026-03-31.
Bug fixes
- Fix panic on debug builds when attempting to provide autocomplete suggestions for
list[int]<CURSOR>()(#24167) - Fix instance-attribute lookup in methods of protocol classes (#24213)
- Fix nested global and nonlocal lookups through forwarding scopes (#24279)
- Fix panic on
list[Annotated[()]](#24303) - Fix stack overflow on
type A = TypeIs[Callable[[], A]](#24245) - Use
_clsas the name of the first argument for synthesizedcollections.namedtupleconstructor methods (#24333)
LSP server
- Fix semantic token classification for properties accessed on instances (#24065)
- Grey out unused bindings in the editor (#23305)
Core type checking
- Add bidirectional type context for TypedDict
get()defaults (#24231) - Add bidirectional type context for TypedDict
pop()defaults (#24229) - Add support for functional TypedDict (#24174, #24331, #24295)
- Ban type qualifiers in PEP-695 type aliases (#24242)
- Enforce
Finalattribute assignment rules for annotated and augmented writes (#23880) - Improve support for
Callabletype context (#23888) - Infer lambda expressions with
Callabletype context (#22633) - Don't incorrectly infer the type of a method as being a singleton type when it's accessed off an instance (#24039)
- Propagate type context through
awaitexpressions (#24256) - Resolve union-likes in emitting union attribute errors (#24263)
- Show the user where the variable was declared as
Finalwhen emitting a diagnostic about aFinalvariable being reassigned (#24194)
Contributors
0.0.26
Released on 2026-03-26.
Bug fixes
- Prevent "too many cycle iteration" panics in more situations (#24061)
- Fix false positives and false negatives when unpacking a union of tuples into a function call (#23298)
Core type checking
- Add support for
typing.Concatenate(#23689) - Validate the return type of generator functions (#24026)
- Support dataclass field
converters (#23088) - Disallow
Selfin metaclass and static methods (#23231) - Improve call inference for keyword-only
dict()(#24103) - Respect non-explicitly defined
dataclass_transformparams (#24170) - Unconditionally silence diagnostics in unreachable code (#24179)
- Respect terminal-function-call narrowing in global scope (#23245)
Performance
- Fix performance regression for narrowing on a larger
Literaltype(#24185)
Contributors
0.0.25
Released on 2026-03-24.
Breaking changes
- Support
type:ignore[ty:code]suppressions (#24096)
Bug fixes
- Avoid eager TypedDict diagnostics in
TypedDict | dictunions (#24151) - Fix Salsa panic propagation (#24141)
- Fix folding ranges of comments separated by statements (#24132)
- Fix loop-header reachability cycles in conditional unpacking (#24006)
- Fix subtyping of intersections containing
NewTypes of unions vs. unions (#24087) - Fix untracked reads in Salsa queries that can lead to backdating panics (#24051)
- Prevent tainted loop bindings in cycle normalization (#24143)
- Simplify an intersection of
N & ~TtoNeverifB & ~Twould simplify toNever, whereBis the concrete base type of aNewTypeN(#24086)
LSP
- Preserve blank lines between comments and imports in add-import action (#24066)
Type checking
- Add diagnostic hint for invalid assignments involving invariant generics (#24032)
- Add precisely-typed overloads for
TypedDictupdate (#24101) - Disallow read-only fields in
TypedDictupdates (#24128) - Expand bounded typevars to their upper bounds when evaluating truthiness comparisons between intersections and literal types (#24082)
- Emit
reveal_typediagnostics in unreachable code (#24070) - Improve
isinstance()reachability analysis (#24077) - Improve keyword argument narrowing for nested dictionaries (#24010)
- Infer
yieldexpression types (#23796) - Reduce diagnostic range for
invalid-metaclass(#24145) - Support narrowing for extended walrus targets (#24129)
- Unions/intersections of gradual types should be assignable to
Never(#24056)
Contributors
0.0.24
Released on 2026-03-19.
Bug fixes
- Ensure
TypedDictsubscripts for unknown keys returnUnknown(#23926) - Fix overflow with recursive
TypeIs(#23784) - Fix variance of frozen dataclass-transform models (#23931)
LSP server
- Improve semantic token classification for attribute access on union types (#23841)
Core type checking
- Improve performance and correctness by avoiding inferring intersection types for call arguments as a result of bidirectional inference (#23933)
- Narrow keyword arguments when unpacking dictionary instances (#23436)
- Discover
/usr/local/libdist-packages on Debian/Ubuntu (#23797) - Sync vendored typeshed stubs (#23963). Typeshed diff
Performance
- Introduce fast path for protocol non-assignability (#23952)
- Improved generic-solver performance in cases involving overload sets (#23881)
Contributors
0.0.23
Released on 2026-03-13.
Bug fixes
- Fix false-positive diagnostics for PEP-604 union annotations on attribute targets on Python 3.9 when
from __future__ import annotationsis active (#23915) dataclass_transform: Respectkw_onlyoverwrites in dataclasses (#23930)- Fix too-many-cycle panics when inferring loop variables with
Literaltypes (#23875)
Server
- Fix folding range classification of lines starting with
#(#23831) - Fix folding ranges for notebooks (#23830)
Core type checking
- Split errors for possibly missing submodules into a new
possibly-missing-submoduleerror code (enabled by default), and makepossibly-missing-attributeignored by default (#23918) - Improve handling of bidirectional inference when (#23844)
- Fix inference of conditionally defined properties (#23925)
Improvements to diagnostics
- Clarify in diagnostics that
from __future__ import annotationsonly stringifies type annotations (#23928)
Performance improvements
- Avoid duplicated work during multi-inference (#23923)
Contributors
0.0.22
Released on 2026-03-12.
Bug fixes
- Fix issue where variables could be inferred as
Divergentif they were assigned using tuple unpacking in loops (#23812) - Allow
error = "all"in a rootpyproject.tomlfile to be overridden usingtool.ty.overridesin a subdirectory'spyproject.tomlfile (#23712) - Only unsoundly upcast
type[]types to their constructorCallabletype during assignability checks, not during redundancy/subtyping checks (#23834, #23901) - Fix stack overflow that could occur with certain recursive protocols (#23870)
LSP server
- Improve syntax highlighting by fixing semantic token classification for generic class members in annotations (#23811)
CLI
- Add
ty explain <RULE>CLI command (#23766)
Core type checking
- Add validation for type parameters with defaults after
TypeVarTupleparameters (#23807) - Allow subtypes of
LiteralStringto be narrowed using equality checks (#23794) - Detect invalid partially stringified PEP-604 unions (#23285)
- Disambiguate duplicate-looking overloaded callables in union display (#23907)
- Don't promote module-literal types to
types.ModuleType(#23786) - Improve type context support for
__setitem__dunder calls (#23800) - Infer
t | {"foo": int}asTDiftis an instance of a TypedDicttdwith afoo: intkey (#23806) - Narrow
TtoT & strrather thanstrifTis a constrained TypeVar withstras one of its constraints (#23850) - Promote
NonetoNone | Unknownin invariant contexts (#23790) - Reject
type[Callable]in type annotations (#23753) - Support enum member access through enum instances and members (#23772)
- Eagerly narrow the type associated with keys of heterogeneous dict literals even when a dict literal appears as a subexpression inside a list or tuple literals (#23569)
- Ensure that
T & ~Sis always inferred as a subtype ofUduring generic inference ifTis understood as a subtype ofU(#23728) - Optimize and improve cycle recovery by preventing "tainted" unions in cycle normalization (#23563)
Installer
- Prefer downloading releases from Astral's mirror over GitHub (#2980)
Contributors
0.0.21
Released on 2026-03-05.
Bug fixes
- Avoid stack overflow with recursive typevar (#23652)
- Fix panic on incomplete except handlers (#23708)
- Allow unions of different-length iterables in
*argsunpacking into optional positional parameters (#23124) - Don't replace
Anyattributes withobjectafterisinstancenarrowing (#23725)
LSP server
- Exclude decorators from class/def code folding (#23543)
- Fix handling of non-Python text documents (#23704)
Configuration
- Add
allselector toty.jsonschema (#23721) - Fix precedence of
allselector in TOML configurations (#23723) - Make
allselector case-sensitive (#23713)
Type checking
- Add
invalid-enum-member-annotationlint rule (#23648) - Add a diagnostic for an unused awaitable (#23650)
- Add a diagnostic if a
TypeVaris used to specialize aParamSpec, or vice versa (#23738) - Add more type-variable default validation (#23639)
- Add unbound type variable detection in annotations (#23641)
- Apply narrowing to walrus values (#23687)
- Do not union
Unknowninto unannotated container types (#23718) - Avoid inferring generics with negative intersections (#23750)
- More precise types for
nameandvalueof an enum (#23683) - Better preserve user-provided union order in inferred specializations (#23715)
- Support narrowing in ternary expressions (#23726)
- Validate bare ParamSpec usage in type annotations, and support stringified ParamSpecs as the first argument to
Callable(#23625)
Contributors
- @charliermarsh
- @zsol
- @Gankra
- @MichaReiser
- @AlexWaygood
- @rizzip
- @iksuddle
- @dcreager
- @BurntSushi
- @carljm
- @oconnor663
0.0.20
Released on 2026-03-02.
Bug fixes
- Disallow negative narrowing for
isinstance()orissubclass()checks involvingtype[]types (#23598) - Fix binary operations between an instance of a
NewTypeoffloatand an instance ofAny/Unknown(#23620) - Fix bug where ty would think that a
Callablewith a variadic positional parameter could be a subtype of aCallablewith a positional-or-keyword parameter (#23610) - Fix inference of
t.__mro__iftis an instance oftype[Any](#23632) - Fix overloaded callable assignability for unary
Callabletargets (#23277) - Limit recursion depth when displaying self-referential function types (#23647)
- Ensure that
python -m tyworks even when ty was installed into an ephemeral virtual environment (#2852)
LSP server
- Add support for the LSP protocol's "type hierarchy" feature (#23566)
Type checking
- Add more ParamSpec validation for
P.argsandP.kwargs(#23640) - Ban nested
Required/NotRequired, and ban them both outside ofTypedDictfields (#23627) - Detect inconsistent generic base class specializations that appear in the same MRO (#23615)
- Detect invalid uses of
@finalon non-methods (#23604) - Add partial support and validation for
Unpackwhen used with tuple types (#23651) - Recurse into tuples and nested tuples when applying special-cased validation of arguments passed to
isinstance()andissubclass()(#23607) - Reject ellipsis literals in odd places in type/annotation expressions (#23611)
- Reject functions with PEP-695 type parameters that shadow type parameters from enclosing scopes (#23619)
- Reject generic metaclasses parameterized by type variables (#23628)
- Treat
dataclass_transformdataclasses as neither frozen nor non-frozen (#23366) - Validate that type variable defaults don't reference later type parameters or type parameters out of scope (#23623)
Typeshed
- Sync vendored typeshed stubs (#23642). Typeshed diff
Contributors
- @Hugo-Polloli
- @zanieb
- @sharkdp
- @mtshiba
- @carljm
- @charliermarsh
- @sinon
- @BurntSushi
- @oconnor663
- @AlexWaygood
- @zsol
0.0.19
Released on 2026-02-26.
Bug fixes
- Fix panic in diagnostic rendering when attempting to render a code frame pointing to leading whitespace (#23458)
- Fix panics and incorrect inference stemming from incorrectly considering overloads in another file as being associated with a function in the file being checked (#21977)
- Fix panic when attempting to narrow the type of a dictionary key that was assigned using a multi-target assignment, e.g.
x = y = {"a": 1}(#23523) - Fix infinite hang on mutually recursive
TypeAliasTypedefinitions (#23397)
LSP server
- Fix inlay hints for starred unpacking targets (#23454)
Core type checking
- Fix assignability, subtyping and equivalence checks relating to
typing.Generatorprior to Python 3.13 (#23386) - Understand that a scope's control flow terminates after
await foo()iffooreturnstyping.Awaitable[typing.Never]or similar (#23479) - Implement stricter handling of calls to instances of
type[T]types (#23472) - Support basic type narrowing for
case {...}:patterns inmatchstatements (#23462) - Fix bugs that could manifest in incorrect overload evaluation, false-positive complaints regarding
assert_typecalls or false-positiveredundant-castdiagnostics by reimplementing the equivalence type relation as mutual subtyping of top and bottom materializations (#23428) - Fix equality and
__contains__narrowing with PEP-695 type aliases (#23545) - Support
_value_annotations on enum classes (#22228)
Improvements to diagnostics
- Improve diagnostics when attempting to specialize non-generic types (#23516)
- Render subdiagnostics when
--output-format=githubis specified (#23455)
Performance
- Add a cached method for calculating the intersection of two types (#23547)
- Add a cached method for calculating the union of two types (#23565)
- Reduce the threshold above which
Literaltypes in unions are upcasted to nominal-instance types in situations where the union type is recursively defined (#23521) - Control flow: isolate the calculation of "loop header reachability" in a dedicated, cached function (#23520)
Contributors
- @AlexWaygood
- @silamon
- @ibraheemdev
- @Hugo-Polloli
- @charliermarsh
- @knutwannheden
- @oconnor663
- @carljm
- @mtshiba
0.0.18
Released on 2026-02-20.
Bug fixes
- Support classes dynamically created via
type(...)with cyclic bases (#22792) - Fix incorrect types inferred when unpacking mixed tuples (#23437)
- Fix stack overflow for self-referential
TypeOfin annotations (#23407) - Fix several server panics that could occur when computing semantic tokens for the current file (#23403), #23398, #23401)
LSP server
- Add code folding support (#23393)
- Add warning message when running
ty serverinteractively (#23416) - Exclude test-related symbols from non-first-party packages in auto-import completions (#23252)
- Fix bug where diagnostics could disappear after opening an external file (#23447)
- Remove spurious destination for Go-To Definition on variables defined in a loop (#23391)
- Use the fully qualified name when "baking" an inlay hint into the source code if the scope already contains a variable with the same name as the unqualified name (#23265)
- Resolve TypeVars in
call_signature_detailsparameter types (#23149)
CLI
- Add
--output-formattoty version(#23387)
Configuration
Type checking
- Add a new diagnostic to detect invalid class patterns in
matchstatements (#22939) - Allow
SelfinClassVartype annotations (#23362) - Consider synthesized methods and
ClassVar-qualified declarations when determining whether an abstract method has been overridden in a subclass (#23381) - Add a diagnostic when combining
FinalandClassVar(#23365) - Fix return type of
assert_never(#23389) - Fix
assert_typediagnostic messages (#23342) - Ban PEP-613 type alias values from containing type-qualifier special forms (#23444)
- Infer
LiteralStringforf"{literal_str_a} {literal_str_b}"(#23346) - Infer precise types for bit-shift operations on integer literals (#23301)
- Make
[abstract-method-in-final-class]diagnostics less verbose for classes with many abstract methods (#23379) - Improve diagnostics for abstract
@finalclasses (#23376) - Only perform literal promotion for implicitly inferred literals (#23107)
- Parenthesize callable types when they appear in the return annotation of other callable types (#23327)
- Consider a call to a generic function returning
Neverto terminate control flow (#23419) - Support calls to intersection types (#22469)
- Validate annotated assignments to attributes on self (#23388)
- Treat a bytes-literal type as a subtype of
Sequence[<constituent integers in the bytestring>](#23329) - Allow a string-literal argument to match against an
Iterableparameter in type variable inference. (#23326) - Support narrowing from a
Callabletype returning aTypeGuardtype (#23280)
Performance
- Consider all code paths as being ambiguously reachable in cases with pathologically large control-flow graphs (#23399)
Typeshed
- Sync vendored typeshed stubs (#23279, Typeshed diff). Typeshed diff
Contributors
- @toby-bro
- @Hugo-Polloli
- @MatthewMckee4
- @BurntSushi
- @ibraheemdev
- @knutwannheden
- @Glyphack
- @charliermarsh
- @AlexWaygood
- @abhijeetbodas2001
- @carljm
- @sharkdp
0.0.17
Released on 2026-02-13.
Bug fixes
- Avoid
Literalpromotion for constrainedTypeVars withLiteralbounds (#23209) - Fix false positives in
TypeVarshadowing checks (#23222)
Core type checking
- Support generic protocols (#21902)
- Perform control-flow analysis in loops (#22794)
- Support
typing.Selfin attribute annotations (#23108) - Support type narrowing in situations with calls to
NoReturnfunctions (#23109) - Support type narrowing and reachability analysis based on
os.namechecks (#23230) - Detect overrides of
Finalclass variables in subclasses (#23180) - Fix bound method access on
None(#23246) - Fix method calls on subclasses of
Any(#23248) - Disallow type variables within PEP-695 type variable bounds and constraints (#22982)
- Emit error for attribute access on union where some elements lack the attribute (#23042)
- Emit error for invalid typevar defaults (#23194)
- Improve display of
ParamSpecs in some situations (#23211)
LSP server
- Add hover and go-to-declaration support for subscript literals (#22837)
- Assign lower completion ranking to deprecated names in auto import (#23188)
- Improve spans of references to submodules imported in an
__init__.py(#21795) - Include conditional symbols (like
datetime.UTC) in auto-import in more cases (#23249) - Support auto-import for symbols in inlay hints (#22111)
- Include overload declarations in find-references (#23215)
Performance
- Avoid
UnionBuilderoverhead when creating a new union from the filtered elements of an existing union (#22352)
Other changes
- Allow discovering dependencies in system Python environments (#22994)
- Apply workspace settings to virtual files (#23228)
- Add support for
--output-format=junit(#22125) - Use a smaller diagnostic range for
inconsistent-mrodiagnostics (#23213)
Contributors
- @carljm
- @BurntSushi
- @charliermarsh
- @Glyphack
- @cetanu
- @AlexWaygood
- @joelostblom
- @Gankra
- @mtshiba
- @MatthewMckee4
- @Hugo-Polloli
- @sharkdp
- @alex
- @dcreager
- @oconnor663
0.0.16
Released on 2026-02-10.
Bug fixes
- Allow stringified argument in PEP-613 alias to
Optional(#23200) - Fix fuzzer panic on slice expression in unclosed comprehension (#23146)
- Fix combinatorial explosion due to fixed-length tuple expansion in overload matching (#23190)
- Respect
@no_type_checkwhen combined with other decorators (#23177) - Fix diagnostic location for an incorrect sub-call to a specialized ParamSpec (#23036)
LSP server
- Assign lower completions ranking to deprecated functions and classes (#23089)
- Change goto-def for class constructors to always go to class definition (#23071)
- Ensure diagnostic mode is consistent across projects inside the LSP server (#23121)
- Don't include the class
Fooin autocomplete suggestions when the user is typing outFoo's bases (#23141) - Fix parameter references across files via keyword args (#23012)
- Fix wrong inlay hints for overloaded function arguments (#23179)
- Support diagnostics in newly created files inside neovim (#23095)
- Exclude already-included classes when providing completion suggestions for class bases (#23085)
CLI
- Add support for
TY_OUTPUT_FORMATenvironment variable (#23123) - Fall back to
python3found in$PATHif no environment is found (#22843)
Type checking
- Add
inconsistent-mroautofix to moveGeneric[]to the end of the bases list (#22998) - Add precise return-type inference for
struct.unpack(#22562, #23130) - Disallow TypeVars within ClassVars (#23184)
- Emit diagnostic on unbound call to abstract
@classmethodor@staticmethod(#23182) - Fix false-positive diagnostics when providing the
total=keyword toTypedDictclasses that had PEP-695 type parameters (#23114) - Narrow both left- and right-hand operands where possible (#23084)
- Narrow chained operators (#23093)
- Narrow equality subscripts on either operand (#23104)
- Recognize
__dataclass_transform__to support SQLModel (#23070) - Relax the attribute narrowing condition to support deeper-nested attribute type narrowing (#22440)
- Support constrained TypeVar compatibility across function boundaries (#23103)
- Support comparison methods (
__gt__, etc.) where a parameter is annotated with aLiteraltype (#23100) - Support partially specialized type context (#22748)
- Use type context when inferring constructor argument types (#23139)
- Validate
TypedDictconstructor calls for generic aliases andtype[...]targets (#23113)
Performance
- Conservative narrowing places optimization (#22734)
Contributors
- @rbange
- @rayzeller
- @charliermarsh
- @11happy
- @figsoda
- @mtshiba
- @ibraheemdev
- @ngnpope
- @sakgoyal
- @oconnor663
- @ericmarkmartin
- @Hugo-Polloli
- @Glyphack
- @sharkdp
- @carljm
- @BurntSushi
0.0.15
Released on 2026-02-04.
Bug fixes
- Add support for resolving imports of packages installed into Debian/Ubuntu
dist-packagesdirectories (#22466) - Avoid
not-iterablefalse positives when iterating over an instance of an intersection type with only negated elements (#22089) - Fix support for stringized annotations in very large files (#22913)
- Don't emit Liskov diagnostics for methods with mangled names (#23062)
- Enforce that a
Finalsymbol cannot be reassigned even after a conditional binding (#22986) - Fix TypedDict construction from existing TypedDict values (#22904)
- Fix
Selfresolution for classes nested within methods (#22964) - Fix bidirectional inference with PEP 695 union type aliases (#22988)
- Fix edge-case bugs when narrowing tagged unions in
matchstatements (#22870) - Fix false-positive diagnostics when iterating over an instance of an intersection that includes a TypeVar of which the upper bound is a union where the union includes a non-iterable type (#22117)
- Fix lookup of
__contains__to respect descriptors (#23056) - Fix narrowing of
nonlocalvariables with conditional assignments (#22966) - Fix several bugs that could affect
NewTypes ofNewTypes offloat(#22997) - Fix several type narrowing bugs involving PEP-695 type aliases (#22894)
- Fix spurious query cycles in decorated functions with parameter defaults, for improved performance and improved determinism (#23014)
- Fix unary and comparison operators for TypeVars with union bounds (#22925)
- Understand functions as method descriptors even if they are decorated with a decorator annotated as returning a PEP-695 alias to a
Callabletype (#22902) dataclass_transform: Fix visibility of field specifiers when models are nested inside methods (#23069)
LSP server
- Fix hover showing
Unknownfor bareFinalinstance attributes (#23003) - Improve support for goto-type, goto-declaration, hover, and highlighting of string annotations (#22878)
- Include setters and deleters when renaming properties (#22999)
- Show type qualifiers like
Finalin on-hover hints (#23005)
Configuration
- Add new
unused-type-ignore-commentrule (#22790) - Add a mechanism to ignore/warn/select all rules (#22832)
- Support multiple workspace folders in a single ty LSP server instance (#22953)
- Only add
./srcas a search path if./src/__init__.py(i)does not exist (#22851)
Type checking
- Add a diagnostic detecting if a variable is declared as
Finalbut never has any bindings (#23001) - Add a diagnostic detecting overridden comparison dunder methods on
order=Truedataclasses (#22689) - Add a hint to
invalid-argument-typeandinvalid-assignmentdiagnostics if a variable is annotated with a type from thenumbersmodule (#22931, #22938) - Add diagnostic hint on
unresolved-referenceto suggest using "list" instead of "List" (#22827) - Add new diagnostic for invalid dataclass field orders (#19825)
- Allow a subclass method with a positional-only parameter to override a superclass method without that parameter if the parameter in the subclass method has a default value (#23037)
- Allow self-referential imports outside the global scope (#22963)
- Ban
...in odd places inside tuple specializations (#22889) - Ban
Required,NotRequiredandReadOnlyin parameter annotations (#22888) - Ban legacy
TypeVarbounds or constraints from containing type variables (#22949) - Ban multiple unpacked variadic tuples in a
tuplespecialization (#22884) - Detect generic
Callables in the return type of function signatures (#22954) - Detect invalid
isinstance()andissubclass()calls againstTypedDictclasses (#22887) - Detect invalid
issubclass()calls againstProtocolclasses with non-method members (#22896) - Detect invalid attempts to subclass
Protocol[]andGeneric[]simultaneously (#22948) - Emit a diagnostic on incorrect applications of the legacy convention for specifying positional-only parameters (#22943)
- Emit an error if a
TypeVarTupleis used to subscriptGenericorProtocolwithout being unpacked (#22952) - Fallback to metaclass
__getattr__or__getattribute__when looking up attributes on class objects (#22985) - Fix a bug where an overridden type in a dataclass subclass would not be respected if the dataclass subclass field had a default value but the superclass field did not (#22965)
- Improve bidirectional type inference involving PEP-695 type aliases (#22989)
- Improve detection of invalid
NewTypes with generic bases (#22961) - Improve reachability analysis when evaluating the truthiness of expressions that involve variables that may not be bound in all code paths (#22971)
- Improve the error message if
**is used with a non-mapping in the context of a call to an overloaded function (#22921) - Infer
ParamSpecfrom class constructors for callable protocols (#22853) - Move the location of some
invalid-overloaddiagnostics (#22933) - Point to an overload with an invalid
@finaldecorator when emittinginvalid-overloaderrors for invalid@finaldecorators (#22893) - Avoid false positives when iterating over an instance of an intersection with only negated elements by preserving "pure negation" types in descriptor lookups (#22907)
- Promote
Literaltypes when inferring elements for very large unannotated tuples, for improved performance (#22841) - Recognize functions with stub bodies in
Protocolclasses as implicitly abstract (#22838) - Reduce false positives involving heterogeneous dicts by tracking dictionary literal keys as individual places (#22882)
- Reduce false positives when subscripting classes generic over
TypeVarTuples (#22950) - Remove special handling for
Any()inmatchclass patterns (#23011) - Support
type[None]in type expressions (#22892) - Support legacy namespace packages declared using
pkg_resources.declare_namespace(#22987) - Sync vendored typeshed stubs (#23006), Typeshed diff
- Validate signatures of dataclass
__post_init__methods (#22730)
Contributors
- @charliermarsh
- @stefanvanburen
- @ibraheemdev
- @abhijeetbodas2001
- @MichaReiser
- @dcreager
- @PrettyWood
- @sharkdp
- @oconnor663
- @Feiyang472
- @denyszhak
- @mtshiba
- @AlexWaygood
- @11happy
- @BurntSushi
- @carljm
- @Gankra
- @MentalMegalodon
- @thejchap
0.0.14
Released on 2026-01-26.
Bug fixes
- Consider keyword arguments when unpacking a variadic argument (#22796)
- Fix binary operator false-positive for constrained TypeVars (#22782)
- Fix docstring rendering for literal blocks after doctests (#22676)
- Fix false-positive
unsupported-operatorfor "symmetric" TypeVars (#22756) - Fix panic when overriding a final method using an assignment (#22831)
- Fix unary operator false-positive for constrained TypeVars (#22783)
- Fix generic functions with a generic (ParamSpec) decorator (#22544)
- Fix
memo.changed_atassertion panics (#22498)
LSP server
- Look up attributes on metaclasses for Go to Definition (#22758)
- Suppress type inlay hints for leading-underscore assignments (#22855)
Configuration
- Add
allowed-unresolved-importssetting (#22800)
Other changes
- Add
assert-type-unspellable-subtypediagnostic, for failedassert_type()where the actual type is a subtype of the named type that can't be spelled in a type expression (#22815) - Add a new
empty-bodyreturn code for functions with stub bodies that have non-Nonereturn annotations (#22846) - Add diagnostic disambiguation for different type aliases with the same name (#22852)
- Add support for dict literals and dict() calls as default values for parameters with TypedDict types (#22161)
- Add support for subscripts on intersections (#22654)
- Avoid duplicate syntax errors for
awaitoutside functions (#22826) - Emit an error if the same type parameter appears more than once in a
Generic[]subscript (#22738) - Emit diagnostic for unimplemented abstract method on @final class (#22753)
- Fix GitLab Code Quality output format for empty diagnostics (#22833)
- Fix assignment in decorated method causing
Unknownfallback (#22778) - Fix false negative when using a non-runtime-checkable protocol in a
matchclass pattern (#22836) - Improve completion rankings for raise-from/except contexts (#22775)
- Improve invalid assignment diagnostics with type context (#22643)
- Improve support for kwarg splats in dictionary literals (#22781)
- Infer
TypedDicttypes with >=1 required key as being always truthy (#22808) - Point to an overload with an invalid
@finaldecoator when emittinginvalid-overloaderrors for invalid@finaldecorators (#22812) - Require both
*argsand**kwargswhen calling aParamSpeccallable (#22820) - Stricter validation of
TypedDictdefinitions (#22811) - Support recursive and stringified annotations in functional
typing.NamedTuples (#22718) - Support solving generics involving PEP 695 type aliases (#22678)
- Use a more lenient fallback type for failed
namedtuple()andNamedTuplecalls (#22765) - Use type context from augmented assignment dunder calls (#22540)
- Check that starred arguments in function calls are iterable (#22805)
Contributors
- @AlexWaygood
- @maifeeulasad
- @RasmusNygren
- @ntBre
- @Imbuzi
- @dhruvmanila
- @ibraheemdev
- @carljm
- @Hugo-Polloli
- @charliermarsh
- @MichaReiser
- @bxff
- @felixscherz
- @denyszhak
0.0.13
Released on 2026-01-21.
Bug fixes
- Fix
--force-excludewhen excluding entire directories (#22595) - Fix missing syntax highlighting for aliased import names (#22675)
- Highlight interpolated-parts in t-strings (#22674)
- Fix the inferred MRO of functional namedtuple classes (#22722)
- Make special cases for subscript inference exhaustive, ensuring that the special casing for tuple subscripts is applied when a union of tuples or an alias to a tuple type is subscripted (#22035)
LSP server
- Improve completion suggestions inside class definitions (#22571)
- Improve performance of completions (#22630)
- Remove completion suggestions for redundant re-exports that share the same top-most module (#22581)
Core type checking
- Add basic support for overloads in
ParamSpec(#21946) - Allow
...as a default value for any parameter if the function is in anif TYPE_CHECKINGblock (#22624) - Allow
if type(x) is Ynarrowing for types other than class-literal types (#22729) - Avoid overload errors when detecting dataclass-on-tuple (#22687)
- Avoid reporting overload errors for successful union variants (#22688)
- Ban
NewTypes with generic bases (#22653) - Fix PEP 695 type aliases not expanding in overload resolution (#22589)
- Fix the return type for synthesized
NamedTuple.__new__methods (#22625) - Emit diagnostics for
NamedTuple,TypedDict,EnumorProtocolclasses decorated with@dataclass(#22672) - Emit
invalid-type-formdiagnostics for stringified annotations where the quoted expression is invalid (#22752) - Infer the implicit type of
clsin__new__methods (#22584) - Make
ModuleTypeandobjectattributes available on namespace packages (#22606) - Make
NamedTuple(...)andnamedtuple(...)calls stricter (#22601) - Narrow on bool and byte subscripts (#22684)
- Narrow on negative subscript indexing (#22682)
- Override
__file__tostrwhen applicable on imported modules (#22333) - Add bidirectional inference for comprehensions (#22564)
- Recognize string-literal types as subtypes of
Sequence[Literal[chars]](#22415) - Add right-hand-side narrowing for
if Foo is type(x)expressions (#22608) - Add simple syntactic validation for the right-hand side of PEP-613 type aliases (#22652)
- Add support for passing
typenameandfield_namesby keyword argument tocollections.namedtuple()calls (#22660) - Add support for starred unpacking in class bases (#22591)
- Validate constructor arguments when a class is used as a decorator (#22377)
- Validate field names for
typing.NamedTuple(...)(#22599) - Add diagnostic on overridden
__setattr__and__delattr__in frozen dataclasses (#21430) - Fix unary operators on
NewTypes offloatorcomplex(#22605)
Configuration
- Support overriding
respect-type-ignore-comments(#22615)
Diagnostics
- Don't add a subdiagnostic pointing to the TypeVar definition if the TypeVar is
Self(#22646) - Show final search path instead of "and 1 more paths" (#22776)
- Group
type[]elements together when displaying union types (#22592)
Performance
- Cache
ClassType::nearest_disjoint_base(#22065)
Other changes
- Sync vendored typeshed stubs (#22590, Typeshed diff
Contributors
- @bxff
- @jhartum
- @thejchap
- @AlexWaygood
- @charliermarsh
- @RasmusNygren
- @mswart
- @MatthewMckee4
- @11happy
- @ibraheemdev
- @sinon
- @MichaReiser
- @carljm
- @BurntSushi
- @dhruvmanila
- @oconnor663
- @zanieb
0.0.12
Released on 2026-01-14.
Bug fixes
- Avoid panic that could occur when
casting an object to a TypedDict or union of TypedDicts (#22509) - Fix incorrect narrowing for
if type(x) == y(#22531) - Fix stack overflow with recursive type aliases containing tuple types (#22543)
functools.total_ordering: ensure the signatures of generated methods reflect the signature of the user-provided method (#22496)- Support
dataclass_transformas a function call (#22378) - Use the top materialization of classes for
if type(x) is ynarrowing. For example,if type(x) is tuplewill cause the type ofxto be intersected withtuple[object, ...]rather thantuple[Unknown, ...]. (#22553) - Avoid emitting Liskov violations with respect to a grandparent class if such violations could not be fixed without introducing Liskov violations with respect to a parent class (#22484)
- Fix interaction between classmethod, contextmanager, and Self (#22407)
- Check contravariant type variable bounds contravariantly in specialization inference (#22488)
- Fix false positive for bounded type parameters with NewType (#22542)
Core type checking
- Add support for dynamic
type()classes (#22291, #22499, #22537, #22480) - Add support for functional
namedtuplecreation (#22327, #22573, #22575, #22574) - Add a diagnostic for non-decorator uses of
final(#22555) - Add diagnostic to catch generic enums (#22482)
- Add diagnostics for
__init_subclass__argument mismatch (#22185) - Add diagnostics to validate
TypeIsandTypeGuarddefinitions (#22300) - Apply type narrowing to walrus targets (#22369)
- Detect invalid
@total_orderingapplications in non-decorator contexts (#22486) - Fix
@Todotype for starred expressions (#22503) - Improve disambiguation of types in diagnostics (#22547)
- Include type parameters in the display for generic
Callabletypes (#22435) - Infer
type[Unknown]for calls totype()when overload evaluation is ambiguous (#22569) - Support assignment to unions of
TypedDicts (#22294) - Use the key and value parameter types as type context for
__setitem__dunder calls (#22148) - Narrow the right-hand side of
==,!=,isandis notconditions when the left-hand side is not narrowable (#22511)
LSP server
- Fix
__file__type in completions to showstrinstead ofstr | Nonewhen the inferred type isstr(#22510) - Improve rendering of ReST directives in docstrings (#22512)
Contributors
0.0.11
Released on 2026-01-09.
Bug fixes
- Fix
super()with TypeVar-annotatedselfandclsparameter (#22208) - Only consider fully static pivots when deriving transitive constraints (#22444)
LSP server
- Don't show diagnostics for excluded files (#22455)
- Fix goto definition for relative imports in third-party files (#22457)
- Improve completion ranking based on origin and exact match (#22460)
- Rank top-level module symbols above most other symbols (#22465)
Configuration
- Enable
unused-ignore-commentby default (#22474)
Performance
- Improve
UnionBuilderperformance by changingType::is_subtype_ofcalls toType::is_redundant_with(#22337) - Optimize union building for unions with many enum-literal members (#22363)-
Other changes
Contributors
0.0.10
Released on 2026-01-07.
Bug fixes
- Fix stack overflow due to too small stack size (#22433)
- Fix stale semantic tokens after opening the same document with new content (#22414)
- Fix handling of
ParamSpecin overloaded functions (#22416) - Fix comparisons and arithmetic with
NewTypes offloat(#22105) - Fix several issues with unannotated function return types (#22425)
- Fix handling of subclasses in Callables (#22411)
LSP server
- Add support for explicit markdown code fences in docstring rendering (#22373, #22408)
- Offer completions for
Twhen a value has typeUnknown | T(#22436) - Sort keyword argument completions higher (#22297)
Core type checking
- Add support for
@total_ordering(#22181, #22183) - Better simplification of intersections of tuples (#22094)
- Support comparisons between variable-length tuples (#21824)
- Emit diagnostics for method definitions and other invalid statements in
TypedDictclass bodies (#22351) - Improve type-narrowing in calls to
len()(#22330)
CLI
- Add
--add-ignoreCLI option (#21696)
Configuration
include = ["myscript"]will now checkmyscripteven though it doesn't have a Python extension (#22243)
Performance
Documentation
- Link to
Callable__name__FAQ directly fromunresolved-attributediagnostic (#22437)
Contributors
- @dhruvmanila
- @charliermarsh
- @oconnor663
- @BurntSushi
- @RasmusNygren
- @carljm
- @Gankra
- @MichaReiser
- @AlexWaygood
0.0.9
Released on 2026-01-05.
Bug fixes
- Emit a diagnostic if a class decorator is not a callable accepting a type (#22375)
- Fix exhaustiveness inference for unions that include enums (#22290)
Core type checking
- Support
typing.TypeGuard(#20974) - Treat
__setattr__as fallback-only (#22014) - Don't expand type aliases via type mappings unless necessary. This means that the displayed signature of a bound methods will no longer eagerly expand type aliases into their aliased types (#22241)
- Narrow
TypedDictunions withnot in(#22349) - Don't including
propertyin subclasses properties (#22088) - Narrow tagged unions of
TypedDicts inmatchstatements (#22299) - Teach bidirectional inference about subtyping. This allows
xto be inferred aslist[int]forx: Iterable[int] = [42](#21930) - Support narrowing for tagged unions of tuples where one element of the tuple is a
Literaltype (#22303)
LSP server
- Add autocomplete suggestions for keyword arguments in
classstatements (#22110) - Avoid showing misleading inlay hint for unpacked tuple arguments (#22286)
Other changes
- Sync vendored typeshed stubs (#22302, #22321, #22324). Typeshed diff
Contributors
- @RasmusNygren
- @ericmarkmartin
- @AlexWaygood
- @ibraheemdev
- @charliermarsh
- @felixscherz
- @MatthewMckee4
- @mtshiba
0.0.8
Released on 2025-12-29.
Breaking changes
- Rename
non-subscriptablerule tonot-subscriptable(#22193)
Core type checking
- Promote float and complex when promoting literals (#22215)
- Callable type of a type object is not function-like (#22226)
- Fix and simplify callable type materializations (#22213)
LSP server
- Add option to disable syntax errors (#22217)
- Fix completion in decorators with missing declaration (#22177)
- Better completions context detection when typing in decorator positions (#22224)
- Limit the returned completions to reduce lag (#22240)
Diagnostics
- Improve wording of
unsupported-basesub-diagnostic (#22194) - Preserve the invalid assignment diagnostic message when implicitly shadowing a definition (#22219)
Other changes
- Update docker image to use alpine 3.23 and trixie (#2217)
Contributors
0.0.7
Released on 2025-12-24.
Bug fixes
- Fix classification of modules in
import x as yfor semantic syntax highlighting (#22175) - Fix module resolution on network drives (#22173)
- Render the entire diagnostic message in all output formats (#22164)
Other changes
- Add a dedicated diagnostic for TypedDict deletions (#22123)
- Check
__delitem__instead of__getitem__fordel x[k](#22121) - Fix
@staticmethodcombined with other decorators incorrectly bindingself(#22128) - Fix implementation of
Top[Callable[..., object]](#22145) - Improve diagnostic when
callableis used in a type expression instead ofcollections.abc.Callableortyping.Callable(#22180) - Improve diagnostic when a user tries to access a function attribute on a
Callabletype (#22182) - Include the specialization of a generic
TypedDictas part of its display (#22174) - Support tuple narrowing based on member checks (#22167)
- Synthesize
__delitem__for TypedDict to allow deleting non-required keys (#22122)
Contributors
0.0.6
Released on 2025-12-23.
Bug fixes
- FIx panic from unexpanded type aliases in implicit tuple aliases (#22015)
- Support
type[T]whereTis a type alias to a union of types (#22115) - Support
==narrowing for tuples in unions with disjoint types (#22129) - Respect debug text interpolation in f-strings (#22151)
- Fix panic from unstable union-type ordering in fixed-point iteration (#22070)
LSP server
- Add
ty.configurationandty.configurationFileoptions (#22053) - Add
diagnosticMode: offto disable diagnostics while retaining Go To Definition, etc. (#22073) - Set flag to avoid
type[T@f]being inserted when you double-click on the inlay (#22139) - Use Markdown for completions documentation if the LSP client supports it (#21752)
CLI
- Abort printing diagnostics when pressing
Ctrl+C(#22083)
Configuration
- Add
respect-type-ignore-commentsconfiguration option (#22137) - Support custom builtins via
__builtins__.pyi(#22021)
Other changes
- Bind self with instance in
__get__(#22155) - Support type inference between protocol instances (#22120)
- Synthesize a precise
_fieldsattribute for NamedTuples (#22163) - Synthesize a precise
_replacemethod for NamedTuples (#22153) - Narrow "tagged unions" of
TypedDicts (#22104)
Contributors
0.0.5
Released on 2025-12-20.
Bug fixes
- Fix debug-mode server panic when a user typed a class definition by ensuring class arguments are visited in source order for semantic tokens (#22063)
LSP server
- Classify docstrings in semantic tokens during syntax highlighting (#22031)
CLI
Other changes
- Add support for
dict(...)calls inTypedDictcontexts (#22113) - Speedup bidirectional type-checking involving large unions by avoiding narrowing on non-generic calls (#22102)
- Simplify inferred types by avoiding storing multi-inference attempts (#22062, #22103)
- Improve union builder performance (#22048)
- Only prefer declared types in non-covariant positions (#22068)
- Respect intersections in iterations (#21965)
- Sync vendored typeshed stubs (#22091). Typeshed diff
- Understand that the type of
Xon an enum class will beintifXis defined usingenum.nonmemberin the class definition (#22025)
Contributors
0.0.4
Released on 2025-12-18.
LSP server
- Add support for attribute docstrings (#22036)
- Correctly encode multiline tokens for clients not supporting multiline tokens (#22033)
- Autocompletions: Don't suggest keyword statements when only expressions are valid (#22002)
- Fix goto-declaration on the right-hand side of
from module import submodule(#22042) - Fix some configuration panics in the LSP (#22040)
- Gracefully handle client requests that can't be deserialized (#22051)
Other changes
- Improve performance for large match statements (#22045)
- Disable possibly-missing-imports by default (#22041)
- Implement disjointness for TypedDicts, significantly speeding up checking of code that uses pydantic (#22044)
Contributors
0.0.3
Released on 2025-12-17.
LSP server
- Improve rendering of signatures in hovers (#22007)
Core type checking
- Apply narrowing to
lencalls based on argument size (#22026) - Don't add identical lower/upper bounds multiple times when inferring specializations (#22030)
- Improve
unsupported-baseandinvalid-super-argumentdiagnostics to avoid extremely long lines when encountering verbose types (#22022) - Improve disambiguation of types in many cases (#22019)
- Respect deferred values in keyword arguments etc. for
.pyifiles (#22029) - Handle field specifier functions that accept
**kwargsand recognize metaclass-based transformers as instances ofDataclassInstance(#22018)
Contributors
0.0.2
Released on 2025-12-16.
This is the first Beta release of ty, which we're now ready to recommend to motivated users for production use. See our blog post for more details.
LSP server
- Improve display of completions to show actual insertion text (#21988)
- Improve highlighting of special type syntax in hovers (#22005)
- Improve syntax highlighting of constants (#22006)
Core type checking
- Infer precise types for
isinstance(…)calls involving type variables (#21999) - Infer
TypeVarspecializations forCallabletypes (#21551) - Propagate
classmethod-ness through decorators returningCallables (#21958) - Improve rendering of default values for function args (#22010)
- Don't use implicit superclass annotation when converting a class constructor into a
Callable(#22011)
Other
- Type checking performance improvement (#22000)
Contributors
0.0.1-alpha.35
Released on 2025-12-16.
Bug fixes
- Fix panic for stringified comprehensions and boolean expressions in type expression (#21967)
- Avoid stack overflow when determining inferable typevars (#21971)
- Fix false-positive
invalid-method-overridediagnostic on method that usesCallablewith aParamSpec(#21934) - Disallow explicit specialization of type variables themselves (#21938)
- Fix hover type on named expression ("walrus expression") targets (#21952)
LSP server
- Add "qualify ..." code fix for undefined references (#21968)
- Add new goto-definition targets on inlay hints (#21950)
- Remove invalid statement-keyword completions in
for-statements (#21979)
Core type checking
- Add support for
__qualname__and other implicit class attributes (#21966) - Emit a diagnostic when a frozen dataclass inherits a non-frozen dataclass and vice versa (#21962)
- Emit a diagnostic when a type variable with a default is followed by one without a default (#21787)
- Improve diagnostics for unsupported binary operations and unsupported augmented assignments (#21947)
- Improve check enforcing that an overloaded function must have an implementation (#21978)
- Use unqualified names for displays of
TypeAliasTypes and unboundParamSpecs/TypeVars (#21960)
Performance
- Speed up ty on Linux by using jemalloc (#21975)
Contributors
- @11happy
- @dhruvmanila
- @AlexWaygood
- @mtshiba
- @MichaReiser
- @Gankra
- @silamon
- @dcreager
- @charliermarsh
- @RasmusNygren
- @carljm
0.0.1-alpha.34
Released on 2025-12-12.
Bug fixes
- Improve solving of a type variable with an upper bound when that type variable appears as one element in a union type (#21893)
- Accurately emulate runtime semantics for
kw_only=Truedataclasses such that only fields declared in the immediate class body are understood as being keyword-only (#21820) - Avoid inferring types for invalid binary expressions in string annotations (#21911)
- Fix logic used to determine whether two
@finalinstance types are disjoint (#21769) - Fix logic used to determine whether two
@finaltype[]types are disjoint (#21770) - Fix false-positive diagnostics that could arise when analysing cyclic types (#21910), (#21909)
LSP server
- Fix outdated version in publish diagnostics after
didChange(#21943) - Fix workspace symbols to return members too (#21926)
- Adjust scope completions to use all reachable symbols (#21872)
- Classify
clsas class parameter for semantic highlighting (#21944) - Don't show on-hover tooltips for expressions with no inferred type (#21924)
- Ignore
__all__for document and workspace symbol requests (#21928) - Recognize
__all__ += submodule.__all__in auto-import (#21918) - Stabilize rename (#21940)
Other changes
- Support checking files without extensions (#21867)
- Improve performance and semantics by deferring inference of all parameter and return-type annotations (#21906)
- Improve resolution of absolute imports in tests (#21817)
- Infer the implicit type of the
clsparameter in@classmethodmethod bodies (#21685) - Support the implicit type of the
clsparameter in signatures of@classmethodmethods (#21771) - Uniformly use "not supported" in diagnostics (#21916)
- Implement the equivalence relation for
TypedDicts (#21784) - Ensure that the type of the class object
Cis always considered assignable totype[C[Unknown]]ifCis a generic class (#21883) - Improve bad specialization results and error messages (#21840)
- Support
NewTypes offloatandcomplex(#21886)
Contributors
- @charliermarsh
- @oconnor663
- @MichaReiser
- @BurntSushi
- @lucach
- @ibraheemdev
- @mtshiba
- @dcreager
- @sharkdp
- @carljm
- @Gankra
0.0.1-alpha.33
Released on 2025-12-09.
Bug fixes
- Fix assignability problem between
tuple[Any, ...]andtuple[int, *tuple[int, ...]](#21803) - Avoid diagnostic when
typing_extensions.ParamSpecuses adefaultparameter (#21839) - Avoid crash for invalid
Annotatedsubscript (#21837) - Avoid crash for invalid
Finalsubscript (#21828) - Fix overload filtering to prefer more precise match when
*args: Anyis involved (#21859) - Handle various invalid explicit specializations for
ParamSpec(#21821) - Fix stack overflow with recursive generic protocols (depth limit) (#21858)
LSP server
- Add autocomplete suggestions for parameters in function calls (#21796)
- Don't create a related diagnostic for the primary annotation of sub-diagnostics (#21845)
- Stabilize auto-import (#21851)
- Suppress inlay hints when assigning a trivial initializer call (#21848)
- Use concise message for LSP clients not supporting related diagnostic information (#21850)
- Fix add-import action for
reveal_type(#21668)
Core type checking
- Infer type variables within generic unions (#21862)
- Type inference for
@asynccontextmanager(#21876) - Make Python-version subdiagnostics less verbose (#21849)
Contributors
- @BurntSushi
- @dhruvmanila
- @AlexWaygood
- @carljm
- @Gankra
- @charliermarsh
- @RasmusNygren
- @sharkdp
- @MichaReiser
0.0.1-alpha.32
Released on 2025-12-05.
LSP server
- Provide auto-import completion suggestions for modules in more situations (#21799)
- Always register the ty server as a rename provider if the LSP client doesn't support dynamic registration (#21789)
- Support auto-import of re-exported symbols in completion suggestions (#21779)
- Support renaming import aliases (#21792)
Core type checking
- Support
ParamSpec(#21445) - Improve the accuracy of the inferred
Callablesupertype of generic classes (#21798) - Increase the limit on the number of elements in a non-recursively defined literal union (#21683)
- Fix panics on mutually recursive generic protocols by normalizing the bounds/constraints of cyclic type variables (#21800)
Other changes
- Minor improvements to
assert_typediagnostics (#21811) - Fix a panic in recursive + generic type aliases (#21718)
- Fix a panic when instantiating a type variable with invalid constraints (#21663)
Contributors
0.0.1-alpha.31
Released on 2025-12-04.
Bug fixes
- Fix incorrect
possibly-missing-attributediagnostics forasyncioimports on Python 3.14 (#21776) - Fix panic for recursive type aliases (#21778)
Core type checking
- Try ancestor
pyproject.tomldirectories as search-paths if module resolution fails (#21745) - Sync vendored typeshed stubs (#21715) Typeshed diff
LSP server
- Don't send publish diagnostics for clients supporting pull diagnostics (#21772)
- Fix crash when hovering over string annotations with unknown symbols (#21782)
Diagnostics
- Add subdiagnostic hint if the user wrote
X = Anyrather thanX: Any(#21777) - Improve the display of various special-form types (#21775)
Contributors
0.0.1-alpha.30
Released on 2025-12-03.
Bug fixes
- Fix exhaustiveness checking for
matchstatements over unions of generic instance types (#21726) - Don't introduce invalid syntax when autofixing
override-of-final-method(#21699) - Suppress false positives when
dataclasses.dataclass(...)(cls)is called imperatively (#21729) - Fix false positives for
class F(Generic[*Ts]): ...(#21723) - Don't confuse multiple occurrences of
typing.Selfwhen binding bound methods (#21754) - Fix subtyping between
type[T]and a union type, whereTis a type variable in scope (#21740) - Fix subtyping between
type[T]andU, whereTis a type variable in scope andUis a type variable not in scope (#21766) - Fix false positives for
type[tuple[...]](#21652)
Memory usage improvements
- Significantly reduce memory usage (especially when ty is used as an LSP server) by enabling least-recently-used (LRU) cache eviction for module ASTs (#21749)
LSP server
- Add code action to ignore diagnostic on the current line (#21595)
- Exclude
typing_extensionsfrom autocomplete suggestions unless it's really available (#21731) - Fix auto-import code action to handle pre-existing imports (#21733)
- Fix "find all references" for types defined in stub files (#21732)
- Fix "find all references" for symbols defined via aliased imports (#21736)
Improvements to handling of type aliases
- Default-specialize generic type aliases when they appear unspecialized in type expressions (#21765)
- Infer a type alias as being a generic type alias if it includes a type variable in its definition, even in cases where the value subscripted with the type variable is inferred as having a dynamic type such as
AnyorUnknown(#21730)
New NamedTuple diagnostics
- Detect
NamedTupleclasses that have field names starting with underscores, which is banned at runtime (#21697) - Add a diagnostic detecting overrides of prohibited
NamedTupleattributes (#21717) - Detect illegal uses of
super()in methods ofNamedTupleclasses (#21700)
Improvements to existing diagnostics
- Improve diagnostics for unsupported comparison operations (#21737)
- For
invalid-type-argumentsdiagnostics, show the user where the type variable was defined (#21727) - Extend
invalid-explicit-overrideto also cover properties decorated with@overridethat do not override anything (#21756) - Improve
@override,@finaland Liskov checks in cases where there are multiple reachable definitions (#21767)
Contributors
- @MichaReiser
- @charliermarsh
- @dcreager
- @carljm
- @AlexWaygood
- @BurntSushi
- @ibraheemdev
- @woodruffw
- @sharkdp
0.0.1-alpha.29
Released on 2025-11-28.
Bug Fix
- Fix multiple panics due to recursive type definitions (#20566)
Type inference
- Support
type[T]whereTis a type variable (#21650) - More precise inference for a failed specialization of a generic type (#21651)
- Detect invalid overrides of methods that are marked as
typing.final(#21646) - Fix subtyping of
type[Any]/type[T]and protocols (#21678) - Added generics support for implicit and explicit (
typing.TypeAlias) type aliases (#21553)
LSP server
- Add
import ...code action for unresolved references (#21629) - Include all members on
typein autocompletion suggestions fortype[]types (#21670) - Mark comprehension targets as definitions in semantic highlighting (#21636)
- Add IDE autofixes for two "Did you mean...?" suggestions (#21667)
- Prettier rendering of
code:: langin docstrings (#21665) - Support go-to for patterns and typevars (#21671)
Diagnostics
- Add subdiagnostic hint if a variable with type
Neveris used in a type expression (#21660) - Improve diagnostic messages for invalid type arguments during explicit specialization (#21635)
Contributors
0.0.1-alpha.28
Released on 2025-11-25.
Bug fixes
- Fix panic for unclosed string literal in type annotation position (#21592)
Type inference
- Check method definitions on subclasses for Liskov violations (#21436)
- Eagerly evaluate
types.UnionTypeelements as type expressions (#21531) - Extend Liskov checks to also cover classmethods and staticmethods (#21598)
- Implement
typing.override(#21627) - Narrow type context during literal promotion in generic class constructors (#21574)
- Retain the function-like-ness of
Callabletypes when bindingself(#21614) - Substitute for
typing.Selfwhen checking protocol members (#21569) - Implement
TypedDictstructural assignment (#21467) - Make implicit submodule imports re-exported (#21573)
- Support PEP 613
typing.TypeAliastype aliases (#21394) - Support generic aliases in
type[...], liketype[C[int]](#21552) - Tighten up handling of subscripts in type expressions (#21503)
LSP server
- Improve go-to-definition and add go-to-definition for inlay hints (#21545, #21546, #21544, #21616, #21548)
- Implement go-to-type for inlay type hints (#21533)
- Add "remove unused ignore comment" code action (#21582)
- Don't suggest completions that aren't subclasses of
BaseExceptionafterraise(#21571) - Implement double click to insert inlay hint (#21600)
- Fix edge cases for autocomplete suppressions in variable bindings (#21576)
- Implement docstring rendering to markdown (#21550)
- Support string annotations (#21577)
- Improve import detection for completions and support
from ...<CURSOR>completions (#21547) - Improve handling of hover/goto on imports (#21572)
- Don't allow edits of some more invalid syntax types in inlay hints (#21621)
- Resolve applicable overloads for hover on an overloaded function call (#21417)
- Consistently add the
DEFINITIONmodifier when computing semantic tokens (#21521) - Suppress autocomplete suggestions during variable binding (#21549)
CLI
- Exit with code
2if there's any IO error (#21508)
Diagnostics
- Add hint about resolved Python version when a user attempts to import a member added on a newer version (#21615)
- Attach subdiagnostics to
unresolved-importerrors for relative imports as well as absolute imports (#21554) - Avoid expression re-inference for diagnostics (#21267)
- Improve message rendering of unused suppression diagnostic (#21580)
- Improve concise diagnostics for invalid exceptions when a user catches a tuple of objects (#21578)
- Improve diagnostics when
NotImplementedis called (#21523) - Improve diagnostics when a submodule is not available as an attribute on a module-literal type (#21561)
- Improve several "Did you mean?" suggestions (#21597)
- Switch the error code from
unresolved-attributetopossibly-missing-attributefor submodules that may not be available (#21618)
Other
- Improve debug messages when imports fail (#21555)
Contributors
- @Gankra
- @MatthewMckee4
- @AlexWaygood
- @RasmusNygren
- @dcreager
- @BurntSushi
- @carljm
- @MichaReiser
- @sharkdp
- @oconnor663
- @lucach
- @ibraheemdev
0.0.1-alpha.27
Released on 2025-11-18.
Bug fixes
- Fix panic for cyclic star imports (#21428)
- Fix crashes when using a homebrew Python install (#21405)
- Fix incorrect inference of
enum.auto()for enums with non-intmixins, and imprecise inference ofenum.auto()for single-member enums (#20541) - Fix global symbol lookup from eagerly executed scopes such as comprehensions and classes (#21317)
- Fix false positive for instance attributes that are declared as
Finalin the class body but have their value assigned in the class's__init__method (#21158) - Use the return type of
__get__for descriptor lookups even when__get__is called with incorrect arguments (#21424) - Consider parameters being declared
globala syntax error (#21312)
Type inference
- Support
typing.NewType(#21157) - Support
Callablein implicit type aliases (#21496) - Support
typing.Unionin implicit type aliases (#21363) - Precise inference for generator expressions (#21437)
- Support storing attributes in comprehension scopes (#20856)
- Support
isinstance()andissubclass()narrowing when the second argument is atyping.pystdlib alias (#21391) - Support
type[…]andType[…]in implicit type aliases (#21421) - Support attribute-expression
TYPE_CHECKINGconditionals (#21449) - Support class-arguments for dataclass transformers (#21457)
- Support legacy
typingspecial forms in implicit type aliases (#21433) - Support stringified annotations in value-position
Annotatedinstances (#21447) - Support all parameters of dataclass transforms (#21474)
- Support
__hash__semantics andunsafe_hashfor dataclasses (#21470) - Improve handling of version-specific features of dataclasses (#21453)
- Correctly infer the specialization of a non-invariant PEP-695 generic class that has an annotated
selfparameter in its__init__method (#21325) - Improve use of type context when inferring the result of a generic constructor call (#20933, #21442)
- Improve use of type context when inferring the result of a generic call expression (#21210)
- Improve heuristics used to decide when it is appropriate to "promote" a
Literaltype such asLiteral[42]to its instance supertype (in this case,int) when solving type variables (#21439) - Improve use of type context to infer conditional expressions (#21443)
- Make
__getattr__available forModuleTypeinstances (#21450) - Introduce implicit local variables for
fromimports of submodules in__init__.py(i)(#21173) - Make implicit submodule locals only occur in global scope of an
__init__.py(i)(#21370) - Make implicit submodule locals also occur for absolute
fromimports in__init__.py(i)files (#21372) - Consider
from thispackage import ya re-export ofyin__init__.pyi(#21387) - Allow PEP-604 unions in stubs and
TYPE_CHECKINGblocks prior to 3.10 (#21379) - Ensure annotation/type expressions in stub files are always deferred (#21401, #21456)
- Silence false-positive diagnostics when using
typing.Dictortyping.Callableas the second argument toisinstance()(#21386) - Sync vendored typeshed stubs (#21466). Typeshed diff
LSP server
- Support for notebooks in VS Code (#21175)
- Fix goto-definition for
floatandcomplexin type annotation positions (#21388) - Support goto-definition on call argument inlay hints (#20349)
- Add more keywords to scope-based completions (#21383)
- Add synthetic members to completions on dataclasses (#21446)
- Only suggest the
importkeyword in autocompletions forfrom <name> <CURSOR>statements (#21291) - Suppress completion suggestions following
astokens (#21460) - Suppress invalid suggestions in
importstatements (#21484) - Suppress redundant inlay hints for function args (#21365)
- Suppress some trivial expression inlay hints (#21367)
- Suppress inlay hints for
+1and-1(#21368) - Improve semantic token classification for names (#21399)
- Classify parameter declarations as definitions when computing semantic tokens (#21420)
Diagnostics
- Better invalid-assignment diagnostics (#21476)
- Better concise diagnostic messages (#21498)
- Improve subscript assignment diagnostics (#21411, #21452)
- Improve diagnostic range for
non-subscriptablediagnostics (#21461) - Improve diagnostics for invalid exceptions (#21475)
- Add hyperlinks to rule codes in CLI (#21502)
Performance improvements
- Cache computation of dataclass/NamedTuple/TypedDict fields (#21512)
- Faster subscript assignment checks for (unions of)
TypedDicts (#21378) - Reduce memory allocations for string-literal types (#21497)
Contributors
- @thejchap
- @mtshiba
- @ibraheemdev
- @Gankra
- @charliecloudberry
- @lucach
- @AlexWaygood
- @MichaReiser
- @Glyphack
- @dcreager
- @saada
- @11happy
- @oconnor663
- @MatthewMckee4
- @BurntSushi
- @RasmusNygren
- @sharkdp
0.0.1-alpha.26
Released on 2025-11-10.
Bug fixes
- Language server: For semantic tokens, fix range filtering for tokens starting at the end of the requested range (#21193)
- Fix panic due to simplifying
Divergenttypes out of intersections types (#21253) - Fix merging of
--excludeCLI flag andsrc.excludeconfig-file setting (#21341)
Type inference
- Infer type of
selffor decorated methods and properties (#21123) - Add support for properties that return
Self(#21335) - Understand legacy and PEP 695
ParamSpec(#21139) - Type inference for comprehensions (#20962)
- Reachability and narrowing for enum methods (#21130)
- Implicit type aliases: Support for PEP 604 unions,
Literals,Optional, andAnnotated(#21195, #21296, #21321) dictis not assignable toTypedDict(#21238)- Allow values of type
Nonein type expressions (#21263) - Add narrowing for
isinstance()andissubclass()checks that use PEP-604 unions (#21334) - Do not promote
Literaltypes when solving type variables in contravariant positions (#21164, https://github.com/astral-sh/ruff/pull/21171)) - Fix lookup of
__new__methods on instances (#21147) - Fix narrowing of generic classes in class patterns for
matchstatements (#21150) - Improve understanding of disjointness for
@finalclasses (#21167) - Fix the inferred signature of the synthesized
__init__method of a non-dataclass inheriting from a generic dataclass (#21159) - Improve exhaustiveness analysis for type variables with bounds or constraints (#21172)
- Prefer exact matches when solving constrained type variables (#21165)
- Simplify unions containing multiple type variables during inference (#21275)
- Use the declared attribute type when inferring union attribute assignments (#21170)
- Sync vendored typeshed stubs (#21178). Typeshed diff
- Use declared attribute types as type context when solving type variables (#21143)
- Don't union in the inferred type of a parameter's default value when inferring the type of an annotated parameter (#21208)
- Support subscripting typing.Literal with a type alias (#21207)
LSP server
- Don't provide completions when in a class or function definition (#21146)
- Favor symbols defined in the current file over imported symbols (#21194) and builtin symbols (#21285)
Diagnostics
- Add diagnostics for
isinstance()andissubclass()calls that use invalid PEP-604 unions for their second argument (#21343) - Don't assume in diagnostic messages that a
TypedDictkey error is about subscript access (#21166)
Other changes
- Consistently wrap tokens in parser diagnostics in
backticksinstead of 'quotes' (#21163) - Discover the
site-packagesdirectory from the environment that ty is installed in (#21286), improving the ergonomics ofuvx ty check - Support implicit imports of submodules in
__init__.pyi(#20855) - Use "cannot" consistently over "can not" in diagnostics (#21255)
- Resolve
from foo import barto thefoo.barsubmodule rather than using the__getattr__function infoo/__init__.py(in situations where they both exist)(#21260)
Contributors
- @MatthewMckee4
- @dhruvmanila
- @sharkdp
- @Gankra
- @saada
- @zanieb
- @MichaReiser
- @ibraheemdev
- @AlexWaygood
- @lucach
- @mtshiba
- @carljm
0.0.1-alpha.25
Released on 2025-10-29.
Bug fixes
- Fix bug where ty would think all types had an
__mro__attribute (#20995) - Fix rare panic with highly cyclic
TypeVardefinitions (#21059) - Fix infinite recursion with generic type aliases (#20969)
- Add missing newline before first diagnostic in CLI output (#21058)
- Make the ty server's auto-import feature skip symbols in the current module (#21100)
- Don't provide goto-definition for definitions which are not reexported in builtins (#21127)
- Avoid duplicate diagnostics during multi-inference of standalone expressions (#21056)
Type inference and diagnostics
- Use constructor parameter types as context to inform solving type variables (#21054)
- Consider
__len__when determining the truthiness of an instance of a tuple class or a@finalclass (#21049) - Delegate truthiness inference of an enum
Literaltype to its enum-instance supertype (#21060) - Improve
invalid-argument-typediagnostics where a union type was provided (#21044)
LSP server
- Suggest
type_check_onlyitems last in completions (#20910) - Render
import <...>in completions when "label details" isn't supported (#21109) - Update workspace diagnostic progress every 50ms (#21019)
CLI
- Add
--no-progressoption to suppress the rendering of a progress bar (#21063)
Contributors
0.0.1-alpha.24
Released on 2025-10-23.
Breaking changes
- Rename
unknown-rulelint toignore-comment-unknown-rule(#20948)
Type inference and diagnostics
- Infer a type of
Selffor unannotatedselfparameters in methods (#20922) - Prefer the declared type over the inferred type for invariant collection literals (#20927)
- Use declared variable types as bidirectional type context for solving type variables (#20796)
- Support
dataclass_transformfor base class models (#20783) - Support dataclass-transform
field_specifiers(#20888) dataclass_transformsupport for fields with analias(#20961)- Add support for legacy namespace packages (#20897)
- Add suggestion to "unknown rule" diagnostics (#20948)
- Improve error messages for "unresolved attribute" diagnostics (#20963)
- Avoid unnecessarily widening generic specializations (#20875)
- Truncate
Literaltype display in some situations (#20928)
Bug fixes
- Fix panic involving cyclic
TypeVardefault (#20967) - Fix panic involving ever-growing default types (#20991)
- Fix panic involving infinitely expanding implicit attribute types (#20988)
- Fix autocomplete suggestions when the cursor is at the end of a file (#20993)
- Fix inconsistent highlighting of self (#20986)
- Fix out-of-order semantic token for function with regular argument after kwargs (#21013)
- Fix panic on recursive class definitions in a stub that use constrained type variables (#20955)
- Fix panic when attempting to validate the members of a protocol that inherits from a protocol in another module (#20956)
- Fix rare hang relating to multithreading (#21038)
- Fix non-deterministic overload function inference (#20966)
- Fix auto-import edits made by autocompletions for files with an existing
from __future__import (#20987)
LSP server
- Support goto-definition for binary and unary operators (#21001)
- Support goto-definition on vendored typeshed stubs (#21020)
- Provide completions on
TypeVars (#20943) - Display variance when hovering over type variables (#20900)
- Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics. (#20989)
Other changes
- Report
continueandbreakstatements outside loops as syntax errors (#20944)
Contributors
0.0.1-alpha.23
Released on 2025-10-16.
Bug fixes
- Fix handling of dataclass
field()s without default values (#20914) - Fix false-positive diagnostics on
super()calls (#20814, #20843) - Fix
matchpattern value narrowing to use equality semantics (#20882) - Fix "missing root" panic when handling completion requests (#20917)
- Fix overwriting of declared base class attributes through undeclared subclass members (#20764)
- Fix runaway execution time for mutually referential instance attributes (#20645)
CLI
- For
unresolved-importdiagnostics, limit the shown import paths to at most five, unless in verbose mode (#20912) - Write files that are slow to type check to log output (#20836)
- Remove "pre-release software" warning (#20817)
LSP server
- Improve ranking of autocomplete suggestions (#20807)
Type inference and diagnostics
- Use return type annotations as context for bidirectional type inference (#20528)
- Use bidirectional type context for
TypedDictconstruction (#20806) - Add support for unpacking of heterogeneous tuples in unions (#20377)
- Add a new diagnostic for generic classes that reference typevars from an enclosing scope (#20822)
- Add hint when accessing standard library module attributes that are not available on the configured Python version (#20909)
- Treat functions, methods, and dynamic types as function-like
Callables (#20842) - Treat
Callables as bound-method descriptors in special cases (#20802) - Treat
Callabledunder members as bound method descriptors (#20860) - Sync vendored typeshed stubs (#20876). Typeshed diff
Performance improvements
- Improve performance by caching union simplification type relations (#20477)
Contributors
- @mtshiba
- @AlexWaygood
- @ericmarkmartin
- @carljm
- @ntBre
- @sharkdp
- @BurntSushi
- @Gankra
- @MichaReiser
- @dcreager
0.0.1-alpha.22
Released on 2025-10-10.
Bug fixes
- Enforce that
typing_extensionsmust come from a stdlib search path. This fixes a panic that could occur with a confusing backtrace if theextra-pathssetting was incorrectly used to point to a virtual environment (#20715) - Fix server panic when opening a project located at
/in the file system (#20684) - Fix panics when using
--output-format=gitlabin CI environments (#20550) - Fix stack overflows that could occur when attempting to determine if a recursive
NamedTupletype was disjoint from another type (#20538) - Fix panics in type inference when legacy TypeVars had bounds, constraints, or defaults that cyclically referred back to the TypeVar definition (directly or indirectly) (#20598)
- Fix situations where a panic during resolution of type-checker query cycles would manifest in a hang (#20577)
- When analyzing a .py file, do not error if there's also a .pyi for that module (#20461)
- Recognise that the runtime object
typing.Protocolis an instance of_ProtocolMeta(#20488) - Fix logic that attempted to determine whether a user had explicitly activated a Conda environment, which has implications for the search paths ty uses for module resolution (#20675)
- Fix false negatives when iterables with the wrong type are unpacked into a function with a
*argsvariadic parameter (#20511)
Support for Python 3.14
- Use 3.14 as the default version (#20725, #20759, #20760)
- Annotations are deferred by default for 3.14+ (#20799)
- Fix false positives when accessing
__annotate__(Py3.14+) or__warningregistry__as a module global (#20154)
Improvements to TypeVar solving and inference of generic types
- Improve solving of a type variable
Tif it appears in a union with non-TypeVars (T | None,T | str | None, etc.) (#20749) - More precise type inference for dictionary literals (#20523)
- When solving type variables, use type context to inform whether
Literaltypes should be promoted to instance types (#20776) - Use annotated parameters as type context when solving type variables (#20635)
- Correctly infer the return type of method calls when the method is annotated as returning
Self(#20517, #20754) - Use type context for inference of generic function calls (#20476)
- Use
C[T]instead ofC[Unknown]for the upper bound ofSelf(#20479)
Improvements to assignability, subtyping, and union simplification
- Fix overly strict assignability implementation for intersections with negated gradual elements (#20773)
- Ensure that
C[Any]is understood as a subtype ofC[object]ifCis a covariant generic class (#20592) - Ensure that
~Tis never considered to be assignable toTwhereTis a type variable (#20606) - Improve assignability/subtyping between two protocol types (#20368)
- Simplify
Any | (Any & T)toAny(#20593) - Optimise and generalise union/intersection simplification (#20602)
- Make protocol satisfiability checks more principled when a protocol has a method member that is generic over type variables scoped to the function (#20568)
- Fix subtyping of invariant generics specialized with
Any, ensuring that (for example)list[Any]is not considered a subtype oflist[Any](#20650)
Server
- Add LSP debug information command (#20379)
- Add support for inlay hints on attribute assignment (#20485)
Improvements to diagnostics
- Improve diagnostics when a positional-only parameter is passed using a keyword argument (#20495)
- Improve disambiguations of class names in diagnostics (#20603, #20756)
- Improve diagnostics for bad
@overloaddefinitions (#20745) - Truncate type display for long unions in some situations (#20730)
- Rename "possibly unbound" diagnostics to "possibly missing" (#20492)
Improvements to enum support
Improvements to ty's @overload implementation
- Support single-starred argument for overload call (#20223)
- Filter overloads using variadic parameters (#20547)
Other typing semantics and features
- Do not union the inferred type of a module-global symbol with
Unknownfor the symbol's type when accessed from external scopes (#20664) - Ensure that class objects are understood as callable even if they do not override
object.__new__orobject.__init__(#20521) - Add support for
**kwargs(#20430) - Ensure first-party module-resolution search paths always appear in a sensible order (#20629)
- Respect
dataclass_transformparameters for metaclass-based models (#20780) - Sync vendored typeshed stubs (#20658). Typeshed diff
- Bring ty's
TypeIsnarrowing behaviour closer to ty's narrowing behaviour forisinstance()checks. (#20591) dataclass_transform: Supportfrozen_defaultandkw_only_default(#20761)- Allow any string
Literaltype expression as a key when constructing aTypedDict(#20792) - Add
--venvas an alias to--pythonon the command line (#20718) - Add search paths listed in
PYTHONPATHto search paths used for ty's module resolution (#20441, #20490)
Contributors
- @thejchap
- @mtshiba
- @Danielkonge
- @dcreager
- @MatthewMckee4
- @Gankra
- @BurntSushi
- @carljm
- @dhruvmanila
- @sharkdp
- @mmlb
- @fgiacome
- @Guillaume-Fgt
- @AlexWaygood
- @Renkai
- @InvalidPathException
- @ibraheemdev
- @fatelei
- @github-actions
- @MichaReiser
- @ntBre
- @danparizher
0.0.1-alpha.21
Bug fixes
- Fix inference of constructor calls to generic classes that have explicitly annotated
selfparameters 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
NamedTuplemethods such as_make,_asdictand_replacein autocomplete suggestions (#20356)
Configuration
- Automatically add
python/toenvironment.rootif apython/folder exists in the root of a repository (#20263)
CLI
Typing semantics and features
- Add support for generic PEP-695 type aliases (#20219)
- Allow annotation expressions to be
ast::Attributenodes (#20413) - Allow protocols to participate in nominal subtyping as well as structural subtyping (#20314)
- Attribute access on top/bottom materializations (#20221)
- Bind
Selftype 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
objectfor 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
TypeIsinvariant 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 andTypeVarTuples (#20239) - Overload evaluation: retry parameter matching for argument type expansion (#20153)
- Simplify unions of enum literals and subtypes thereof (#20324)
- Support "legacy"
typing.Selfin combination with PEP-695 generic contexts (#20304) - Treat
Hashable, and similar protocols, equivalently toobjectfor subtyping/assignability (#20284) - Treat
__new__as a static method (#20212) TypedDict: Add support fortyping.ReadOnly(#20241)- Detect syntax errors stemming from
yield fromexpressions inside async functions (#20051) "foo".startswithis not an instance oftypes.MethodWrapperType(#20317)- Eliminate definitely-impossible types from union in equality narrowing (#20164)
- Infer more precise types for the
nameandvalueproperties on enum members (#20311) - Initial support for
slots=Truein 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
- @thejchap
- @AlexWaygood
- @mtshiba
- @JelleZijlstra
- @ibraheemdev
- @TaKO8Ki
- @Glyphack
- @ericmarkmartin
- @Renkai
- @sharkdp
- @11happy
- @BurntSushi
- @carljm
- @dhruvmanila
- @github-actions
- @ntBre
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_ONLYsentinel only to local fields (#19986) - Ignore field specifiers when not specified in
@dataclass_transform(#20002)
Server
- Add completion support for
importandfrom ... importstatements (#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
Xmust be callable in order to satisfy a member on a protocolP(#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[]andBottom[]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-assignmenterror code for invalid assignments toClassVars (#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
TypedDictfixes (#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
- @carljm
- @sharkdp
- @dylwil3
- @dcreager
- @MichaReiser
- @ericmarkmartin
- @Renkai
- @JelleZijlstra
- @BurntSushi
- @AlexWaygood
- @github-actions
- @PrettyWood
- @dhruvmanila
- @Glyphack
- @Gankra
- @MatthewMckee4
- @leandrobbraga
0.0.1-alpha.19
Bug fixes
- Fix false-positive diagnostics if a function parameter is annotated with
type[P]wherePis 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
ClassVarmembers 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
NamedTupleclasses (#19899) - Allow any instance of a
NamedTupleclass to be passed to a function parameter annotated withtyping.NamedTuple(#19915) - Detect
NamedTupleclasses where fields without default values illegally follow fields with default values (#19945). This causesTypeErrorto be raised at runtime. - Detect illegal multiple inheritance with
NamedTuple(#19943). This causesTypeErrorto be raised at runtime.
Other typing and semantics improvements
- Add support for stubs packages with
partialin theirpy.typedfiles (#19931) - Look for
site-packagesdirectories in<sys.prefix>/lib64/as well as<sys.prefix>/lib/on non-Windows systems (#19978). This change fixes a number ofunresolved-importfalse-positive diagnostics reported by Poetry users. - Add diagnostics for invalid
awaitexpressions (#19711) - Add
else-branch narrowing forif type(a) is AwhenAis@final(#19925) - Improve solving of typevars with defaults, and
typing.Self(#19786) - Support the
kw_onlyparameter fordataclasses.dataclass()anddataclasses.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.inlayHintsare disabled (#19963) - Speedup server tracing checks (#19965)
- Add caching to logic for inferring whether a class is a
NamedTuple, a dataclass or aTypedDict(#19912) - Speedup project file discovery (#19913)
Contributors
- @dcreager
- @MichaReiser
- @sharkdp
- @github-actions
- @mtshiba
- @theammir
- @AlexWaygood
- @thejchap
- @Gankra
- @MatthewMckee4
- @carljm
0.0.1-alpha.18
Bug fixes
- Fix goto definition on imports (#19834)
- Support non-generic recursive type aliases that use the
typestatement (#19805) - Handle cycles when finding implicit attributes (#19833)
Server
- Implement support for "rename" language server feature (#19551)
- Add
ty.experimental.renameserver setting (#19800) - Add
ty.inlayHints.variableTypesserver setting (#19780) - Add inlay hints for call arguments (configured by
ty.inlayHints.callArgumentNamesserver 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
NamedTupleinstances (#19560) - Disallow
typing.TypedDictin 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.dequeandcollections.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
TypedDictkeys (#19782) typing.Selfis 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
Contributors
- @AlexWaygood
- @Gankra
- @ntbre
- @MichaReiser
- @PrettyWood
- @dhruvmanila
- @carljm
- @dcreager
- @UnboundVariable
- @sharkdp
- @oconnor663
- @MatthewMckee4
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
GenericorProtocolbeing subscripted with aParamSpecorTypeVarTuple(#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
--watchmode (#19729) - Clear the terminal screen in
--watchmode (#19712) - Resolve file symlinks in src walk (#19674)
Typing semantics and features
- Support
async/await,async withandyield from(#19595) - Add support for
async forloops 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 oftuple[int, str](#19741) - Remove false positives when subscripting
GenericorProtocolwith aParamSpecorTypeVarTuple(#19749) - Remove special casing for string-literal-in-tuple
__contains__(#19642) - Remove special casing for tuple addition (#19636)
- Return
Option<TupleType>frominfer_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
Displayfor generictype[]types (#19667) - Remap Jupyter notebook cell indices in
ruff_db(#19698)
Documentation
- Add the
tybadge (#897)
Contributors
- @mtshiba
- @MichaReiser
- @sharkdp
- @github-actions
- @UnboundVariable
- @jorenham
- @silamon
- @AlexWaygood
- @thejchap
- @ngroman
- @leandrobbraga
- @dcreager
- @ntbre
- @MatthewMckee4
0.0.1-alpha.16
Bug fixes
- Fix server panics when hovering over invalid syntax in
Callableannotations (#19517) matchstatements: 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
matchstatements (#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.deprecatedandtyping_extensions.deprecated(#19376) - Do not consider a type
Tto satisfy a method member on a protocol unless the method is available on the meta-type ofT(#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
intorstr(#19510) - Detect illegal non-enum attribute accesses in
Literalannotations (#19477) - Disallow assignment to
Finalclass attributes (#19457) - Handle implicit instance attributes declared
Final(#19462) - Disallow
Finalin function parameter- and return-type annotations (#19480) - Disallow illegal uses of
ClassVar(#19483) - Make
del xforce a local resolution ofxin 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). Typeshed diff
Memory usage optimizations
Contributors
- @sharkdp
- @BurntSushi
- @oconnor663
- @Gankra
- @carljm
- @AlexWaygood
- @MichaReiser
- @dcreager
- @mtshiba
- @UnboundVariable
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
Callabletypes (#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
nonlocalstatements (#19112) - Support empty function bodies in
if TYPE_CHECKINGblocks (#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
TypedDicttypes (#19354) - Emit an error for
globaluses if there is no explicit definition in the global scope (#19344) - Sync vendored typeshed stubs (typeshed diff). Typeshed diff
CLI
- Add a
-q/--quietmode,-qqfor silent output mode (#19233)
Contributors
- @AlexWaygood
- @github-actions
- @dhruvmanila
- @sharkdp
- @renovate
- @MatthewMckee4
- @UnboundVariable
- @oconnor663
- @zanieb
- @MichaReiser
- @charliermarsh
- @Gankra
- @thejchap
- @BurntSushi
- @mdqst
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
typesmodule (#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 theselfargument of the__str__method, as theobjecttype overlaps withNone.
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,BuiltinConstantandTypeParameter. - Initial support for workspace diagnostics (#18939).
Enable this feature by setting the
ty.diagnosticModeconfiguration setting to"workspace". - Use Python syntax highlighting in on-hover content (#19082)
Typing semantics and features
- Understand that calls to functions returning
Never/NoReturnare terminal with respect to control flow (#18333) - Add subtyping between
type[]types andCallabletypes (#19026) - Support bare
ClassVarannotations (#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
Finalsymbols (#19142)
Contributors
- @iyakushev
- @MatthewMckee4
- @zanieb
- @sharkdp
- @UnboundVariable
- @abhijeetbodas2001
- @github-actions
- @dhruvmanila
- @AlexWaygood
- @carljm
- @CodeMan62
0.0.1-alpha.13
Bug fixes
- Fix stack overflows related to mutually recursive protocols (#19003)
- Don't add incorrect subdiagnostic for
unresolved-referenceinstaticmethods andclassmethods (#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
Neverinhasattrnarrowing (#19043) - Make tuple instantiations sound (#18987)
- Add subdiagnostic about empty bodies in more cases (#18942)
- Improve type-inference for
__import__(name)andimportlib.import_module(name)(#19008) - Eagerly evaluate certain constraints when analyzing control flow (#18998, #19044, #19068)
- Update typeshed stubs (#19060): typeshed diff
Server
Documentation
- The ty documentation is now available at docs.astral.sh/ty (#744)
Performance
- Remove
ScopedExpressionId(#19019)
Contributors
- @InSyncWithFoo
- @MatthewMckee4
- @dcreager
- @mtshiba
- @BurntSushi
- @sharkdp
- @ibraheemdev
- @github-actions
- @carljm
- @AlexWaygood
- @MichaReiser
- @zanieb
0.0.1-alpha.12
Bug fixes
- Avoid duplicate diagnostic when reporting errors in unpacked assignments (#18897)
- Fix panics when "pulling types" for
ClassVarorFinalparameterized 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_ONLYfield (#18731)
Type narrowing improvements
- Ty will now perform
isinstance()andissubclass()narrowing when the second argument is a union type, intersection type orTypeVartype (#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.excludepatterns, for consistency withsrc.includepatterns (#18685) - Change
environment.rootto accept multiple paths (#18913) - Rename
src.rootsetting toenvironment.root(#18760) - Support
--python=<symlink to executable>(#18827)
Contributors
- @BurntSushi
- @InSyncWithFoo
- @suneettipirneni
- @AlexWaygood
- @dhruvmanila
- @sharkdp
- @MichaReiser
- @med1844
- @dcreager
- @carljm
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
boolinstances (#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: Neveras a subtype ofNever(#18687) - Update typeshed stubs (#18679): typeshed diff
Configuration
- Allow overriding rules for specific files (#18648)
Server
- Add
python.ty.disableLanguageServicesconfig (#18230)
Contributors
- @dhruvmanila
- @felixscherz
- @MichaReiser
- @alpaylan
- @mtshiba
- @github-actions
- @BurntSushi
- @InSyncWithFoo
- @AlexWaygood
- @abhijeetbodas2001
- @sharkdp
- @ibraheemdev
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
delstatement; 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.dataclassas a function (#18440) - Type narrowing for attribute/subscript assignments (#18041)
Diagnostics
- Add hints to
invalid-type-formfor common mistakes (#18543) - Add subdiagnostic suggestion to
unresolved-referencediagnostic when variable exists onself(#18444) - Track the origin of the
environment.pythonsetting for better error messages (#18483)
CLI
- Fix
--pythonargument for Windows, and improve error messages for bad--pythonarguments (#18457)
Bug fixes
- Meta-type of type variables should be
type[..](#18439) - Only consider a type
Ta subtype of a protocolPif all ofP's members are fully bound onT(#18466) - Fix false positives for legacy
ParamSpecs insideCallabletype expressions (#18426) - Fix panic when pulling types for
UnaryOpexpressions insideLiteralslices (#18536) - Fix panic when trying to pull types for attribute expressions inside
Literaltype expressions (#18535) - Fix panic when trying to pull types for subscript expressions inside
Callabletype expressions (#18534) - Treat lambda functions as instances of
types.FunctionType(#18431) - Implement disjointness between
CallableandSpecialForm(#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_PREFIXto--pythondocumentation (#18574) - Update list of referenced environment variables (#612)
- Document how the default value for
python-versionis determined (#18549) - Document the
"all"option forpython-platform(#18548)
Contributors
- @AlexWaygood
- @charliermarsh
- @mtshiba
- @benbaror
- @sharkdp
- @carljm
- @MichaReiser
- @lipefree
- @BurntSushi
- @DetachHead
- @MatthewMckee4
- @suneettipirneni
- @abhijeetbodas2001
- @ibraheemdev
- @dhruvmanila
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
Callabletypes should have allFunctionTypeattributes available (#18242)
Diagnostics
- Add diagnostic hints for a function that has a non-
Nonereturn-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
Literaltypes are considered assignable to anything theirInstancesupertypes are assignable to (#18351) - Callable types are disjoint from non-callable
@finalnominal 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-fileCLI arg (#18083)
Contributors
- @AlexWaygood
- @BurntSushi
- @lipefree
- @MatthewMckee4
- @dhruvmanila
- @zanieb
- @carljm
- @thejchap
- @sharkdp
- @InSyncWithFoo
- @MichaReiser
0.0.1-alpha.7
Bug fixes
- Implement Python's floor-division semantics for
Literalints (#18249) - Don't warn about a
yieldexpression not being in a function if theyieldexpression 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
ClassVardeclarations 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_FALLBACKpolicy when looking up symbols ontypeinstances (#18312) get_protocol_membersreturns a frozenset, not a tuple (#18284)
Typing semantics and features
- Support
import <namespace>andfrom <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-typeis emitted on a method with an empty body on a non-protocol subclass of a protocol class (#18243) - Improve
invalid-type-formdiagnostic 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-baseerror code into two error codes (#18245) - Rename
call-possibly-unbound-methodtopossibly-unbound-implicit-call(#18017)
Configuration
- Add
teststosrc.rootby default if atests/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-filesconfiguration setting undersrcsection (#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
- @felixscherz
- @carljm
- @j178
- @thejchap
- @brainwane
- @AlexWaygood
- @lipefree
- @InSyncWithFoo
- @brandtbucher
- @MichaReiser
- @maxmynter
- @fabridamicelli
- @sharkdp
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.rootsetting to['.', '<project_name>']if ansrc/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
bytesreturnsint(#18218) - Emit
invalid-exception-caughtdiagnostics 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-importdiagnostic hinting to users to configure their Python environment (#18207) - Make
division-by-zeroan opt-in diagnostic rather than opt-out (#18220)
Import resolution improvements
- Add support for PyPy virtual environments (#18203)
Contributors
- @dhruvmanila
- @InSyncWithFoo
- @AlexWaygood
- @MichaReiser
- @BradonZhang
- @dcreager
- @danielhollas
- @esadek
- @kiran-4444
- @Mathemmagician
- @sharkdp
- @felixscherz
- @adamaaronson
- @carljm
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/Unknownas 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 totype(#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-castfalse positives when casting toUnknown(#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
--colorfor 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-typediagnostic (#18084) - Add type-expression syntax link to
invalid-type-expressiondiagnostics (#18104)
Bug fixes
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/ruleswhen linking to the rules table (#18072) - Use
ty serverinstead ofty 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
- @dhruvmanila
- @Usul-Dev
- @dcreager
- @AlexWaygood
- @BurntSushi
- @MichaReiser
- @frgfm
- @kiran-4444
- @sharkdp
- @eruditmorina
0.0.1-alpha.1
Enhancements
- Add basic support for non-virtual Python environments (#17991)
- Do not allow invalid virtual environments from discovered
.venvorVIRTUAL_ENV(#18003) - Refine message for why a rule is enabled (#18038)
- Update
--pythonto accept paths to executables in environments (#17954) - Improve diagnostics for
assert_typeandassert_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]ortype[Unknown](#18060) - Apply function specialization to all overloads (#18020)
- Implement
DataClassInstanceprotocol 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
- @soof-golan
- @ibraheemdev
- @dhruvmanila
- @charliermarsh
- @MichaReiser
- @carljm
- @abhijeetbodas2001
- @zanieb
- @AlexWaygood
- @dcreager
- @mtshiba
- @sharkdp
0.0.0-alpha.8
Changes
- Add
--configCLI 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-referencetoerror(#17936) - Change range of
revealed-typediagnostic 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-referenceby default (#17934) - Implement
globalhandling andload-before-global-declarationsyntax error (#17637) - Make
unused-ignore-commentdisabled by default for now (#17955) - Recognise functions containing
yield fromexpressions as being generator functions (#17930) - Fix stack overflow on recursive protocols (#17929)
- Report duplicate
ProtocolorGenericbase classes with[duplicate-base], not[inconsistent-mro](#17971) - Respect the gradual guarantee when reporting errors in resolving MROs (#17962)
- Support
typing.Selfin methods (#17689) - Support extending
__all__from an imported module even when the module is not anExprNamenode (#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)