Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* [red-knot] binary arithmetic on instances (#13800) Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> * [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/python-dev@python.org/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 <carl@astral.sh> * [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 <carl@astral.sh> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> * 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 <micha@reiser.io> * [red-knot] Cleanup generated names of mdtest tests (#13831) Co-authored-by: Alex Waygood <alex.waygood@gmail.com> Co-authored-by: Micha Reiser <micha@reiser.io> * 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` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/tomli_w/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/tomli_w/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/tomli_w/1.0.0/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/tomli_w/1.0.0/1.1.0?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@cloudflare%2fworkers-types/4.20241018.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@cloudflare%2fworkers-types/4.20241018.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@cloudflare%2fworkers-types/4.20241004.0/4.20241018.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@cloudflare%2fworkers-types/4.20241004.0/4.20241018.0?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact-dom/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact-dom/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact-dom/18.3.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact-dom/18.3.0/18.3.1?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/8.8.0/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/8.8.0/8.10.0?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.8.0/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.8.0/8.10.0?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-react-hooks/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-plugin-react-hooks/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-plugin-react-hooks/4.6.2/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-react-hooks/4.6.2/5.0.0?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/miniflare/3.20241011.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/miniflare/3.20241011.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/miniflare/3.20240925.0/3.20241011.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/miniflare/3.20240925.0/3.20241011.0?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/3.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/3.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/3.4.13/3.4.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/3.4.13/3.4.14?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.6.2/5.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.6.2/5.6.3?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/5.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/5.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/5.4.8/5.4.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/5.4.8/5.4.9?slim=true)](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) | [![age](https://developer.mend.io/api/mc/badges/age/npm/wrangler/3.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/wrangler/3.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/wrangler/3.80.0/3.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/wrangler/3.80.0/3.81.0?slim=true)](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/miniflare@3.20241004.0...miniflare@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/miniflare@3.20240925.1...miniflare@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/miniflare@3.20240925.0...miniflare@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/wrangler@3.80.5...wrangler@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/wrangler@3.80.4...wrangler@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)]: - miniflare@3.20241011.0 ### [`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/wrangler@3.80.3...wrangler@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)]: - miniflare@3.20241004.0 - [@​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/wrangler@3.80.2...wrangler@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/wrangler@3.80.1...wrangler@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/wrangler@3.80.0...wrangler@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)]: - miniflare@3.20240925.1 </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 <Alex.Waygood@Gmail.com> * 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 <mail@david-peter.de> * [red-knot] Report line numbers in mdtest relative to the markdown file, not the test snippet (#13804) Co-authored-by: Alex Waygood <alex.waygood@gmail.com> Co-authored-by: Micha Reiser <micha@reiser.io> Co-authored-by: Carl Meyer <carl@oddbird.net> * [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 <Alex.Waygood@Gmail.com> * 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 <hey@glyphack.com> Co-authored-by: Dhruv Manilawala <dhruvmanila@gmail.com> * 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 <Alex.Waygood@Gmail.com> * 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 <Alex.Waygood@Gmail.com> * 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 <carl@astral.sh> --------- Signed-off-by: Shaygan <hey@glyphack.com> Co-authored-by: Carl Meyer <carl@astral.sh> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> Co-authored-by: cake-monotone <cake.monotone@gmail.com> Co-authored-by: Neil Mitchell <ndmitchell@gmail.com> Co-authored-by: Shaygan Hooshyari <sh.hooshyari@gmail.com> Co-authored-by: Micha Reiser <micha@reiser.io> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Aditya Pratap Singh <adityapratapsjnhh7654@gmail.com> Co-authored-by: Steve C <diceroll123@gmail.com> Co-authored-by: David Peter <sharkdp@users.noreply.github.com> Co-authored-by: TomerBin <tomerbin98@gmail.com> Co-authored-by: Alex <83035922+Lexxxzy@users.noreply.github.com> Co-authored-by: David Peter <mail@david-peter.de> Co-authored-by: aditya pillai <29032680+pilleye@users.noreply.github.com> Co-authored-by: Carl Meyer <carl@oddbird.net> Co-authored-by: samypr100 <3933065+samypr100@users.noreply.github.com> Co-authored-by: Dhruv Manilawala <dhruvmanila@gmail.com> Co-authored-by: Mihai Capotă <mihai@mihaic.ro> Co-authored-by: Jonas Vacek <jvacek@users.noreply.github.com>
- Loading branch information