Skip to content

Change the typing spec around string references - #2144

Merged
davidhalter merged 31 commits into
python:mainfrom
davidhalter:string-annotations
Sep 15, 2026
Merged

davidhalter merged 31 commits into
python:mainfrom
davidhalter:string-annotations

Conversation

@davidhalter

@davidhalter davidhalter commented Jan 4, 2026 •

Copy link
Copy Markdown
Collaborator

I added this after the discussion here: https://discuss.python.org/t/annotation-string-references-in-class-scope-in-conformance-tests/105439

I'm not 100% sure about the wording, but I hope the direction is fine. I would like to gather some feedback before presenting this to the typing council.

Please also merge #2139 before this pull request. Otherwise it will be very hard to update Zuban's conformance test results in this pull request.

@davidhalter
davidhalter marked this pull request as ready for review January 4, 2026 23:55
@davidhalter
davidhalter marked this pull request as draft January 4, 2026 23:55
@davidhalter

Copy link
Copy Markdown
Collaborator Author

@JelleZijlstra Could you please pre-review this? What do you think about this spec change?

Comment thread docs/spec/annotations.rst Outdated
@srittau srittau added the topic: typing spec For improving the typing spec label Jan 5, 2026
Comment thread conformance/tests/annotations_forward_refs.py Outdated
Comment thread conformance/tests/annotations_forward_refs.py Outdated
@davidhalter

Copy link
Copy Markdown
Collaborator Author

I think I have integrated all the changes. Is it time to open an issue on the Typing Council’s issue tracker asking for a decision?

Comment thread docs/spec/annotations.rst Outdated

@carljm carljm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One wording nit, one formatting nit, and one conformance suite nit :) But overall this looks great to me.

Comment thread docs/spec/annotations.rst Outdated
Comment thread docs/spec/annotations.rst Outdated

@rchen152 rchen152 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me - much more consistent and clearly specified than before

@carljm carljm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me. Thanks @davidhalter for getting this clarified.

@davidhalter

Copy link
Copy Markdown
Collaborator Author

I have integrated all of Carl's suggestions. I will update the conformance tests as soon as the typing council approves this change. If I update it now we probably just run into merge conflicts, since especially pyrefly changes a lot.

@carljm Please let me know if you think something needs more work.

@zzzeek

zzzeek commented Mar 12, 2026

Copy link
Copy Markdown

Hi, can someone explain the intent of this change to me?

Given, under python 3.14:

Python 3.14.0 (main, Oct 20 2025, 16:44:45) [GCC 14.3.1 20250808 (Red Hat 14.3.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class A: pass
... 
>>> class X:
...     def A(self) -> "A": pass
...     
>>> class Y:
...     def A(self) -> A: pass
...     
>>> typing.get_type_hints(X.A)
{'return': <class '__main__.A'>}
>>> typing.get_type_hints(Y.A)
{'return': <function Y.A at 0x7f2052bc3c10>}
>>> 

does this change propose that it would be impossible for get_type_hints(X.A) to return class A under any circumstances, even with the quotes?

@JelleZijlstra

Copy link
Copy Markdown
Member

Yes

@zzzeek

zzzeek commented Mar 12, 2026 •

Copy link
Copy Markdown

are you going to change the behavior of get_type_hints() ? is this a 3.15 change? is there a pep? it should be apparent that this is an enormous backwards-incompatible change I hope?

edit: the pep is pep-749

@zzzeek

zzzeek commented Mar 12, 2026

Copy link
Copy Markdown

also is this change intended to take place regardless of whether a file is in pep-563 mode or pep-649 mode?

Comment thread docs/spec/annotations.rst Outdated
Comment thread conformance/tests/annotations_forward_refs.py Outdated
Comment thread conformance/results/mypy/annotations_forward_refs.toml Outdated
Comment thread conformance/tests/annotations_forward_refs.py

@carljm carljm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple remaining nits, but looks great, thank you!

Comment thread conformance/tests/annotations_future_import.py
Comment thread conformance/results/pyrefly/annotations_future_import.toml Outdated
Comment thread docs/spec/annotations.rst Outdated
@carljm
carljm dismissed erictraut’s stale review September 14, 2026 18:17

the only comment that came with this review has been addressed

@davidhalter

davidhalter commented Sep 14, 2026 •

Copy link
Copy Markdown
Collaborator Author

Ok now it should be ready. At least now this file shows how different the type checkers think about forward references: None of the type checkers agree on the errors 😄

There are probably a few new notes that might not be great. Will merge after a last OK from Carl.

Thanks for all the feedback!

Comment thread conformance/results/pycroscope/annotations_future_import.toml Outdated
Comment thread conformance/results/pyrefly/annotations_future_import.toml
@davidhalter

Copy link
Copy Markdown
Collaborator Author

I think I addressed everything. Will merge tomorrow if there's nothing else.

@carljm carljm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pushed a few minor nits, looks good to me as-is. Will let you merge it.

@davidhalter

Copy link
Copy Markdown
Collaborator Author

Thanks all! This was quite a bit of work and I'm happy it's finally landing.

@davidhalter
davidhalter merged commit 7f321cd into python:main Sep 15, 2026
5 checks passed
@carljm

carljm commented Sep 15, 2026

Copy link
Copy Markdown
Member

Thanks @davidhalter for all your work on this!

charliermarsh added a commit to astral-sh/ruff that referenced this pull request Sep 19, 2026
## Summary

We update the typing conformance suite from
`cf943ccbea5596ef969eec6e2260097ff697b7ba` to
`3a4ada0a0e6b380c6d7561b8392c6b159f5f374e`, including the annotation
name-resolution changes in python/typing#2144.

The previous pin marks `str: "str" = ""` in a class body as valid. The
updated specification requires an error and adds coverage for `from
__future__ import annotations`. Updating the pin prevents the newly
required diagnostic in #28717 from being reported as a conformance
regression.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

topic: typing spec For improving the typing spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.