Commit 9f81f57
sync upstream (#4)
* [red-knot] binary arithmetic on instances (#13800)
Co-authored-by: Alex Waygood <[email protected]>
* [red-knot] Fix edge case for binary-expression inference where the lhs and rhs are the exact same type (#13823)
## Summary
This fixes an edge case that @carljm and I missed when implementing
https://github.com/astral-sh/ruff/pull/13800. Namely, if the left-hand
operand is the _exact same type_ as the right-hand operand, the
reflected dunder on the right-hand operand is never tried:
```pycon
>>> class Foo:
... def __radd__(self, other):
... return 42
...
>>> Foo() + Foo()
Traceback (most recent call last):
File "<python-input-1>", line 1, in <module>
Foo() + Foo()
~~~~~~^~~~~~~
TypeError: unsupported operand type(s) for +: 'Foo' and 'Foo'
```
This edge case _is_ covered in Brett's blog at
https://snarky.ca/unravelling-binary-arithmetic-operations-in-python/,
but I missed it amongst all the other subtleties of this algorithm. The
motivations and history behind it were discussed in
https://mail.python.org/archives/list/[email protected]/thread/7NZUCODEAPQFMRFXYRMGJXDSIS3WJYIV/
## Test Plan
I added an mdtest for this cornercase.
* [red-knot] Enhancing Diagnostics for Compare Expression Inference (#13819)
## Summary
- Refactored comparison type inference functions in `infer.rs`: Changed
the return type from `Option` to `Result` to lay the groundwork for
providing more detailed diagnostics.
- Updated diagnostic messages.
This is a small step toward improving diagnostics in the future.
Please refer to #13787
## Test Plan
mdtest included!
---------
Co-authored-by: Carl Meyer <[email protected]>
* [python_ast] Make the iter_mut functions public (#13542)
* [red-knot] Implement more types in binary and unary expressions (#13803)
Implemented some points from
https://github.com/astral-sh/ruff/issues/12701
- Handle Unknown and Any in Unary operation
- Handle Boolean in binary operations
- Handle instances in unary operation
- Consider division by False to be division by zero
---------
Co-authored-by: Carl Meyer <[email protected]>
Co-authored-by: Alex Waygood <[email protected]>
* Update BREAKING_CHANGES.md for Ruff 0.7 (#13828)
* Bump MSRV to Rust 1.80 (#13826)
* Update Rust crate pep440_rs to 0.7.1 (#13654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Micha Reiser <[email protected]>
* [red-knot] Cleanup generated names of mdtest tests (#13831)
Co-authored-by: Alex Waygood <[email protected]>
Co-authored-by: Micha Reiser <[email protected]>
* Simplify iteration idioms (#13834)
Remove unnecessary uses of `.as_ref()`, `.iter()`, `&**` and similar, mostly in situations when iterating over variables. Many of these changes are only possible following #13826, when we bumped our MSRV to 1.80: several useful implementations on `&Box<[T]>` were only stabilised in Rust 1.80. Some of these changes we could have done earlier, however.
* Modernize build scripts (#13837)
Use the modern `cargo::KEY=VALUE` syntax that was stabilised in MSRV 1.77, rather than the deprecated `cargo:KEY=VALUE` syntax.
* Update dependency mdformat to v0.7.18 (#13843)
* Update dependency ruff to v0.7.0 (#13847)
* Update Rust crate libc to v0.2.161 (#13840)
* Update Rust crate anyhow to v1.0.90 (#13839)
* Update Rust crate proc-macro2 to v1.0.88 (#13841)
* Update Rust crate syn to v2.0.82 (#13842)
* Update Rust crate fern to 0.7.0 (#13844)
* Update Rust crate serde_json to v1.0.132 (#13848)
* Update Rust crate uuid to v1.11.0 (#13845)
* Update dependency tomli_w to v1.1.0 (#13849)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [tomli_w](https://redirect.github.com/hukkin/tomli-w)
([changelog](https://redirect.github.com/hukkin/tomli-w/blob/master/CHANGELOG.md))
| `==1.0.0` -> `==1.1.0` |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>hukkin/tomli-w (tomli_w)</summary>
###
[`v1.1.0`](https://redirect.github.com/hukkin/tomli-w/blob/HEAD/CHANGELOG.md#110)
[Compare
Source](https://redirect.github.com/hukkin/tomli-w/compare/1.0.0...1.1.0)
- Removed
- Support for Python 3.7 and 3.8
- Added
- Accept generic `collections.abc.Mapping`, not just `dict`, as input.
Thank you [Watal M. Iwasaki](https://redirect.github.com/heavywatal) for
the
[PR](https://redirect.github.com/hukkin/tomli-w/pull/46).
- `indent` keyword argument for customizing indent width of arrays.
Thank you [Wim Jeantine-Glenn](https://redirect.github.com/wimglenn) for
the
[PR](https://redirect.github.com/hukkin/tomli-w/pull/49).
- Type annotations
- Type annotate `dump` function's output stream object as
`typing.IO[bytes]` (previously `typing.BinaryIO`)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update pre-commit dependencies (#13850)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[abravalheri/validate-pyproject](https://redirect.github.com/abravalheri/validate-pyproject)
| repository | minor | `v0.20.2` -> `v0.21` |
|
[astral-sh/ruff-pre-commit](https://redirect.github.com/astral-sh/ruff-pre-commit)
| repository | minor | `v0.6.9` -> `v0.7.0` |
| [crate-ci/typos](https://redirect.github.com/crate-ci/typos) |
repository | minor | `v1.25.0` -> `v1.26.0` |
|
[executablebooks/mdformat](https://redirect.github.com/executablebooks/mdformat)
| repository | patch | `0.7.17` -> `0.7.18` |
Note: The `pre-commit` manager in Renovate is not supported by the
`pre-commit` maintainers or community. Please do not report any problems
there, instead [create a Discussion in the Renovate
repository](https://redirect.github.com/renovatebot/renovate/discussions/new)
if you have any questions.
---
### Release Notes
<details>
<summary>abravalheri/validate-pyproject
(abravalheri/validate-pyproject)</summary>
###
[`v0.21`](https://redirect.github.com/abravalheri/validate-pyproject/releases/tag/v0.21)
[Compare
Source](https://redirect.github.com/abravalheri/validate-pyproject/compare/v0.20.2...v0.21)
#### What's Changed
- Added support PEP 735 by
[@​henryiii](https://redirect.github.com/henryiii) in
[https://github.com/abravalheri/validate-pyproject/pull/208](https://redirect.github.com/abravalheri/validate-pyproject/pull/208)
- Added support PEP 639 by
[@​henryiii](https://redirect.github.com/henryiii) in
[https://github.com/abravalheri/validate-pyproject/pull/210](https://redirect.github.com/abravalheri/validate-pyproject/pull/210)
- Renamed testing extra to test by
[@​henryiii](https://redirect.github.com/henryiii) in
[https://github.com/abravalheri/validate-pyproject/pull/212](https://redirect.github.com/abravalheri/validate-pyproject/pull/212)
- General updates in CI setup
**Full Changelog**:
https://github.com/abravalheri/validate-pyproject/compare/v0.20.2...v0.21
</details>
<details>
<summary>astral-sh/ruff-pre-commit (astral-sh/ruff-pre-commit)</summary>
###
[`v0.7.0`](https://redirect.github.com/astral-sh/ruff-pre-commit/releases/tag/v0.7.0)
[Compare
Source](https://redirect.github.com/astral-sh/ruff-pre-commit/compare/v0.6.9...v0.7.0)
See: https://github.com/astral-sh/ruff/releases/tag/0.7.0
</details>
<details>
<summary>crate-ci/typos (crate-ci/typos)</summary>
###
[`v1.26.0`](https://redirect.github.com/crate-ci/typos/releases/tag/v1.26.0)
[Compare
Source](https://redirect.github.com/crate-ci/typos/compare/v1.25.0...v1.26.0)
#### \[1.26.0] - 2024-10-07
##### Compatibility
- *(pre-commit)* Requires 3.2+
##### Fixes
- *(pre-commit)* Resolve deprecations in 4.0 about deprecated stage
names
</details>
<details>
<summary>executablebooks/mdformat (executablebooks/mdformat)</summary>
###
[`v0.7.18`](https://redirect.github.com/executablebooks/mdformat/compare/0.7.17...0.7.18)
[Compare
Source](https://redirect.github.com/executablebooks/mdformat/compare/0.7.17...0.7.18)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update NPM Development dependencies (#13851)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@cloudflare/workers-types](https://redirect.github.com/cloudflare/workerd)
| [`4.20241004.0` ->
`4.20241018.0`](https://renovatebot.com/diffs/npm/@cloudflare%2fworkers-types/4.20241004.0/4.20241018.0)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/react-dom](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom))
| [`18.3.0` ->
`18.3.1`](https://renovatebot.com/diffs/npm/@types%2freact-dom/18.3.0/18.3.1)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
|
[@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin))
| [`8.8.0` ->
`8.10.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.8.0/8.10.0)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`8.8.0` ->
`8.10.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.8.0/8.10.0)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
| [eslint-plugin-react-hooks](https://react.dev/)
([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks))
| [`^4.6.0` ->
`^5.0.0`](https://renovatebot.com/diffs/npm/eslint-plugin-react-hooks/4.6.2/5.0.0)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
|
[miniflare](https://redirect.github.com/cloudflare/workers-sdk/tree/main/packages/miniflare#readme)
([source](https://redirect.github.com/cloudflare/workers-sdk/tree/HEAD/packages/miniflare))
| [`3.20240925.0` ->
`3.20241011.0`](https://renovatebot.com/diffs/npm/miniflare/3.20240925.0/3.20241011.0)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
| [tailwindcss](https://tailwindcss.com)
([source](https://redirect.github.com/tailwindlabs/tailwindcss)) |
[`3.4.13` ->
`3.4.14`](https://renovatebot.com/diffs/npm/tailwindcss/3.4.13/3.4.14) |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
| [typescript](https://www.typescriptlang.org/)
([source](https://redirect.github.com/microsoft/TypeScript)) | [`5.6.2`
-> `5.6.3`](https://renovatebot.com/diffs/npm/typescript/5.6.2/5.6.3) |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
| [vite](https://vite.dev)
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite))
| [`5.4.8` ->
`5.4.9`](https://renovatebot.com/diffs/npm/vite/5.4.8/5.4.9) |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
| [wrangler](https://redirect.github.com/cloudflare/workers-sdk)
([source](https://redirect.github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler))
| [`3.80.0` ->
`3.81.0`](https://renovatebot.com/diffs/npm/wrangler/3.80.0/3.81.0) |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>cloudflare/workerd (@​cloudflare/workers-types)</summary>
###
[`v4.20241018.0`](https://redirect.github.com/cloudflare/workerd/compare/caeb4e0d9e8a7ecbef208e8c54c27bae7e412f7b...fa7168988f89ec72e218a0112be4f6f0229c2d6b)
[Compare
Source](https://redirect.github.com/cloudflare/workerd/compare/caeb4e0d9e8a7ecbef208e8c54c27bae7e412f7b...fa7168988f89ec72e218a0112be4f6f0229c2d6b)
###
[`v4.20241011.0`](https://redirect.github.com/cloudflare/workerd/compare/76198481858fce538e4efa2783c3844e38149227...caeb4e0d9e8a7ecbef208e8c54c27bae7e412f7b)
[Compare
Source](https://redirect.github.com/cloudflare/workerd/compare/76198481858fce538e4efa2783c3844e38149227...caeb4e0d9e8a7ecbef208e8c54c27bae7e412f7b)
</details>
<details>
<summary>typescript-eslint/typescript-eslint
(@​typescript-eslint/eslint-plugin)</summary>
###
[`v8.10.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8100-2024-10-17)
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.9.0...v8.10.0)
##### 🚀 Features
- support TypeScript 5.6
([#​9972](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/9972))
##### ❤️ Thank You
- Josh Goldberg ✨
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.
###
[`v8.9.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#890-2024-10-14)
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.8.1...v8.9.0)
##### 🩹 Fixes
- **eslint-plugin:** \[no-unnecessary-type-parameters] cannot assume
variables are either type or value
- **scope-manager:** \[no-use-before-define] do not treat nested
namespace aliases as variable references
- **eslint-plugin:** \[return-await] sync the behavior with
await-thenable
- **eslint-plugin:** \[prefer-literal-enum-member] report a different
error message when `allowBitwiseExpressions` is enabled
- **eslint-plugin:** \[no-loop-func] sync from upstream base rule
- **eslint-plugin:** \[no-unused-vars] never report the naming of an
enum member
- **eslint-plugin:** correct use-at-your-own-risk type definitions
- **eslint-plugin:** handle unions in await...for
##### ❤️ Thank You
- Abraham Guo
- Anna Bocharova
- Arya Emami
- auvred
- Joshua Chen
- Kirk Waiblinger
- Lotfi Meklati
- mdm317
- Ronen Amiel
- Sukka
- YeonJuan
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.
###
[`v8.8.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#881-2024-10-07)
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.8.0...v8.8.1)
##### 🩹 Fixes
- **eslint-plugin:** stop warning on
[@​ts-nocheck](https://redirect.github.com/ts-nocheck) comments
which aren't at the beginning of the file
##### ❤️ Thank You
- Brad Zacher
- Ronen Amiel
- WhitePiano
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.
</details>
<details>
<summary>typescript-eslint/typescript-eslint
(@​typescript-eslint/parser)</summary>
###
[`v8.10.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8100-2024-10-17)
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.9.0...v8.10.0)
##### 🚀 Features
- support TypeScript 5.6
([#​9972](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/9972))
##### ❤️ Thank You
- Josh Goldberg ✨
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.
###
[`v8.9.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#890-2024-10-14)
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.8.1...v8.9.0)
This was a version bump only for parser to align it with other projects,
there were no code changes.
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.
###
[`v8.8.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#881-2024-10-07)
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.8.0...v8.8.1)
This was a version bump only for parser to align it with other projects,
there were no code changes.
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.
</details>
<details>
<summary>facebook/react (eslint-plugin-react-hooks)</summary>
###
[`v5.0.0`](https://redirect.github.com/facebook/react/blob/HEAD/packages/eslint-plugin-react-hooks/CHANGELOG.md#500)
[Compare
Source](https://redirect.github.com/facebook/react/compare/a87edf62d7d69705ddbcec9a24f0780b3db7535f...eslint-plugin-react-hooks@5.0.0)
- **New Violations:** Component names now need to start with an
uppercase letter instead of a non-lowercase letter. This means `_Button`
or `_component` are no longer valid.
([@​kassens](https://redirect.github.com/kassens)) in
[#​25162](https://redirect.github.com/facebook/react/pull/25162)
<!---->
- Consider dispatch from `useActionState` stable.
([@​eps1lon](https://redirect.github.com/eps1lon) in
[#​29665](https://redirect.github.com/facebook/react/pull/29665))
- Add support for ESLint v9.
([@​eps1lon](https://redirect.github.com/eps1lon) in
[#​28773](https://redirect.github.com/facebook/react/pull/28773))
- Accept `as` expression in callback.
([@​StyleShit](https://redirect.github.com/StyleShit) in
[#​28202](https://redirect.github.com/facebook/react/pull/28202))
- Accept `as` expressions in deps array.
([@​StyleShit](https://redirect.github.com/StyleShit) in
[#​28189](https://redirect.github.com/facebook/react/pull/28189))
- Treat `React.use()` the same as `use()`.
([@​kassens](https://redirect.github.com/kassens) in
[#​27769](https://redirect.github.com/facebook/react/pull/27769))
- Move `use()` lint to non-experimental.
([@​kassens](https://redirect.github.com/kassens) in
[#​27768](https://redirect.github.com/facebook/react/pull/27768))
- Support Flow `as` expressions.
([@​cpojer](https://redirect.github.com/cpojer) in
[#​27590](https://redirect.github.com/facebook/react/pull/27590))
- Allow `useEffect(fn, undefined)`.
([@​kassens](https://redirect.github.com/kassens) in
[#​27525](https://redirect.github.com/facebook/react/pull/27525))
- Disallow hooks in async functions.
([@​acdlite](https://redirect.github.com/acdlite) in
[#​27045](https://redirect.github.com/facebook/react/pull/27045))
- Rename experimental `useEvent` to `useEffectEvent`.
([@​sebmarkbage](https://redirect.github.com/sebmarkbage) in
[#​25881](https://redirect.github.com/facebook/react/pull/25881))
- Lint for presence of `useEvent` functions in dependency lists.
([@​poteto](https://redirect.github.com/poteto) in
[#​25512](https://redirect.github.com/facebook/react/pull/25512))
- Check `useEvent` references instead.
([@​poteto](https://redirect.github.com/poteto) in
[#​25319](https://redirect.github.com/facebook/react/pull/25319))
- Update `RulesOfHooks` with `useEvent` rules.
([@​poteto](https://redirect.github.com/poteto) in
[#​25285](https://redirect.github.com/facebook/react/pull/25285))
</details>
<details>
<summary>cloudflare/workers-sdk (miniflare)</summary>
###
[`v3.20241011.0`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/miniflare/CHANGELOG.md#3202410110)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.20241011.0)
##### Patch Changes
-
[#​6961](https://redirect.github.com/cloudflare/workers-sdk/pull/6961)
[`5761020`](https://redirect.github.com/cloudflare/workers-sdk/commit/5761020cb41270ce872ad6c555b263597949c06d)
Thanks
[@​dependabot](https://redirect.github.com/apps/dependabot)! -
chore: update dependencies of "miniflare" package
The following dependency versions have been updated:
| Dependency | From | To |
| ------------------------- | ------------- | ------------- |
| workerd | 1.20241004.0 | 1.20241011.1 |
|
[@​cloudflare/workers-types](https://redirect.github.com/cloudflare/workers-types)
| ^4.20241004.0 | ^4.20241011.0 |
-
[#​6943](https://redirect.github.com/cloudflare/workers-sdk/pull/6943)
[`7859a04`](https://redirect.github.com/cloudflare/workers-sdk/commit/7859a04bcd4b2f1cafe67c371bd236acaf7a2d91)
Thanks [@​sdnts](https://redirect.github.com/sdnts)! - fix: local
queues now respect consumer max delays and retry delays properly
###
[`v3.20241004.0`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/miniflare/CHANGELOG.md#3202410040)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.20241004.0)
##### Patch Changes
-
[#​6949](https://redirect.github.com/cloudflare/workers-sdk/pull/6949)
[`c863183`](https://redirect.github.com/cloudflare/workers-sdk/commit/c86318354f1a6c0f5c096d6b2a884de740552a19)
Thanks
[@​dependabot](https://redirect.github.com/apps/dependabot)! -
chore: update dependencies of "miniflare" package
The following dependency versions have been updated:
| Dependency | From | To |
| ------------------------- | ------------- | ------------- |
| workerd | 1.20240925.0 | 1.20241004.0 |
|
[@​cloudflare/workers-types](https://redirect.github.com/cloudflare/workers-types)
| ^4.20240925.0 | ^4.20241004.0 |
###
[`v3.20240925.1`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/miniflare/CHANGELOG.md#3202409251)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.20240925.1)
##### Patch Changes
-
[#​6835](https://redirect.github.com/cloudflare/workers-sdk/pull/6835)
[`5c50949`](https://redirect.github.com/cloudflare/workers-sdk/commit/5c509494807a1c0418be83c47a459ec80126848e)
Thanks [@​emily-shen](https://redirect.github.com/emily-shen)! -
fix: rename asset plugin options slightly to match wrangler.toml better
Renamed `path` -> `directory`, `bindingName` -> `binding`.
</details>
<details>
<summary>tailwindlabs/tailwindcss (tailwindcss)</summary>
###
[`v3.4.14`](https://redirect.github.com/tailwindlabs/tailwindcss/releases/tag/v3.4.14)
[Compare
Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v3.4.13...v3.4.14)
##### Fixed
- Don't set `display: none` on elements that use `hidden="until-found"`
([#​14625](https://redirect.github.com/tailwindlabs/tailwindcss/pull/14625))
</details>
<details>
<summary>microsoft/TypeScript (typescript)</summary>
###
[`v5.6.3`](https://redirect.github.com/microsoft/TypeScript/compare/v5.6.2...d48a5cf89a62a62d6c6ed53ffa18f070d9458b85)
[Compare
Source](https://redirect.github.com/microsoft/TypeScript/compare/v5.6.2...v5.6.3)
</details>
<details>
<summary>vitejs/vite (vite)</summary>
###
[`v5.4.9`](https://redirect.github.com/vitejs/vite/releases/tag/v5.4.9)
[Compare
Source](https://redirect.github.com/vitejs/vite/compare/v5.4.8...v5.4.9)
Please refer to
[CHANGELOG.md](https://redirect.github.com/vitejs/vite/blob/v5.4.9/packages/vite/CHANGELOG.md)
for details.
</details>
<details>
<summary>cloudflare/workers-sdk (wrangler)</summary>
###
[`v3.81.0`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#3810)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.81.0)
##### Minor Changes
-
[#​6990](https://redirect.github.com/cloudflare/workers-sdk/pull/6990)
[`586c253`](https://redirect.github.com/cloudflare/workers-sdk/commit/586c253f7de36360cab275cb1ebf9a2373fd4f4c)
Thanks
[@​courtney-sims](https://redirect.github.com/courtney-sims)! -
feat: Adds new detailed pages deployment output type
##### Patch Changes
-
[#​6963](https://redirect.github.com/cloudflare/workers-sdk/pull/6963)
[`a5ac45d`](https://redirect.github.com/cloudflare/workers-sdk/commit/a5ac45d7d5aa7a6b82de18a8cf14e6eabdd22e9e)
Thanks [@​RamIdeas](https://redirect.github.com/RamIdeas)! - fix:
make `wrangler dev --remote` respect wrangler.toml's `account_id`
property.
This was a regression in the `--x-dev-env` flow recently turned on by
default.
-
[#​6996](https://redirect.github.com/cloudflare/workers-sdk/pull/6996)
[`b8ab809`](https://redirect.github.com/cloudflare/workers-sdk/commit/b8ab8093b9011b5d7d47bcd31fa69cefa6c8fe2a)
Thanks [@​emily-shen](https://redirect.github.com/emily-shen)! -
fix: improve error messaging when accidentally using Workers commands in
Pages project
If we detect a Workers command used with a Pages project (i.e.
wrangler.toml contains `pages_output_build_dir`), error with Pages
version of command rather than "missing entry-point" etc.
###
[`v3.80.5`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#3805)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.80.5)
##### Patch Changes
- Updated dependencies
\[[`5761020`](https://redirect.github.com/cloudflare/workers-sdk/commit/5761020cb41270ce872ad6c555b263597949c06d),
[`7859a04`](https://redirect.github.com/cloudflare/workers-sdk/commit/7859a04bcd4b2f1cafe67c371bd236acaf7a2d91)]:
- [email protected]
###
[`v3.80.4`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#3804)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.80.4)
##### Patch Changes
-
[#​6937](https://redirect.github.com/cloudflare/workers-sdk/pull/6937)
[`51aedd4`](https://redirect.github.com/cloudflare/workers-sdk/commit/51aedd4333cce9ffa4f6834cdf19e22148dab7e9)
Thanks [@​lrapoport-cf](https://redirect.github.com/lrapoport-cf)!
- fix: show help when kv commands are run without parameters
- Updated dependencies
\[[`c863183`](https://redirect.github.com/cloudflare/workers-sdk/commit/c86318354f1a6c0f5c096d6b2a884de740552a19),
[`fd43068`](https://redirect.github.com/cloudflare/workers-sdk/commit/fd430687ec1431be6c3af1b7420278b636c36e59)]:
- [email protected]
-
[@​cloudflare/workers-shared](https://redirect.github.com/cloudflare/workers-shared)[@​0](https://redirect.github.com/0).6.0
###
[`v3.80.3`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#3803)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.80.3)
##### Patch Changes
-
[#​6927](https://redirect.github.com/cloudflare/workers-sdk/pull/6927)
[`2af75ed`](https://redirect.github.com/cloudflare/workers-sdk/commit/2af75edb3c0722c04793c74f46aa099f4a3f27a9)
Thanks [@​emily-shen](https://redirect.github.com/emily-shen)! -
fix: respect `CLOUDFLARE_ACCOUNT_ID` with `wrangler pages project`
commands
Fixes
[#​4947](https://redirect.github.com/cloudflare/workers-sdk/issues/4947)
-
[#​6894](https://redirect.github.com/cloudflare/workers-sdk/pull/6894)
[`eaf71b8`](https://redirect.github.com/cloudflare/workers-sdk/commit/eaf71b86cc5650cffb54c942704ce3dd1b5ed6a7)
Thanks
[@​petebacondarwin](https://redirect.github.com/petebacondarwin)!
- fix: improve the rendering of build errors when bundling
-
[#​6920](https://redirect.github.com/cloudflare/workers-sdk/pull/6920)
[`2e64968`](https://redirect.github.com/cloudflare/workers-sdk/commit/2e649686c259c639701a62e754c53448cb694dfc)
Thanks [@​vicb](https://redirect.github.com/vicb)! - chore: update
unenv dependency version
Pulls in [feat(node/net): implement Server
mock](https://redirect.github.com/unjs/unenv/pull/316).
-
[#​6932](https://redirect.github.com/cloudflare/workers-sdk/pull/6932)
[`4c6aad0`](https://redirect.github.com/cloudflare/workers-sdk/commit/4c6aad05b919a56484d13e4a49b861dcafbc0a2c)
Thanks [@​vicb](https://redirect.github.com/vicb)! - fix: allow
`require`ing unenv aliased packages
Before this PR `require`ing packages aliased in unenv would fail.
That's because `require` would load the mjs file.
This PR adds wraps the mjs file in a virtual ES module to allow
`require`ing it.
###
[`v3.80.2`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#3802)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.80.2)
##### Patch Changes
-
[#​6923](https://redirect.github.com/cloudflare/workers-sdk/pull/6923)
[`1320f20`](https://redirect.github.com/cloudflare/workers-sdk/commit/1320f20b38d7b4623fe21d38118bdc9fb8514a99)
Thanks [@​andyjessop](https://redirect.github.com/andyjessop)! -
chore: adds eslint-disable for ESLint error on empty typescript
interface in workers-configuration.d.ts
###
[`v3.80.1`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#3801)
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/[email protected]@3.80.1)
##### Patch Changes
-
[#​6908](https://redirect.github.com/cloudflare/workers-sdk/pull/6908)
[`d696850`](https://redirect.github.com/cloudflare/workers-sdk/commit/d6968507b7eab36abdc4d6c2ffe183788857d08c)
Thanks [@​penalosa](https://redirect.github.com/penalosa)! - fix:
debounce restarting worker on assets dir file changes when `--x-dev-env`
is enabled.
-
[#​6902](https://redirect.github.com/cloudflare/workers-sdk/pull/6902)
[`dc92af2`](https://redirect.github.com/cloudflare/workers-sdk/commit/dc92af28c572e3f7a03b84afd53f10a40ee2a5f8)
Thanks
[@​threepointone](https://redirect.github.com/threepointone)! -
fix: enable esbuild's keepNames: true to set .name on functions/classes
-
[#​6909](https://redirect.github.com/cloudflare/workers-sdk/pull/6909)
[`82180a7`](https://redirect.github.com/cloudflare/workers-sdk/commit/82180a7a7680028f2ea24ae8b1c8479d39627826)
Thanks [@​penalosa](https://redirect.github.com/penalosa)! - fix:
Various fixes for logging in `--x-dev-env`, primarily to ensure the
hotkeys don't wipe useful output and are cleaned up correctly
-
[#​6903](https://redirect.github.com/cloudflare/workers-sdk/pull/6903)
[`54924a4`](https://redirect.github.com/cloudflare/workers-sdk/commit/54924a430354c0e427770ee4289217660141c72e)
Thanks
[@​petebacondarwin](https://redirect.github.com/petebacondarwin)!
- fix: ensure that `alias` config gets passed through to the bundler
when using new `--x-dev-env`
Fixes
[#​6898](https://redirect.github.com/cloudflare/workers-sdk/issues/6898)
-
[#​6911](https://redirect.github.com/cloudflare/workers-sdk/pull/6911)
[`30b7328`](https://redirect.github.com/cloudflare/workers-sdk/commit/30b7328073c86ff9adebd594015bca6844da7163)
Thanks [@​emily-shen](https://redirect.github.com/emily-shen)! -
fix: infer experimentalJsonConfig from file extension
Fixes
[#​5768](https://redirect.github.com/cloudflare/workers-sdk/issues/5768)
- issue with vitest and Pages projects with wrangler.toml
- Updated dependencies
\[[`5c50949`](https://redirect.github.com/cloudflare/workers-sdk/commit/5c509494807a1c0418be83c47a459ec80126848e)]:
- [email protected]
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* [`pylint`] - restrict `iteration-over-set` to only work on sets of literals (`PLC0208`) (#13731)
* [red-knot] Consistently rename BoolLiteral => BooleanLiteral (#13856)
## Summary
- Consistent naming: `BoolLiteral` => `BooleanLiteral` (it's mainly the
`Ty::BoolLiteral` variant that was renamed)
I tripped over this a few times now, so I thought I'll smooth it out.
- Add a new test case for `Literal[True] <: bool`, as suggested here:
https://github.com/astral-sh/ruff/pull/13781#discussion_r1804922827
* [red-knot] handle unions on the LHS of is_subtype_of (#13857)
## Summary
Just a drive-by change that occurred to me while I was looking at
`Type::is_subtype_of`: the existing pattern for unions on the *right
hand side*:
```rs
(ty, Type::Union(union)) => union
.elements(db)
.iter()
.any(|&elem_ty| ty.is_subtype_of(db, elem_ty)),
```
is not (generally) correct if the *left hand side* is a union.
## Test Plan
Added new test cases for `is_subtype_of` and `!is_subtype_of`
* Speed up mdtests (#13832)
Co-authored-by: Alex Waygood <[email protected]>
* formatter: Introduce `QuoteMetadata` (#13858)
* [red-knot] Improve chained comparisons handling (#13825)
## Summary
A small fix for comparisons of multiple comparators.
Instead of comparing each comparator to the leftmost item, we should
compare it to the closest item on the left.
While implementing this, I noticed that we don’t yet narrow Yoda
comparisons (e.g., `True is x`), so I didn’t change that behavior in
this PR.
## Test Plan
Added some mdtests 🎉
* Speedup mdtest parser (#13835)
* Update cloudflare/wrangler-action action to v3.9.0 (#13846)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* [red-knot] Support for not-equal narrowing (#13749)
Add type narrowing for `!=` expression as stated in
#13694.
### Test Plan
Add tests in new md format.
---------
Co-authored-by: David Peter <[email protected]>
* [red-knot] Report line numbers in mdtest relative to the markdown file, not the test snippet (#13804)
Co-authored-by: Alex Waygood <[email protected]>
Co-authored-by: Micha Reiser <[email protected]>
Co-authored-by: Carl Meyer <[email protected]>
* [red-knot] is_subtype_of: treat literals as subtype of 'object' (#13876)
Add the following subtype relations:
- `BooleanLiteral <: object`
- `IntLiteral <: object`
- `StringLiteral <: object`
- `LiteralString <: object`
- `BytesLiteral <: object`
Added a test case for `bool <: int`.
## Test Plan
New unit tests.
* ci(docker): incorporate docker release enhancements from uv (#13274)
## Summary
This PR updates `ruff` to match `uv` updated [docker releases
approach](https://github.com/astral-sh/uv/blob/main/.github/workflows/build-docker.yml).
It's a combined PR with changes from these PR's
* https://github.com/astral-sh/uv/pull/6053
* https://github.com/astral-sh/uv/pull/6556
* https://github.com/astral-sh/uv/pull/6734
* https://github.com/astral-sh/uv/pull/7568
Summary of changes / features
1. This change would publish an additional tags that includes only
`major.minor`.
For a release with `x.y.z`, this would publish the tags:
* ghcr.io/astral-sh/ruff:latest
* ghcr.io/astral-sh/ruff:x.y.z
* ghcr.io/astral-sh/ruff:x.y
2. Parallelizes multi-platform builds using multiple workers (hence the
new docker-build / docker-publish jobs), which cuts docker releases time
in half.
3. This PR introduces additional images with the ruff binaries from
scratch for both amd64/arm64 and makes the mapping easy to configure by
generating the Dockerfile on the fly. This approach focuses on
minimizing CI time by taking advantage of dedicating a worker per
mapping (20-30s~ per job). For example, on release `x.y.z`, this will
publish the following image tags with format
`ghcr.io/astral-sh/ruff:{tag}` with manifests for both amd64/arm64. This
also include `x.y` tags for each respective additional tag. Note, this
version does not include the python based images, unlike `uv`.
* From **scratch**: `latest`, `x.y.z`, `x.y` (currently being published)
* From **alpine:3.20**: `alpine`, `alpine3.20`, `x.y.z-alpine`,
`x.y.z-alpine3.20`
* From **debian:bookworm-slim**: `debian-slim`, `bookworm-slim`,
`x.y.z-debian-slim`, `x.y.z-bookworm-slim`
* From **buildpack-deps:bookworm**: `debian`, `bookworm`,
`x.y.z-debian`, `x.y.z-bookworm`
4. This PR also fixes `org.opencontainers.image.version` for all tags
(including the one from `scratch`) to contain the right release version
instead of branch name `main` (current behavior).
```
> docker inspect ghcr.io/astral-sh/ruff:0.6.4 | jq -r
'.[0].Config.Labels'
{
...
"org.opencontainers.image.version": "main"
}
```
Closes https://github.com/astral-sh/ruff/issues/13481
## Test Plan
Approach mimics `uv` with almost no changes so risk is low but I still
tested the full workflow.
* I have a working CI release pipeline on my fork run
https://github.com/samypr100/ruff/actions/runs/10966657733
* The resulting images were published to
https://github.com/samypr100/ruff/pkgs/container/ruff
* Fix `D204`'s documentation to correctly mention the conventions when it is enabled (#13867)
* [red-knot] Treat empty intersection as 'object', fix intersection simplification (#13880)
## Summary
- Properly treat the empty intersection as being of type `object`.
- Consequently, change the simplification method to explicitly add
`Never` to the positive side of the intersection when collapsing a type
such as `int & str` to `Never`, as opposed to just clearing both the
positive and the negative side.
- Minor code improvement in `bindings_ty`: use `peekable()` to check
whether the iterator over constraints is empty, instead of handling
first and subsequent elements separately.
fixes #13870
## Test Plan
- New unit tests for `IntersectionBuilder` to make sure the empty
intersection represents `object`.
- Markdown-based regression test for the original issue in #13870
* [red-knot] rename {Class,Module,Function} => {Class,Module,Function}Literal (#13873)
## Summary
* Rename `Type::Class` => `Type::ClassLiteral`
* Rename `Type::Function` => `Type::FunctionLiteral`
* Do not rename `Type::Module`
* Remove `*Literal` suffixes in `display::LiteralTypeKind` variants, as
per clippy suggestion
* Get rid of `Type::is_class()` in favor of `is_subtype_of(…, 'type')`;
modifiy `is_subtype_of` to support this.
* Add new `Type::is_xyz()` methods and use them instead of matching on
`Type` variants.
closes #13863
## Test Plan
New `is_subtype_of_class_literals` unit test.
---------
Co-authored-by: Alex Waygood <[email protected]>
* Alternate quotes for strings inside f-strings in preview (#13860)
* [red-knot] Use track_caller for expect_ methods (#13884)
## Summary
A minor quality-of-life improvement: add
[`#[track_caller]`](https://doc.rust-lang.org/reference/attributes/codegen.html#the-track_caller-attribute)
attribute to `Type::expect_xyz()` methods and some `TypeInference` methods such that the panic-location
is reported one level higher up in the stack trace.
before: reports location inside the `Type::expect_class_literal()`
method. Not very useful.
```
thread 'types::infer::tests::deferred_annotation_builtin' panicked at crates/red_knot_python_semantic/src/types.rs:304:14:
Expected a Type::ClassLiteral variant
```
after: reports location at the `Type::expect_class_literal()` call site,
where the error was made.
```
thread 'types::infer::tests::deferred_annotation_builtin' panicked at crates/red_knot_python_semantic/src/types/infer.rs:4302:14:
Expected a Type::ClassLiteral variant
```
## Test Plan
Called `expect_class_literal()` on something that's not a
`Type::ClassLiteral` and saw that the error was reported at the call
site.
* [`flake8-type-checking`] Support auto-quoting when annotations contain quotes (#11811)
## Summary
This PR updates the fix generation logic for auto-quoting an annotation
to generate an edit even when there's a quote character present.
The logic uses the visitor pattern, maintaining it's state on where it
is and generating the string value one node at a time. This can be
considered as a specialized form of `Generator`. The state required to
maintain is whether we're currently inside a `typing.Literal` or
`typing.Annotated` because the string value in those types should not be
un-quoted i.e., `Generic[Literal["int"]]` should become
`"Generic[Literal['int']]`, the quotes inside the `Literal` should be
preserved.
Fixes: https://github.com/astral-sh/ruff/issues/9137
## Test Plan
Add various test cases to validate this change, validate the snapshots.
There are no ecosystem changes to go through.
---------
Signed-off-by: Shaygan <[email protected]>
Co-authored-by: Dhruv Manilawala <[email protected]>
* Fix stale syntax errors in playground (#13888)
* Fix E221 and E222 to flag missing or extra whitespace around `==` operator (#13890)
* [red-knot] Type narrowing for `isinstance` checks (#13894)
## Summary
Add type narrowing for `isinstance(object, classinfo)` [1] checks:
```py
x = 1 if flag else "a"
if isinstance(x, int):
reveal_type(x) # revealed: Literal[1]
```
closes #13893
[1] https://docs.python.org/3/library/functions.html#isinstance
## Test Plan
New Markdown-based tests in `narrow/isinstance.md`.
---------
Co-authored-by: Alex Waygood <[email protected]>
* Remove "default" remark from `ruff check` (#13900)
## Summary
`ruff check` has not been the default in a long time. However, the help
message and code comment still designate it as the default. The remark
should have been removed in the deprecation PR #10169.
## Test Plan
Not tested.
* Use referencial equality in `traversal` helper methods (#13895)
* Join implicit concatenated strings when they fit on a line (#13663)
* [red-knot] Infer subscript expression types for bytes literals (#13901)
## Summary
Infer subscript expression types for bytes literals:
```py
b = b"\x00abc\xff"
reveal_type(b[0]) # revealed: Literal[b"\x00"]
reveal_type(b[1]) # revealed: Literal[b"a"]
reveal_type(b[-1]) # revealed: Literal[b"\xff"]
reveal_type(b[-2]) # revealed: Literal[b"c"]
reveal_type(b[False]) # revealed: Literal[b"\x00"]
reveal_type(b[True]) # revealed: Literal[b"a"]
```
part of #13689
(https://github.com/astral-sh/ruff/issues/13689#issuecomment-2404285064)
## Test Plan
- New Markdown-based tests (see `mdtest/subscript/bytes.md`)
- Added missing test for `string_literal[bool_literal]`
* [red-knot] Format mdtest Python snippets more concisely (#13905)
* Fix preview style name in `can_omit_parentheses` to is_f_string_formatting_enabled (#13907)
* Fix `normalize` arguments when `fstring_formatting` is disabled (#13910)
* Bump version to 0.7.1 (#13913)
* Enable nursery rules: 'redundant_clone', 'debug_assert_with_mut_call', and 'unused_peekable' (#13920)
* [red-knot] knot benchmark: fix `--knot-path` arg (#13923)
## Summary
Previously, this would fail with
```
AttributeError: 'str' object has no attribute 'is_file'
```
if I tried to use the `--knot-path` option. I wish we had a type checker
for Python*.
## Test Plan
```sh
uv run benchmark --knot-path ~/.cargo-target/release/red_knot
```
\* to be fair, this would probably require special handling for
`argparse` in the typechecker.
* [red-knot] Infer `Todo`, not `Unknown`, for PEP-604 unions in annotations (#13908)
* [red-knot] Remove lint-phase (#13922)
Co-authored-by: Alex Waygood <[email protected]>
* Docs: Add GitLab CI/CD to integrations. (#13915)
* [red-knot] Type narrow in else clause (#13918)
## Summary
Add support for type narrowing in elif and else scopes as part of
#13694.
## Test Plan
- mdtest
- builder unit test for union negation.
---------
Co-authored-by: Carl Meyer <[email protected]>
---------
Signed-off-by: Shaygan <[email protected]>
Co-authored-by: Carl Meyer <[email protected]>
Co-authored-by: Alex Waygood <[email protected]>
Co-authored-by: cake-monotone <[email protected]>
Co-authored-by: Neil Mitchell <[email protected]>
Co-authored-by: Shaygan Hooshyari <[email protected]>
Co-authored-by: Micha Reiser <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Aditya Pratap Singh <[email protected]>
Co-authored-by: Steve C <[email protected]>
Co-authored-by: David Peter <[email protected]>
Co-authored-by: TomerBin <[email protected]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: David Peter <[email protected]>
Co-authored-by: aditya pillai <[email protected]>
Co-authored-by: Carl Meyer <[email protected]>
Co-authored-by: samypr100 <[email protected]>
Co-authored-by: Dhruv Manilawala <[email protected]>
Co-authored-by: Mihai Capotă <[email protected]>
Co-authored-by: Jonas Vacek <[email protected]>1 parent 2fe96ad commit 9f81f57
File tree
266 files changed
+9752
-2464
lines changed- .github/workflows
- crates
- red_knot_python_semantic
- resources/mdtest
- assignment
- binary
- call
- comparison
- conditional
- declaration
- exception
- expression
- import
- literal
- loops
- narrow
- scopes
- shadowing
- stubs
- subscript
- unary
- src
- module_resolver
- semantic_index
- types
- util
- tests
- red_knot_server/src/server/api/notifications
- red_knot_test
- src
- red_knot_vendored
- src
- red_knot_wasm/src
- red_knot_workspace/src
- red_knot/src
- ruff_benchmark
- benches
- src
- ruff_db/src/system
- ruff_dev/src
- ruff_formatter/src
- ruff_graph
- src
- ruff_linter
- resources/test/fixtures
- flake8_type_checking
- pycodestyle
- pylint
- src
- checkers/ast
- rules
- eradicate
- rules
- fastapi/rules
- flake8_bandit
- rules
- flake8_bugbear/rules
- flake8_copyright
- flake8_logging_format/rules
- flake8_pyi/rules
- flake8_pytest_style/rules
- flake8_simplify/rules
- flake8_todos/rules
- flake8_type_checking
- rules
- snapshots
- pycodestyle
- rules
- logical_lines
- snapshots
- pydocstyle/rules
- pyflakes/rules
- pygrep_hooks/rules
- pylint/rules
- pyupgrade
- rules
- refurb/rules
- ruff/rules
- tryceratops/rules
- settings
- ruff_macros/src
- ruff_notebook
- src
- ruff_python_ast
- src
- ruff_python_codegen
- src
- ruff_python_formatter
- resources/test/fixtures/ruff/expression
- src
- comments
- expression
- other
- pattern
- statement
- string
- tests
- snapshots
- ruff_python_semantic/src
- analyze
- ruff_python_trivia/src
- ruff_server/tests
- ruff_source_file
- src
- ruff_wasm
- ruff_workspace
- src
- ruff
- src
- docs
- playground
- api
- src/Editor
- python/ruff-ecosystem
- scripts
- benchmarks
- knot_benchmark/src/benchmark
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
266 files changed
+9752
-2464
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
20 | 23 | | |
21 | | - | |
22 | | - | |
| 24 | + | |
| 25 | + | |
23 | 26 | | |
24 | 27 | | |
25 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
26 | 35 | | |
27 | 36 | | |
28 | 37 | | |
| |||
36 | 45 | | |
37 | 46 | | |
38 | 47 | | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | 48 | | |
46 | 49 | | |
47 | 50 | | |
| |||
55 | 58 | | |
56 | 59 | | |
57 | 60 | | |
58 | | - | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
59 | 227 | | |
60 | 228 | | |
61 | 229 | | |
62 | 230 | | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
68 | 236 | | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
| 50 | + | |
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
| 25 | + | |
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
49 | | - | |
| 49 | + | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
72 | | - | |
| 72 | + | |
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
3 | 16 | | |
4 | 17 | | |
5 | 18 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
3 | 28 | | |
4 | 29 | | |
5 | 30 | | |
| |||
0 commit comments