ruff/crates/ty_python_semantic/resources/mdtest
Carl Meyer 17dc2e4d80
[ty] don't assume that deferred type inference means deferred name resolution (#20160)
## Summary

We have the ability to defer type inference of some parts of
definitions, so as to allow us to create a type that may need to be
recursively referenced in those other parts of the definition.

We also have the ability to do type inference in a context where all
name resolution should be deferred (that is, names should be looked up
from all-reachable-definitions rather than from the location of use.)
This is used for all annotations in stubs, or if `from __future__ import
annotations` is active.

Previous to this PR, these two concepts were linked: deferred-inference
always implied deferred-name-resolution, though we also supported
deferred-name-resolution without deferred-inference, via
`DeferredExpressionState`.

For the upcoming `typing.TypeAlias` support, I will defer inference of
the entire RHS of the alias (so as to support cycles), but that doesn't
imply deferred name resolution; at runtime, the RHS of a name annotated
as `typing.TypeAlias` is executed eagerly.

So this PR fully de-couples the two concepts, instead explicitly setting
the `DeferredExpressionState` in those cases where we should defer name
resolution.

It also fixes a long-standing related bug, where we were deferring name
resolution of all names in class bases, if any of the class bases
contained a stringified annotation.

## Test Plan

Added test that failed before this PR.
2025-08-29 16:19:45 -07:00
..
annotations [ty] Preserve qualifiers when accessing attributes on unions/intersections (#20114) 2025-08-27 20:01:45 +02:00
assignment [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
binary [ty] Remove special casing for string-literal-in-tuple __contains__ (#19642) 2025-07-31 11:28:03 +01:00
boolean Revert "[ty] Better control flow for boolean expressions that are inside if (#18010)" (#18150) 2025-05-17 08:27:32 -04:00
boundness_declaredness Update class literal display to use <class 'Foo'> style (#17889) 2025-05-06 20:11:25 -04:00
call [ty] Unpack variadic argument type in specialization (#20130) 2025-08-29 04:27:28 +00:00
class [ty] Remove use of ClassBase::try_from_type from super() machinery (#19902) 2025-08-14 22:14:31 +01:00
comparison [ty] Enum literal types (#19328) 2025-07-15 21:31:53 +02:00
comprehensions [ty] Async for loops and async iterables (#19634) 2025-07-30 17:40:24 +02:00
conditional [ty] Support as-patterns in reachability analysis (#19728) 2025-08-04 20:13:50 +02:00
dataclasses [ty] correctly ignore field specifiers when not specified (#20002) 2025-08-20 11:33:23 -07:00
declaration [ty] Format conflicting types as an enumeration (#18956) 2025-06-26 14:29:33 +02:00
diagnostics Revert "[ty] Use invalid-assignment error code for invalid assignments to ClassVars" (#20158) 2025-08-29 19:48:45 +01:00
directives [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
doc ty_python_semantic: add union type context to function call type errors 2025-05-09 13:40:51 -04:00
exception [ty] Use separate Rust types for bound and unbound type variables (#19796) 2025-08-11 15:29:58 -04:00
expression [ty] Support async/await, async with and yield from (#19595) 2025-07-30 11:51:21 +02:00
function [ty] Improve disambiguation of types via fully qualified names (#20141) 2025-08-29 08:44:18 +00:00
generics [ty] Perform assignability etc checks using new Constraints trait (#19838) 2025-08-21 09:30:09 -04:00
ide_support [ty] Fix attribute access on TypedDicts (#19758) 2025-08-05 13:59:10 +02:00
import [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
literal [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
loops [ty] Add precise iteration and unpacking inference for string literals and bytes literals (#20023) 2025-08-22 19:33:08 +01:00
narrow [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
regression
scopes [ty] fix deferred name loading in PEP695 generic classes/functions (#19888) 2025-08-13 15:51:59 -07:00
shadowing
snapshots Revert "[ty] Use invalid-assignment error code for invalid assignments to ClassVars" (#20158) 2025-08-29 19:48:45 +01:00
stubs [ty] Do not carry the generic context of Protocol or Generic in the ClassBase enum (#17989) 2025-05-22 21:37:03 -04:00
subscript [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
suppressions [ty] Consistent use of American english (in rules) (#19488) 2025-07-22 16:10:38 +02:00
type_compendium [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
type_of [ty] Improve the Display for generic type[] types (#19667) 2025-07-31 19:45:01 +01:00
type_properties [ty] Introduce a representation for the top/bottom materialization of an invariant generic (#20076) 2025-08-27 17:53:57 -07:00
type_qualifiers Revert "[ty] Use invalid-assignment error code for invalid assignments to ClassVars" (#20158) 2025-08-29 19:48:45 +01:00
unary Update class literal display to use <class 'Foo'> style (#17889) 2025-05-06 20:11:25 -04:00
with [ty] Diagnostics for async context managers (#19704) 2025-08-05 07:41:37 -07:00
.mdformat.toml
async.md [ty] Support async/await, async with and yield from (#19595) 2025-07-30 11:51:21 +02:00
attributes.md Revert "[ty] Use invalid-assignment error code for invalid assignments to ClassVars" (#20158) 2025-08-29 19:48:45 +01:00
classes.md [ty] don't assume that deferred type inference means deferred name resolution (#20160) 2025-08-29 16:19:45 -07:00
cycle.md [ty] Add cycle handling for unpacking targets (#18078) 2025-05-13 21:27:48 +00:00
decorators.md ty_python_semantic: add union type context to function call type errors 2025-05-09 13:40:51 -04:00
del.md [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
deprecated.md [ty] Consistent use of American english (in rules) (#19488) 2025-07-22 16:10:38 +02:00
descriptor_protocol.md [ty] Better error message for attempting to assign to a read-only property (#20150) 2025-08-29 13:22:23 +00:00
enums.md [ty] Infer the correct type of Enum __eq__ and __ne__ comparisions (#19666) 2025-08-18 19:45:44 +02:00
exhaustiveness_checking.md [ty] Add precise iteration and unpacking inference for string literals and bytes literals (#20023) 2025-08-22 19:33:08 +01:00
final.md
instance_layout_conflict.md [ty] Add support for PEP 800 (#20084) 2025-08-25 19:39:05 +01:00
intersection_types.md [ty] Expansion of enums into unions of literals (#19382) 2025-07-21 19:37:55 +02:00
invalid_syntax.md
known_constants.md
mdtest_config.md
mdtest_custom_typeshed.md [ty] Remove Type::Tuple (#19669) 2025-08-11 22:03:32 +01:00
metaclass.md Update class literal display to use <class 'Foo'> style (#17889) 2025-05-06 20:11:25 -04:00
mro.md [ty] Track different uses of legacy typevars, including context when rendering typevars (#19604) 2025-08-01 12:20:32 -04:00
named_tuple.md [ty] Better error message for attempting to assign to a read-only property (#20150) 2025-08-29 13:22:23 +00:00
overloads.md [ty] Track different uses of legacy typevars, including context when rendering typevars (#19604) 2025-08-01 12:20:32 -04:00
pep695_type_aliases.md [ty] ensure union normalization really normalizes (#20147) 2025-08-29 09:02:35 -07:00
properties.md ty_python_semantic: add union type context to function call type errors 2025-05-09 13:40:51 -04:00
protocols.md Revert "[ty] Use invalid-assignment error code for invalid assignments to ClassVars" (#20158) 2025-08-29 19:48:45 +01:00
public_types.md [ty] improve lazy scope place lookup (#19321) 2025-07-25 07:11:11 +00:00
statically_known_branches.md [ty] Evaluate reachability of non-definitely-bound to Ambiguous (#19579) 2025-08-28 14:34:49 +02:00
sys_platform.md
sys_version_info.md
t_strings.md [ty] Add support for PEP 750 t-strings (#20085) 2025-08-25 18:49:49 +00:00
terminal_statements.md [ty] improve lazy scope place lookup (#19321) 2025-07-25 07:11:11 +00:00
ty_extensions.md [ty] Rename type_api => ty_extensions (#19523) 2025-07-24 08:24:26 +00:00
typed_dict.md [ty] typecheck dict methods for TypedDict (#19874) 2025-08-29 16:25:03 +02:00
union_types.md [ty] Expansion of enums into unions of literals (#19382) 2025-07-21 19:37:55 +02:00
unpacking.md [ty] Infer slightly more precise types for comprehensions (#20111) 2025-08-27 13:21:47 +01:00
unreachable.md [ty] improve lazy scope place lookup (#19321) 2025-07-25 07:11:11 +00:00