Skip to content

Comments

[red-knot] Improve type inference for except handlers#14838

Merged
AlexWaygood merged 1 commit intomainfrom
alex/except-handlers
Dec 9, 2024
Merged

[red-knot] Improve type inference for except handlers#14838
AlexWaygood merged 1 commit intomainfrom
alex/except-handlers

Conversation

@AlexWaygood
Copy link
Member

Summary

I noticed in #14802 (comment) that there were some TODOs around type inference for exception handlers that we could now do, following @sharkdp's implementation of Type::SubclassOf. So this PR does them!

Features added in this PR:

  • Diagnostics for invalid types caught in (sync or async) exception handlers
  • Support for dynamic exception handlers (e.g. catching a value where the binding comes from a parameter annotated as type[ValueError] or tuple[type[ValueError], type[OSError]] is now supported)

Test Plan

New mdtests added, and TODOs in existing mdtests removed.

@AlexWaygood AlexWaygood added the ty Multi-file analysis & type inference label Dec 8, 2024
@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2024

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

Copy link
Contributor

@carljm carljm left a comment

Choose a reason for hiding this comment

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

Excellent!

@AlexWaygood AlexWaygood merged commit ab26d9c into main Dec 9, 2024
@AlexWaygood AlexWaygood deleted the alex/except-handlers branch December 9, 2024 22:50
dcreager added a commit that referenced this pull request Dec 10, 2024
* main:
  [`airflow`] Add fix to remove deprecated keyword arguments (`AIR302`) (#14887)
  Improve mdtests style (#14884)
  Reference `suppress-dummy-regex-options` in documentation of rules supporting it (#14888)
  [`flake8-bugbear`] `itertools.batched()` without explicit `strict` (`B911`) (#14408)
  [`ruff`] Mark autofix for `RUF052` as always unsafe (#14824)
  [red-knot] Improve type inference for except handlers (#14838)
  More typos found by codespell (#14880)
  [red-knot] move standalone expression_ty to TypeInferenceBuilder::file_expression_ty (#14879)
  [`ruff`] Do not simplify `round()` calls (`RUF046`) (#14832)
  Stop referring to early ruff versions (#14862)
  Fix a typo in `class.rs` (#14877)
  [`flake8-pyi`] Also remove `self` and `cls`'s annotation (`PYI034`) (#14801)
  [`pyupgrade`] Remove unreachable code in `UP015` implementation (#14871)
  [`flake8-bugbear`] Skip `B028` if `warnings.warn` is called with `*args` or `**kwargs` (#14870)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants