Skip to content

Conversation

@AlexWaygood
Copy link
Member

Summary

This came up in #20988. It's usually a mistake to call KnownClass::Tuple.to_instance(); it will usually be more efficient and more correct to call Type::homogeneous_tuple() or Type::heterogeneous_tuple() instead. Add some debug assertions to ensure that we don't make this mistake.

I considered making these non-debug assertions, as the equality check should be pretty cheap, but KnownClass::to_instance() is a pretty hot method, and I think it's exceedingly likely that debug assertions will catch this bug cropping up in the future.

I also removed the private helper method Type::non_tuple_instance() from instance.rs. It wasn't a zero-cost abstraction, it didn't save that much code, and it had to have a big warning doc-comment above it telling us never to make it public to code outside the module. All things considered, it was no longer worth it to keep it around.

Test Plan

cargo test -p ty_python_semantic

@AlexWaygood AlexWaygood added internal An internal refactor or improvement ty Multi-file analysis & type inference labels Oct 22, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Oct 22, 2025

Diagnostic diff on typing conformance tests

No changes detected when running ty on typing conformance tests ✅

Copy link
Contributor

@sharkdp sharkdp left a comment

Choose a reason for hiding this comment

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

Thank you

@github-actions
Copy link
Contributor

github-actions bot commented Oct 22, 2025

mypy_primer results

No ecosystem changes detected ✅
No memory usage changes detected ✅

@AlexWaygood AlexWaygood force-pushed the alex/tuple-to-instance branch from 79b02bb to 1a6311a Compare October 22, 2025 11:01
@AlexWaygood AlexWaygood enabled auto-merge (squash) October 22, 2025 11:02
@AlexWaygood AlexWaygood merged commit 40148d7 into main Oct 22, 2025
40 checks passed
@AlexWaygood AlexWaygood deleted the alex/tuple-to-instance branch October 22, 2025 11:07
dcreager added a commit that referenced this pull request Oct 22, 2025
* main: (65 commits)
  [ty] Some more simplifications when rendering constraint sets (#21009)
  [ty] Make `attributes.md` mdtests faster (#21030)
  [ty] Set `INSTA_FORCE_PASS` and `INSTA_OUTPUT` environment variables from mdtest.py (#21029)
  [ty] Fall back to `Divergent` for deeply nested specializations (#20988)
  [`ruff`] Autogenerate TypeParam nodes (#21028)
  [ty] Add assertions to ensure that we never call `KnownClass::Tuple.to_instance()` or similar (#21027)
  [`ruff`] Auto generate ast Pattern nodes (#21024)
  [`flake8-simplify`] Skip `SIM911` when unknown arguments are present (#20697)
  Render a diagnostic for syntax errors introduced in formatter tests (#21021)
  [ty] Support goto-definition on vendored typeshed stubs (#21020)
  [ty] Implement go-to for binary and unary operators (#21001)
  [ty] Avoid ever-growing default types (#20991)
  [syntax-errors] Name is parameter and global (#20426)
  [ty] Disable panicking mdtest (#21016)
  [ty] Fix completions at end of file (#20993)
  [ty] Fix out-of-order semantic token for function with regular argument after kwargs (#21013)
  [ty] Fix auto import for files with `from __future__` import (#20987)
  [`fastapi`] Handle ellipsis defaults in FAST002 autofix (`FAST002`) (#20810)
  [`ruff`] Skip autofix for keyword and `__debug__` path params (#20960)
  [`flake8-bugbear`] Skip `B905` and `B912` if <2 iterables and no starred arguments (#20998)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal An internal refactor or improvement ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants