Add support for auto-fix in Jupyter notebooks#4665
Add support for auto-fix in Jupyter notebooks#4665dhruvmanila merged 37 commits intoastral-sh:mainfrom
Conversation
PR Check ResultsEcosystem✅ ecosystem check detected no changes. BenchmarkLinuxWindows |
konstin
left a comment
There was a problem hiding this comment.
looks good so far, i'll give it a more nit-picky review once it's not a draft anymore
crates/ruff/src/jupyter/index.rs
Outdated
| } | ||
| } | ||
|
|
||
| impl JupyterIndexBuilder { |
There was a problem hiding this comment.
Could we do without the separate builder here?
There was a problem hiding this comment.
The reason to have a builder is to have both the index and cell offsets built in a single loop with each individual cell.
Cell offsets are built from the source code only for the first time. They cannot be refreshed using the transformed source code but require to process each individual edit to update the offsets.
When a single auto-fix iteration ends, the index is refreshed from the transformed source code, source code is updated in each cell and cell offsets are updated from the edits (order is important).
1f234d9 to
28f09de
Compare
crates/ruff/src/jupyter/notebook.rs
Outdated
| .unwrap_or_else(|| panic!("cell content out of bounds: {:?}", &self.raw.cells[pos])) | ||
| .trim_end_matches(|c| c == '\r' || c == '\n') | ||
| .to_string(); | ||
| self.raw.cells[pos].source = SourceValue::String(cell_content); |
There was a problem hiding this comment.
The reason to choose String over StringArray is that the latter should contain the newline as part of each element which means that str.lines would not work and we would either need a custom iterator with strings including the newline character or add newlines to each element individually.
bf72009 to
7483383
Compare
crates/ruff/src/jupyter/index.rs
Outdated
| pub(super) inner: Arc<JupyterIndexInner>, | ||
| } | ||
|
|
||
| impl JupyterIndex { |
There was a problem hiding this comment.
Maybe: Create newtype wrappers for Cell and Row (or use OneIndexed?) Newtype wrappers can encode the information that cell returns a Cell and prevents users from mixing cell with rows.
There was a problem hiding this comment.
Newtype wrappers makes sense but let me see if OneIndexed works better.
There was a problem hiding this comment.
Actually, I'm not sure if Newtype wrappers would be correct as the cell and row numbers are generated internally and it's only returned via the public interface. It's used directly when emitting the diagnostic message and it won't have any context about these newtypes.
There was a problem hiding this comment.
Not sure if I understand fully, but I trust your judgment. My main intention of introducing them would be to make it harder to mix up the two.
crates/ruff/src/autofix/mod.rs
Outdated
| /// The set of [`Edit`] that were applied. | ||
| pub(crate) edits: BTreeSet<&'a Edit>, |
There was a problem hiding this comment.
Would it instead be possible to return a SourceMap that maps source positions to target positions in the FixResult. I would prefer that because it has a more narrow API and allows better re-use if we have other mapped types (e.g. python code in markdown files)
There was a problem hiding this comment.
I would support this -- could you describe in a bit more detail how it would work?
There was a problem hiding this comment.
I think it would roughly do the same as update_cell_offsets does today:
The source map is defined as a Vec<SourceMapMarker> where each marker stores the source to destination position:
- Insertion:
- One marker at the start:
insertion_offset->output.text_len() - One marker at the end:
insertion_offset->output.text_len()
- One marker at the start:
- Deletion:
- One marker at the start:
deletion_start->output.text_len() - One marker at the end:
deletion_end->output.text_len()
- One marker at the start:
- Replacement:
- One marker at the start:
replacement_start->output.text_len() - One marker at the end:
replacement_end->output.text_len()
- One marker at the start:
The entries are guaranteed to be sorted (at least per "apply fixes" iteration). We can now search the start and end of each cell (or use an iterator and make use of the sorted property to avoid cell count binary searches):
- cell start: Find the last source map entry that is smaller or equal to the cell start. The output position of the start is:
marker.dest + cell.start - marker.sourceI think we need to use the first entry if multiple source marker start RIGHT at the start of the cell. - cell end: Find the last source map entry that ends before or at
cel.end. You can map the end as:marker.dest + marker.source - cell.end
There are probably some corner cases that I didn't consider.
One downside of this is that returning the BTreeMap is free because we build it anyway whereas building the source map has the cost of writing the source mark entries for each edit.
crates/ruff/src/jupyter/notebook.rs
Outdated
| .collect(), | ||
| }; | ||
| // Ignore a cell if it contains a magic command. There could be valid | ||
| // Python code as well, but we'll ignore that for now. |
There was a problem hiding this comment.
it's fine for this PR, but i believe we do need to keep the python code or we'll see some undefined symbol false positives because they were defined in cell that starts with a % line
There was a problem hiding this comment.
Yes, we'll have to roll out our own magic transformer :)
|
My main suggestion for resolving (1), at least for import sorting (which, I think, is the only edit that spans multiple statements in this way), is to find a way to make the import sys
import os
# isort: split
import abc
import collectionsIn this case, the first two imports will be treated as an import block, and the second two imports will be treated as an independent import block. Conceptually, this is identical (?) to the splits we want to enforce between cells. I'd suggest finding a way to feed those splits into the |
(There's no reply section for this comment, so putting it out here) I'm not sure what do you mean by "source code comment". Do you want me to comment the reason for the
Same as above.
Yes, I wanted to wait for the initial feedback incase there were some changes although I've already started writing some basic test cases. |
fyi GitHub does weird things with threaded conversations — the threads are up higher at #4665 (comment) / #4665 (comment) |
afe9a2e to
b10e940
Compare
Updates since last review
|
charliermarsh
left a comment
There was a problem hiding this comment.
This is really excellent work.
| break; | ||
| } | ||
| } | ||
| } |
| pub enum SourceKind { | ||
| Python(String), | ||
| Jupyter(Notebook), | ||
| } |
| /// | ||
| /// The index is built only once when required. This is only used to | ||
| /// report diagnostics, so by that time all of the autofixes must have | ||
| /// been applied if `--fix` was passed. |
There was a problem hiding this comment.
I'm loving all the documentation you're adding as you go. This is a very, very good habit. Props.
konstin
left a comment
There was a problem hiding this comment.
Is there any integration test that shows a jupyter notebook before and after being fixed?
| } | ||
| // Ignore a cell if it contains a magic command. There could be valid | ||
| // Python code as well, but we'll ignore that for now. | ||
| // TODO(dhruvmanila): https://github.com/psf/black/blob/main/src/black/handle_ipynb_magics.py |
There was a problem hiding this comment.
my concern before setting this to on by default would be that this causes a bunch of undefined symbols when the symbols do exist. but i'd say let's merge this and check with notebooks from github whether this is even actually a problem.
find . -name "*.ipynb" | wc -l in the ecosystem checkouts says 7639, so we have more than enough notebooks to check
There was a problem hiding this comment.
Yes, I do think this will be a problem, I've looked at how black handles it. I'll open an issue detailing out what needs to happen and we can then implement it.
b08c7c2 to
be2f295
Compare
Currently, I've tested it out on the repositories mentioned in the PR description. I'm trying to think how to have E2E testing here as just the snapshots might not be enough. I'll run it on the ecosystem notebooks. |
|
i was thinking about a notebook where we have before fixing and after fixing both in git and check that the fixed version looks like the one we have stored |
|
Right, so do you mean to compare the 2 JSON objects? They both will be available in source control. I think we should rather compare the source code content as the JSON will not be identical:
So, 2 notebooks where one is the original content and the other what we expect Ruff to transform into.
|
## Summary
Add roundtrip support for Jupyter notebook.
1. Read the notebook
2. Extract out the source code content
3. Use it to update the notebook itself (should be exactly the same [^1])
4. Serialize into JSON and print it to stdout
## Test Plan
`cargo run --all-features --bin ruff_dev --package ruff_dev --
round-trip <path/to/notebook.ipynb>`
<details><summary>Example output:</summary>
<p>
```
{
"cells": [
{
"cell_type": "markdown",
"id": "f3c286e9-fa52-4440-816f-4449232f199a",
"metadata": {},
"source": [
"# Ruff Test"
]
},
{
"cell_type": "markdown",
"id": "a2b7bc6c-778a-4b07-86ae-dde5a2d9511e",
"metadata": {},
"source": [
"Markdown block before the first import"
]
},
{
"cell_type": "code",
"id": "5e3ef98e-224c-450a-80e6-be442ad50907",
"metadata": {
"tags": []
},
"source": "",
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"id": "6bced3f8-e0a4-450c-ae7c-f60ad5671ee9",
"metadata": {},
"source": "import contextlib\n\nwith contextlib.suppress(ValueError):\n print()\n",
"outputs": []
},
{
"cell_type": "code",
"id": "d7102cfd-5bb5-4f5b-a3b8-07a7b8cca34c",
"metadata": {},
"source": "import random\n\nrandom.randint(10, 20)",
"outputs": []
},
{
"cell_type": "code",
"id": "88471d1c-7429-4967-898f-b0088fcb4c53",
"metadata": {},
"source": "foo = 1\nif foo < 2:\n msg = f\"Invalid foo: {foo}\"\n raise ValueError(msg)",
"outputs": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (ruff-playground)",
"name": "ruff-playground",
"language": "python"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"version": "3.11.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
```
</p>
</details>
[^1]: The type in JSON might be different (#4665 (comment))
Part of #1218
## Summary Add support for applying auto-fixes in Jupyter Notebook. ### Solution Cell offsets are the boundaries for each cell in the concatenated source code. They are represented using `TextSize`. It includes the start and end offset as well, thus creating a range for each cell. These offsets are updated using the `SourceMap` markers. ### SourceMap `SourceMap` contains markers constructed from each edits which tracks the original source code position to the transformed positions. The following drawing might make it clear:  The center column where the dotted lines are present are the markers included in the `SourceMap`. The `Notebook` looks at these markers and updates the cell offsets after each linter loop. If you notice closely, the destination takes into account all of the markers before it. The index is constructed only when required as it's only used to render the diagnostics. So, a `OnceCell` is used for this purpose. The cell offsets, cell content and the index will be updated after each iteration of linting in the mentioned order. The order is important here as the content is updated as per the new offsets and index is updated as per the new content. ## Limitations ### 1 Styling rules such as the ones in `pycodestyle` will not be applicable everywhere in Jupyter notebook, especially at the cell boundaries. Let's take an example where a rule suggests to have 2 blank lines before a function and the cells contains the following code: ```python import something # --- def first(): pass def second(): pass ``` (Again, the comment is only to visualize cell boundaries.) In the concatenated source code, the 2 blank lines will be added but it shouldn't actually be added when we look in terms of Jupyter notebook. It's as if the function `first` is at the start of a file. `nbqa` solves this by recording newlines before and after running `autopep8`, then running the tool and restoring the newlines at the end (refer nbQA-dev/nbQA#807). ## Test Plan Three commands were run in order with common flags (`--select=ALL --no-cache --isolated`) to isolate which stage the problem is occurring: 1. Only diagnostics 2. Fix with diff (`--fix --diff`) 3. Fix (`--fix`) ### https://github.com/facebookresearch/segment-anything ``` ------------------------------------------------------------------------------- Jupyter Notebooks 3 0 0 0 0 |- Markdown 3 98 0 94 4 |- Python 3 513 468 4 41 (Total) 611 468 98 45 ------------------------------------------------------------------------------- ``` ```console $ cargo run --all-features --bin ruff -- check --no-cache --isolated --select=ALL /path/to/segment-anything/**/*.ipynb --fix ... Found 180 errors (89 fixed, 91 remaining). ``` ### https://github.com/openai/openai-cookbook ``` ------------------------------------------------------------------------------- Jupyter Notebooks 65 0 0 0 0 |- Markdown 64 3475 12 2507 956 |- Python 65 9700 7362 1101 1237 (Total) 13175 7374 3608 2193 =============================================================================== ``` ```console $ cargo run --all-features --bin ruff -- check --no-cache --isolated --select=ALL /path/to/openai-cookbook/**/*.ipynb --fix error: Failed to parse /path/to/openai-cookbook/examples/vector_databases/Using_vector_databases_for_embeddings_search.ipynb:cell 4:29:18: unexpected token '-' ... Found 4227 errors (2165 fixed, 2062 remaining). ``` ### https://github.com/tensorflow/docs ``` ------------------------------------------------------------------------------- Jupyter Notebooks 150 0 0 0 0 |- Markdown 1 55 0 46 9 |- Python 1 402 289 60 53 (Total) 457 289 106 62 ------------------------------------------------------------------------------- ``` ```console $ cargo run --all-features --bin ruff -- check --no-cache --isolated --select=ALL /path/to/tensorflow-docs/**/*.ipynb --fix error: Failed to parse /path/to/tensorflow-docs/site/en/guide/extension_type.ipynb:cell 80:1:1: unexpected token Indent error: Failed to parse /path/to/tensorflow-docs/site/en/r1/tutorials/eager/custom_layers.ipynb:cell 20:1:1: unexpected token Indent error: Failed to parse /path/to/tensorflow-docs/site/en/guide/data.ipynb:cell 175:5:14: unindent does not match any outer indentation level error: Failed to parse /path/to/tensorflow-docs/site/en/r1/tutorials/representation/unicode.ipynb:cell 30:1:1: unexpected token Indent ... Found 12726 errors (5140 fixed, 7586 remaining). ``` ### https://github.com/tensorflow/models ``` ------------------------------------------------------------------------------- Jupyter Notebooks 46 0 0 0 0 |- Markdown 1 11 0 6 5 |- Python 1 328 249 19 60 (Total) 339 249 25 65 ------------------------------------------------------------------------------- ``` ```console $ cargo run --all-features --bin ruff -- check --no-cache --isolated --select=ALL /path/to/tensorflow-models/**/*.ipynb --fix ... Found 4856 errors (2690 fixed, 2166 remaining). ``` resolves: #1218 fixes: #4556
## Summary
Add roundtrip support for Jupyter notebook.
1. Read the notebook
2. Extract out the source code content
3. Use it to update the notebook itself (should be exactly the same [^1])
4. Serialize into JSON and print it to stdout
## Test Plan
`cargo run --all-features --bin ruff_dev --package ruff_dev --
round-trip <path/to/notebook.ipynb>`
<details><summary>Example output:</summary>
<p>
```
{
"cells": [
{
"cell_type": "markdown",
"id": "f3c286e9-fa52-4440-816f-4449232f199a",
"metadata": {},
"source": [
"# Ruff Test"
]
},
{
"cell_type": "markdown",
"id": "a2b7bc6c-778a-4b07-86ae-dde5a2d9511e",
"metadata": {},
"source": [
"Markdown block before the first import"
]
},
{
"cell_type": "code",
"id": "5e3ef98e-224c-450a-80e6-be442ad50907",
"metadata": {
"tags": []
},
"source": "",
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"id": "6bced3f8-e0a4-450c-ae7c-f60ad5671ee9",
"metadata": {},
"source": "import contextlib\n\nwith contextlib.suppress(ValueError):\n print()\n",
"outputs": []
},
{
"cell_type": "code",
"id": "d7102cfd-5bb5-4f5b-a3b8-07a7b8cca34c",
"metadata": {},
"source": "import random\n\nrandom.randint(10, 20)",
"outputs": []
},
{
"cell_type": "code",
"id": "88471d1c-7429-4967-898f-b0088fcb4c53",
"metadata": {},
"source": "foo = 1\nif foo < 2:\n msg = f\"Invalid foo: {foo}\"\n raise ValueError(msg)",
"outputs": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (ruff-playground)",
"name": "ruff-playground",
"language": "python"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"version": "3.11.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
```
</p>
</details>
[^1]: The type in JSON might be different (#4665 (comment))
Part of #1218
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://beta.ruff.rs/docs) ([source](https://togithub.com/astral-sh/ruff), [changelog](https://togithub.com/astral-sh/ruff/releases)) | `^0.0.272` -> `^0.0.273` | [](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>astral-sh/ruff</summary> ### [`v0.0.273`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.273) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.272...v0.0.273) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed Highlights include: - Autofix capabilities for rules like `flake8-import-conventions`, which require symbol renames across a file. - Significant decrease in Ruff's cache size (e.g., a ~50% decrease for FastAPI). - Dozens and dozens of bug fixes + performance improvements. ##### Rules - \[`copyright`] Implement copyright notice detection by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/astral-sh/ruff/pull/4701](https://togithub.com/astral-sh/ruff/pull/4701) - \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5100](https://togithub.com/astral-sh/ruff/pull/5100) - \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by [@​tkukushkin](https://togithub.com/tkukushkin) in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - \[`flake8-import-conventions`] Enable autofix for unconventional imports rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5152](https://togithub.com/astral-sh/ruff/pull/5152) - \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using reference tracking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5074](https://togithub.com/astral-sh/ruff/pull/5074) - \[`flake8-pyi`] Implement PYI044 by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - \[`flake8-return`] Extend revised `RET504` implementation to `with` statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4998](https://togithub.com/astral-sh/ruff/pull/4998) - \[`flake8-return`] Implement autofix for revised `RET504` rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4999](https://togithub.com/astral-sh/ruff/pull/4999) - \[`flake8-return`] Refactor `RET504` to only enforce assignment-then-return pattern by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4997](https://togithub.com/astral-sh/ruff/pull/4997) - \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4909](https://togithub.com/astral-sh/ruff/pull/4909) - \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4821](https://togithub.com/astral-sh/ruff/pull/4821) - \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/4957](https://togithub.com/astral-sh/ruff/pull/4957) - \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class definitions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5032](https://togithub.com/astral-sh/ruff/pull/5032) - \[`ruff`] Add a rule for static keys in dict comprehensions by [@​rodjunger](https://togithub.com/rodjunger) in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - \[`ruff`] Add rule to disallow implicit optional with autofix by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4831](https://togithub.com/astral-sh/ruff/pull/4831) - \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by [@​adampauls](https://togithub.com/adampauls) in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - \[`ruff`] Remove unannotated attributes from RUF008 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5049](https://togithub.com/astral-sh/ruff/pull/5049) - \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4971](https://togithub.com/astral-sh/ruff/pull/4971) ##### Settings - Option (`-o`/`--output-file`) to write output to a file by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4950](https://togithub.com/astral-sh/ruff/pull/4950) - Add JSON Lines (NDJSON) message serialization by [@​akx](https://togithub.com/akx) in [https://github.com/astral-sh/ruff/pull/5048](https://togithub.com/astral-sh/ruff/pull/5048) - Add rule documentation URL to JSON output by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5187](https://togithub.com/astral-sh/ruff/pull/5187) ##### Caching - Only use a single cache file per Python package by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5117](https://togithub.com/astral-sh/ruff/pull/5117) - Open cache files in parallel by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5120](https://togithub.com/astral-sh/ruff/pull/5120) ##### Jupyter - Add support for auto-fix in Jupyter notebooks by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4665](https://togithub.com/astral-sh/ruff/pull/4665) - Add roundtrip support for Jupyter notebook by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5028](https://togithub.com/astral-sh/ruff/pull/5028) ##### Bug Fixes - Handle decorators in class-parenthesis-modifying rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5034](https://togithub.com/astral-sh/ruff/pull/5034) - Allow re-assignments to `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4967](https://togithub.com/astral-sh/ruff/pull/4967) - Handled dict and set inside f-string ([#​4249](https://togithub.com/astral-sh/ruff/issues/4249)) by [@​DavideCanton](https://togithub.com/DavideCanton) in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - Support concatenated string key removals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4976](https://togithub.com/astral-sh/ruff/pull/4976) - Respect 'is not' operators split across newlines by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4977](https://togithub.com/astral-sh/ruff/pull/4977) - Parenthesize expressions prior to lexing in F632 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5001](https://togithub.com/astral-sh/ruff/pull/5001) - Ignore pyproject.toml for adding noqa directives by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5013](https://togithub.com/astral-sh/ruff/pull/5013) - Support 'reason' argument to `pytest.fail` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5040](https://togithub.com/astral-sh/ruff/pull/5040) - Allow `async with` in `redefined-loop-name` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5125](https://togithub.com/astral-sh/ruff/pull/5125) - Skip `DJ008` enforcement in stub files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5139](https://togithub.com/astral-sh/ruff/pull/5139) - Detect continuations at start-of-file by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5173](https://togithub.com/astral-sh/ruff/pull/5173) - Fix allowed-ellipsis detection by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5174](https://togithub.com/astral-sh/ruff/pull/5174) - Remove continuations before trailing semicolons by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5199](https://togithub.com/astral-sh/ruff/pull/5199) - Support parenthesized expressions when splitting compound assertions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5219](https://togithub.com/astral-sh/ruff/pull/5219) - Use phf for confusables to reduce llvm lines by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/4926](https://togithub.com/astral-sh/ruff/pull/4926) - Allow private accesses within special dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4968](https://togithub.com/astral-sh/ruff/pull/4968) - Support concatenated literals in format-literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4974](https://togithub.com/astral-sh/ruff/pull/4974) - Fix line numbers in source frames by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/astral-sh/ruff/pull/4984](https://togithub.com/astral-sh/ruff/pull/4984) - Suggest combining async with statements by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5022](https://togithub.com/astral-sh/ruff/pull/5022) - Improve `TypedDict` conversion logic for shadowed builtins and dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5038](https://togithub.com/astral-sh/ruff/pull/5038) - Support glob patterns in pep8\_naming ignore-names by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5024](https://togithub.com/astral-sh/ruff/pull/5024) - Respect all `__all__` definitions for docstring visibility by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5052](https://togithub.com/astral-sh/ruff/pull/5052) - Don't treat annotations as resolved in forward references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5060](https://togithub.com/astral-sh/ruff/pull/5060) - Consider ignore-names in all pep8 naming rules by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5079](https://togithub.com/astral-sh/ruff/pull/5079) - Ignore `reimplemented-builtin` if using `await` by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5101](https://togithub.com/astral-sh/ruff/pull/5101) - Allow space in filename for powershell + windows + python module by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5115](https://togithub.com/astral-sh/ruff/pull/5115) - Don't treat straight imports of **future** as `__future__` imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5128](https://togithub.com/astral-sh/ruff/pull/5128) - Remove continuations when deleting statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5198](https://togithub.com/astral-sh/ruff/pull/5198) - Fix corner case involving terminal backslash after fixing `W293` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/astral-sh/ruff/pull/5172](https://togithub.com/astral-sh/ruff/pull/5172) - Fix subprocess.run on Windows Python 3.7 by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5220](https://togithub.com/astral-sh/ruff/pull/5220) ##### New Contributors - [@​rodjunger](https://togithub.com/rodjunger) made their first contribution in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - [@​DavideCanton](https://togithub.com/DavideCanton) made their first contribution in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) made their first contribution in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - [@​adampauls](https://togithub.com/adampauls) made their first contribution in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - [@​tkukushkin](https://togithub.com/tkukushkin) made their first contribution in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - [@​Taybou](https://togithub.com/Taybou) made their first contribution in [https://github.com/astral-sh/ruff/pull/5088](https://togithub.com/astral-sh/ruff/pull/5088) - [@​davidszotten](https://togithub.com/davidszotten) made their first contribution in [https://github.com/astral-sh/ruff/pull/5158](https://togithub.com/astral-sh/ruff/pull/5158) - [@​dosisod](https://togithub.com/dosisod) made their first contribution in [https://github.com/astral-sh/ruff/pull/5203](https://togithub.com/astral-sh/ruff/pull/5203) **Full Changelog**: astral-sh/ruff@v0.0.272...v0.0.273 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, 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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ixm-one/pytest-cmake-presets). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://beta.ruff.rs/docs) ([source](https://togithub.com/astral-sh/ruff), [changelog](https://togithub.com/astral-sh/ruff/releases)) | `0.0.272` -> `0.0.274` | [](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>astral-sh/ruff</summary> ### [`v0.0.274`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.274) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.273...v0.0.274) <!-- Release notes generated using configuration in .github/release.yml at v0.0.274 --> #### What's Changed Follow-up release to `v0.0.273` to fix a panic in cache accesses. ##### Bug Fixes - Use package roots rather than package members for cache initialization by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5233](https://togithub.com/astral-sh/ruff/pull/5233) - Avoid `.unwrap()` on cache access by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5229](https://togithub.com/astral-sh/ruff/pull/5229) - Revert change to `RUF010` to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5232](https://togithub.com/astral-sh/ruff/pull/5232) - Avoid erroneous RUF013 violations for quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5234](https://togithub.com/astral-sh/ruff/pull/5234) **Full Changelog**: astral-sh/ruff@v0.0.273...v0.0.274 ### [`v0.0.273`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.273) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.272...v0.0.273) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed Highlights include: - Autofix capabilities for rules like `flake8-import-conventions`, which require symbol renames across a file. - Significant decrease in Ruff's cache size (e.g., a ~50% decrease for FastAPI). - Dozens and dozens of bug fixes + performance improvements. ##### Rules - \[`copyright`] Implement copyright notice detection by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/astral-sh/ruff/pull/4701](https://togithub.com/astral-sh/ruff/pull/4701) - \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5100](https://togithub.com/astral-sh/ruff/pull/5100) - \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by [@​tkukushkin](https://togithub.com/tkukushkin) in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - \[`flake8-import-conventions`] Enable autofix for unconventional imports rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5152](https://togithub.com/astral-sh/ruff/pull/5152) - \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using reference tracking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5074](https://togithub.com/astral-sh/ruff/pull/5074) - \[`flake8-pyi`] Implement PYI044 by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - \[`flake8-return`] Extend revised `RET504` implementation to `with` statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4998](https://togithub.com/astral-sh/ruff/pull/4998) - \[`flake8-return`] Implement autofix for revised `RET504` rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4999](https://togithub.com/astral-sh/ruff/pull/4999) - \[`flake8-return`] Refactor `RET504` to only enforce assignment-then-return pattern by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4997](https://togithub.com/astral-sh/ruff/pull/4997) - \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4909](https://togithub.com/astral-sh/ruff/pull/4909) - \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4821](https://togithub.com/astral-sh/ruff/pull/4821) - \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/4957](https://togithub.com/astral-sh/ruff/pull/4957) - \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class definitions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5032](https://togithub.com/astral-sh/ruff/pull/5032) - \[`ruff`] Add a rule for static keys in dict comprehensions by [@​rodjunger](https://togithub.com/rodjunger) in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - \[`ruff`] Add rule to disallow implicit optional with autofix by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4831](https://togithub.com/astral-sh/ruff/pull/4831) - \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by [@​adampauls](https://togithub.com/adampauls) in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - \[`ruff`] Remove unannotated attributes from RUF008 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5049](https://togithub.com/astral-sh/ruff/pull/5049) - \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4971](https://togithub.com/astral-sh/ruff/pull/4971) ##### Settings - Option (`-o`/`--output-file`) to write output to a file by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4950](https://togithub.com/astral-sh/ruff/pull/4950) - Add JSON Lines (NDJSON) message serialization by [@​akx](https://togithub.com/akx) in [https://github.com/astral-sh/ruff/pull/5048](https://togithub.com/astral-sh/ruff/pull/5048) - Add rule documentation URL to JSON output by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5187](https://togithub.com/astral-sh/ruff/pull/5187) ##### Caching - Only use a single cache file per Python package by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5117](https://togithub.com/astral-sh/ruff/pull/5117) - Open cache files in parallel by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5120](https://togithub.com/astral-sh/ruff/pull/5120) ##### Jupyter - Add support for auto-fix in Jupyter notebooks by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4665](https://togithub.com/astral-sh/ruff/pull/4665) - Add roundtrip support for Jupyter notebook by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5028](https://togithub.com/astral-sh/ruff/pull/5028) ##### Bug Fixes - Handle decorators in class-parenthesis-modifying rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5034](https://togithub.com/astral-sh/ruff/pull/5034) - Allow re-assignments to `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4967](https://togithub.com/astral-sh/ruff/pull/4967) - Handled dict and set inside f-string ([#​4249](https://togithub.com/astral-sh/ruff/issues/4249)) by [@​DavideCanton](https://togithub.com/DavideCanton) in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - Support concatenated string key removals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4976](https://togithub.com/astral-sh/ruff/pull/4976) - Respect 'is not' operators split across newlines by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4977](https://togithub.com/astral-sh/ruff/pull/4977) - Parenthesize expressions prior to lexing in F632 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5001](https://togithub.com/astral-sh/ruff/pull/5001) - Ignore pyproject.toml for adding noqa directives by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5013](https://togithub.com/astral-sh/ruff/pull/5013) - Support 'reason' argument to `pytest.fail` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5040](https://togithub.com/astral-sh/ruff/pull/5040) - Allow `async with` in `redefined-loop-name` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5125](https://togithub.com/astral-sh/ruff/pull/5125) - Skip `DJ008` enforcement in stub files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5139](https://togithub.com/astral-sh/ruff/pull/5139) - Detect continuations at start-of-file by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5173](https://togithub.com/astral-sh/ruff/pull/5173) - Fix allowed-ellipsis detection by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5174](https://togithub.com/astral-sh/ruff/pull/5174) - Remove continuations before trailing semicolons by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5199](https://togithub.com/astral-sh/ruff/pull/5199) - Support parenthesized expressions when splitting compound assertions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5219](https://togithub.com/astral-sh/ruff/pull/5219) - Use phf for confusables to reduce llvm lines by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/4926](https://togithub.com/astral-sh/ruff/pull/4926) - Allow private accesses within special dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4968](https://togithub.com/astral-sh/ruff/pull/4968) - Support concatenated literals in format-literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4974](https://togithub.com/astral-sh/ruff/pull/4974) - Fix line numbers in source frames by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/astral-sh/ruff/pull/4984](https://togithub.com/astral-sh/ruff/pull/4984) - Suggest combining async with statements by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5022](https://togithub.com/astral-sh/ruff/pull/5022) - Improve `TypedDict` conversion logic for shadowed builtins and dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5038](https://togithub.com/astral-sh/ruff/pull/5038) - Support glob patterns in pep8\_naming ignore-names by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5024](https://togithub.com/astral-sh/ruff/pull/5024) - Respect all `__all__` definitions for docstring visibility by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5052](https://togithub.com/astral-sh/ruff/pull/5052) - Don't treat annotations as resolved in forward references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5060](https://togithub.com/astral-sh/ruff/pull/5060) - Consider ignore-names in all pep8 naming rules by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5079](https://togithub.com/astral-sh/ruff/pull/5079) - Ignore `reimplemented-builtin` if using `await` by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5101](https://togithub.com/astral-sh/ruff/pull/5101) - Allow space in filename for powershell + windows + python module by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5115](https://togithub.com/astral-sh/ruff/pull/5115) - Don't treat straight imports of **future** as `__future__` imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5128](https://togithub.com/astral-sh/ruff/pull/5128) - Remove continuations when deleting statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5198](https://togithub.com/astral-sh/ruff/pull/5198) - Fix corner case involving terminal backslash after fixing `W293` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/astral-sh/ruff/pull/5172](https://togithub.com/astral-sh/ruff/pull/5172) - Fix subprocess.run on Windows Python 3.7 by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5220](https://togithub.com/astral-sh/ruff/pull/5220) #### New Contributors - [@​rodjunger](https://togithub.com/rodjunger) made their first contribution in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - [@​DavideCanton](https://togithub.com/DavideCanton) made their first contribution in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) made their first contribution in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - [@​adampauls](https://togithub.com/adampauls) made their first contribution in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - [@​tkukushkin](https://togithub.com/tkukushkin) made their first contribution in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - [@​Taybou](https://togithub.com/Taybou) made their first contribution in [https://github.com/astral-sh/ruff/pull/5088](https://togithub.com/astral-sh/ruff/pull/5088) - [@​davidszotten](https://togithub.com/davidszotten) made their first contribution in [https://github.com/astral-sh/ruff/pull/5158](https://togithub.com/astral-sh/ruff/pull/5158) - [@​dosisod](https://togithub.com/dosisod) made their first contribution in [https://github.com/astral-sh/ruff/pull/5203](https://togithub.com/astral-sh/ruff/pull/5203) **Full Changelog**: astral-sh/ruff@v0.0.272...v0.0.273 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), 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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/jankatins/pr-workflow-example). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://beta.ruff.rs/docs) ([source](https://togithub.com/astral-sh/ruff), [changelog](https://togithub.com/astral-sh/ruff/releases)) | `==0.0.272` -> `==0.0.274` | [](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>astral-sh/ruff</summary> ### [`v0.0.274`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.274) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.273...v0.0.274) <!-- Release notes generated using configuration in .github/release.yml at v0.0.274 --> #### What's Changed Follow-up release to `v0.0.273` to fix a panic in cache accesses. ##### Bug Fixes - Use package roots rather than package members for cache initialization by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5233](https://togithub.com/astral-sh/ruff/pull/5233) - Avoid `.unwrap()` on cache access by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5229](https://togithub.com/astral-sh/ruff/pull/5229) - Revert change to `RUF010` to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5232](https://togithub.com/astral-sh/ruff/pull/5232) - Avoid erroneous RUF013 violations for quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5234](https://togithub.com/astral-sh/ruff/pull/5234) **Full Changelog**: astral-sh/ruff@v0.0.273...v0.0.274 ### [`v0.0.273`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.273) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.272...v0.0.273) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed Highlights include: - Autofix capabilities for rules like `flake8-import-conventions`, which require symbol renames across a file. - Significant decrease in Ruff's cache size (e.g., a ~50% decrease for FastAPI). - Dozens and dozens of bug fixes + performance improvements. ##### Rules - \[`copyright`] Implement copyright notice detection by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/astral-sh/ruff/pull/4701](https://togithub.com/astral-sh/ruff/pull/4701) - \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5100](https://togithub.com/astral-sh/ruff/pull/5100) - \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by [@​tkukushkin](https://togithub.com/tkukushkin) in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - \[`flake8-import-conventions`] Enable autofix for unconventional imports rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5152](https://togithub.com/astral-sh/ruff/pull/5152) - \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using reference tracking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5074](https://togithub.com/astral-sh/ruff/pull/5074) - \[`flake8-pyi`] Implement PYI044 by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - \[`flake8-return`] Extend revised `RET504` implementation to `with` statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4998](https://togithub.com/astral-sh/ruff/pull/4998) - \[`flake8-return`] Implement autofix for revised `RET504` rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4999](https://togithub.com/astral-sh/ruff/pull/4999) - \[`flake8-return`] Refactor `RET504` to only enforce assignment-then-return pattern by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4997](https://togithub.com/astral-sh/ruff/pull/4997) - \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4909](https://togithub.com/astral-sh/ruff/pull/4909) - \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4821](https://togithub.com/astral-sh/ruff/pull/4821) - \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/4957](https://togithub.com/astral-sh/ruff/pull/4957) - \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class definitions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5032](https://togithub.com/astral-sh/ruff/pull/5032) - \[`ruff`] Add a rule for static keys in dict comprehensions by [@​rodjunger](https://togithub.com/rodjunger) in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - \[`ruff`] Add rule to disallow implicit optional with autofix by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4831](https://togithub.com/astral-sh/ruff/pull/4831) - \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by [@​adampauls](https://togithub.com/adampauls) in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - \[`ruff`] Remove unannotated attributes from RUF008 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5049](https://togithub.com/astral-sh/ruff/pull/5049) - \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4971](https://togithub.com/astral-sh/ruff/pull/4971) ##### Settings - Option (`-o`/`--output-file`) to write output to a file by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4950](https://togithub.com/astral-sh/ruff/pull/4950) - Add JSON Lines (NDJSON) message serialization by [@​akx](https://togithub.com/akx) in [https://github.com/astral-sh/ruff/pull/5048](https://togithub.com/astral-sh/ruff/pull/5048) - Add rule documentation URL to JSON output by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5187](https://togithub.com/astral-sh/ruff/pull/5187) ##### Caching - Only use a single cache file per Python package by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5117](https://togithub.com/astral-sh/ruff/pull/5117) - Open cache files in parallel by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5120](https://togithub.com/astral-sh/ruff/pull/5120) ##### Jupyter - Add support for auto-fix in Jupyter notebooks by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4665](https://togithub.com/astral-sh/ruff/pull/4665) - Add roundtrip support for Jupyter notebook by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5028](https://togithub.com/astral-sh/ruff/pull/5028) ##### Bug Fixes - Handle decorators in class-parenthesis-modifying rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5034](https://togithub.com/astral-sh/ruff/pull/5034) - Allow re-assignments to `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4967](https://togithub.com/astral-sh/ruff/pull/4967) - Handled dict and set inside f-string ([#​4249](https://togithub.com/astral-sh/ruff/issues/4249)) by [@​DavideCanton](https://togithub.com/DavideCanton) in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - Support concatenated string key removals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4976](https://togithub.com/astral-sh/ruff/pull/4976) - Respect 'is not' operators split across newlines by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4977](https://togithub.com/astral-sh/ruff/pull/4977) - Parenthesize expressions prior to lexing in F632 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5001](https://togithub.com/astral-sh/ruff/pull/5001) - Ignore pyproject.toml for adding noqa directives by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5013](https://togithub.com/astral-sh/ruff/pull/5013) - Support 'reason' argument to `pytest.fail` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5040](https://togithub.com/astral-sh/ruff/pull/5040) - Allow `async with` in `redefined-loop-name` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5125](https://togithub.com/astral-sh/ruff/pull/5125) - Skip `DJ008` enforcement in stub files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5139](https://togithub.com/astral-sh/ruff/pull/5139) - Detect continuations at start-of-file by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5173](https://togithub.com/astral-sh/ruff/pull/5173) - Fix allowed-ellipsis detection by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5174](https://togithub.com/astral-sh/ruff/pull/5174) - Remove continuations before trailing semicolons by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5199](https://togithub.com/astral-sh/ruff/pull/5199) - Support parenthesized expressions when splitting compound assertions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5219](https://togithub.com/astral-sh/ruff/pull/5219) - Use phf for confusables to reduce llvm lines by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/4926](https://togithub.com/astral-sh/ruff/pull/4926) - Allow private accesses within special dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4968](https://togithub.com/astral-sh/ruff/pull/4968) - Support concatenated literals in format-literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4974](https://togithub.com/astral-sh/ruff/pull/4974) - Fix line numbers in source frames by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/astral-sh/ruff/pull/4984](https://togithub.com/astral-sh/ruff/pull/4984) - Suggest combining async with statements by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5022](https://togithub.com/astral-sh/ruff/pull/5022) - Improve `TypedDict` conversion logic for shadowed builtins and dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5038](https://togithub.com/astral-sh/ruff/pull/5038) - Support glob patterns in pep8\_naming ignore-names by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5024](https://togithub.com/astral-sh/ruff/pull/5024) - Respect all `__all__` definitions for docstring visibility by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5052](https://togithub.com/astral-sh/ruff/pull/5052) - Don't treat annotations as resolved in forward references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5060](https://togithub.com/astral-sh/ruff/pull/5060) - Consider ignore-names in all pep8 naming rules by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5079](https://togithub.com/astral-sh/ruff/pull/5079) - Ignore `reimplemented-builtin` if using `await` by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5101](https://togithub.com/astral-sh/ruff/pull/5101) - Allow space in filename for powershell + windows + python module by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5115](https://togithub.com/astral-sh/ruff/pull/5115) - Don't treat straight imports of **future** as `__future__` imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5128](https://togithub.com/astral-sh/ruff/pull/5128) - Remove continuations when deleting statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5198](https://togithub.com/astral-sh/ruff/pull/5198) - Fix corner case involving terminal backslash after fixing `W293` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/astral-sh/ruff/pull/5172](https://togithub.com/astral-sh/ruff/pull/5172) - Fix subprocess.run on Windows Python 3.7 by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5220](https://togithub.com/astral-sh/ruff/pull/5220) #### New Contributors - [@​rodjunger](https://togithub.com/rodjunger) made their first contribution in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - [@​DavideCanton](https://togithub.com/DavideCanton) made their first contribution in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) made their first contribution in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - [@​adampauls](https://togithub.com/adampauls) made their first contribution in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - [@​tkukushkin](https://togithub.com/tkukushkin) made their first contribution in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - [@​Taybou](https://togithub.com/Taybou) made their first contribution in [https://github.com/astral-sh/ruff/pull/5088](https://togithub.com/astral-sh/ruff/pull/5088) - [@​davidszotten](https://togithub.com/davidszotten) made their first contribution in [https://github.com/astral-sh/ruff/pull/5158](https://togithub.com/astral-sh/ruff/pull/5158) - [@​dosisod](https://togithub.com/dosisod) made their first contribution in [https://github.com/astral-sh/ruff/pull/5203](https://togithub.com/astral-sh/ruff/pull/5203) **Full Changelog**: astral-sh/ruff@v0.0.272...v0.0.273 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/allenporter/pyrainbird). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://beta.ruff.rs/docs) ([source](https://togithub.com/astral-sh/ruff), [changelog](https://togithub.com/astral-sh/ruff/releases)) | `==0.0.272` -> `==0.0.275` | [](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>astral-sh/ruff</summary> ### [`v0.0.275`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.275) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.274...v0.0.275) <!-- Release notes generated using configuration in .github/release.yml at v0.0.275 --> #### What's Changed Highlights include a 7-10x decrease in Ruff's cache size. ##### Rules - Add support for top-level quoted annotations in RUF013 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5235](https://togithub.com/astral-sh/ruff/pull/5235) - Add support for nested quoted annotations in RUF013 by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5254](https://togithub.com/astral-sh/ruff/pull/5254) - Move `compare-to-empty-string` (`PLC1901`) to nursery by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5264](https://togithub.com/astral-sh/ruff/pull/5264) - Ignore Pydantic classes when evaluating `mutable-class-default` (`RUF012`) by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5273](https://togithub.com/astral-sh/ruff/pull/5273) - Allow `typing.Final` for `mutable-class-default annotations` (`RUF012`) by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5274](https://togithub.com/astral-sh/ruff/pull/5274) - Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in some versions by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5291](https://togithub.com/astral-sh/ruff/pull/5291) ##### Bug Fixes - Restore existing bindings when unbinding caught exceptions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5256](https://togithub.com/astral-sh/ruff/pull/5256) - Avoid including nursery rules in linter-level selectors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5268](https://togithub.com/astral-sh/ruff/pull/5268) #### New Contributors - [@​jgberry](https://togithub.com/jgberry) made their first contribution in [https://github.com/astral-sh/ruff/pull/5221](https://togithub.com/astral-sh/ruff/pull/5221) **Full Changelog**: astral-sh/ruff@v0.0.274...v0.0.275 ### [`v0.0.274`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.274) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.273...v0.0.274) <!-- Release notes generated using configuration in .github/release.yml at v0.0.274 --> #### What's Changed Follow-up release to `v0.0.273` to fix a panic in cache accesses. ##### Bug Fixes - Use package roots rather than package members for cache initialization by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5233](https://togithub.com/astral-sh/ruff/pull/5233) - Avoid `.unwrap()` on cache access by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5229](https://togithub.com/astral-sh/ruff/pull/5229) - Revert change to `RUF010` to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5232](https://togithub.com/astral-sh/ruff/pull/5232) - Avoid erroneous RUF013 violations for quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5234](https://togithub.com/astral-sh/ruff/pull/5234) **Full Changelog**: astral-sh/ruff@v0.0.273...v0.0.274 ### [`v0.0.273`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.273) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.272...v0.0.273) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed Highlights include: - Autofix capabilities for rules like `flake8-import-conventions`, which require symbol renames across a file. - Significant decrease in Ruff's cache size (e.g., a ~50% decrease for FastAPI). - Dozens and dozens of bug fixes + performance improvements. ##### Rules - \[`copyright`] Implement copyright notice detection by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/astral-sh/ruff/pull/4701](https://togithub.com/astral-sh/ruff/pull/4701) - \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5100](https://togithub.com/astral-sh/ruff/pull/5100) - \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by [@​tkukushkin](https://togithub.com/tkukushkin) in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - \[`flake8-import-conventions`] Enable autofix for unconventional imports rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5152](https://togithub.com/astral-sh/ruff/pull/5152) - \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using reference tracking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5074](https://togithub.com/astral-sh/ruff/pull/5074) - \[`flake8-pyi`] Implement PYI044 by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - \[`flake8-return`] Extend revised `RET504` implementation to `with` statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4998](https://togithub.com/astral-sh/ruff/pull/4998) - \[`flake8-return`] Implement autofix for revised `RET504` rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4999](https://togithub.com/astral-sh/ruff/pull/4999) - \[`flake8-return`] Refactor `RET504` to only enforce assignment-then-return pattern by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4997](https://togithub.com/astral-sh/ruff/pull/4997) - \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4909](https://togithub.com/astral-sh/ruff/pull/4909) - \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4821](https://togithub.com/astral-sh/ruff/pull/4821) - \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/4957](https://togithub.com/astral-sh/ruff/pull/4957) - \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class definitions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5032](https://togithub.com/astral-sh/ruff/pull/5032) - \[`ruff`] Add a rule for static keys in dict comprehensions by [@​rodjunger](https://togithub.com/rodjunger) in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - \[`ruff`] Add rule to disallow implicit optional with autofix by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4831](https://togithub.com/astral-sh/ruff/pull/4831) - \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by [@​adampauls](https://togithub.com/adampauls) in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - \[`ruff`] Remove unannotated attributes from RUF008 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5049](https://togithub.com/astral-sh/ruff/pull/5049) - \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4971](https://togithub.com/astral-sh/ruff/pull/4971) ##### Settings - Option (`-o`/`--output-file`) to write output to a file by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4950](https://togithub.com/astral-sh/ruff/pull/4950) - Add JSON Lines (NDJSON) message serialization by [@​akx](https://togithub.com/akx) in [https://github.com/astral-sh/ruff/pull/5048](https://togithub.com/astral-sh/ruff/pull/5048) - Add rule documentation URL to JSON output by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5187](https://togithub.com/astral-sh/ruff/pull/5187) ##### Caching - Only use a single cache file per Python package by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5117](https://togithub.com/astral-sh/ruff/pull/5117) - Open cache files in parallel by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5120](https://togithub.com/astral-sh/ruff/pull/5120) ##### Jupyter - Add support for auto-fix in Jupyter notebooks by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4665](https://togithub.com/astral-sh/ruff/pull/4665) - Add roundtrip support for Jupyter notebook by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5028](https://togithub.com/astral-sh/ruff/pull/5028) ##### Bug Fixes - Handle decorators in class-parenthesis-modifying rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5034](https://togithub.com/astral-sh/ruff/pull/5034) - Allow re-assignments to `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4967](https://togithub.com/astral-sh/ruff/pull/4967) - Handled dict and set inside f-string ([#​4249](https://togithub.com/astral-sh/ruff/issues/4249)) by [@​DavideCanton](https://togithub.com/DavideCanton) in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - Support concatenated string key removals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4976](https://togithub.com/astral-sh/ruff/pull/4976) - Respect 'is not' operators split across newlines by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4977](https://togithub.com/astral-sh/ruff/pull/4977) - Parenthesize expressions prior to lexing in F632 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5001](https://togithub.com/astral-sh/ruff/pull/5001) - Ignore pyproject.toml for adding noqa directives by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5013](https://togithub.com/astral-sh/ruff/pull/5013) - Support 'reason' argument to `pytest.fail` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5040](https://togithub.com/astral-sh/ruff/pull/5040) - Allow `async with` in `redefined-loop-name` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5125](https://togithub.com/astral-sh/ruff/pull/5125) - Skip `DJ008` enforcement in stub files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5139](https://togithub.com/astral-sh/ruff/pull/5139) - Detect continuations at start-of-file by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5173](https://togithub.com/astral-sh/ruff/pull/5173) - Fix allowed-ellipsis detection by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5174](https://togithub.com/astral-sh/ruff/pull/5174) - Remove continuations before trailing semicolons by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5199](https://togithub.com/astral-sh/ruff/pull/5199) - Support parenthesized expressions when splitting compound assertions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5219](https://togithub.com/astral-sh/ruff/pull/5219) - Use phf for confusables to reduce llvm lines by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/4926](https://togithub.com/astral-sh/ruff/pull/4926) - Allow private accesses within special dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4968](https://togithub.com/astral-sh/ruff/pull/4968) - Support concatenated literals in format-literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4974](https://togithub.com/astral-sh/ruff/pull/4974) - Fix line numbers in source frames by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/astral-sh/ruff/pull/4984](https://togithub.com/astral-sh/ruff/pull/4984) - Suggest combining async with statements by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5022](https://togithub.com/astral-sh/ruff/pull/5022) - Improve `TypedDict` conversion logic for shadowed builtins and dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5038](https://togithub.com/astral-sh/ruff/pull/5038) - Support glob patterns in pep8\_naming ignore-names by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5024](https://togithub.com/astral-sh/ruff/pull/5024) - Respect all `__all__` definitions for docstring visibility by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5052](https://togithub.com/astral-sh/ruff/pull/5052) - Don't treat annotations as resolved in forward references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5060](https://togithub.com/astral-sh/ruff/pull/5060) - Consider ignore-names in all pep8 naming rules by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5079](https://togithub.com/astral-sh/ruff/pull/5079) - Ignore `reimplemented-builtin` if using `await` by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5101](https://togithub.com/astral-sh/ruff/pull/5101) - Allow space in filename for powershell + windows + python module by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5115](https://togithub.com/astral-sh/ruff/pull/5115) - Don't treat straight imports of **future** as `__future__` imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5128](https://togithub.com/astral-sh/ruff/pull/5128) - Remove continuations when deleting statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5198](https://togithub.com/astral-sh/ruff/pull/5198) - Fix corner case involving terminal backslash after fixing `W293` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/astral-sh/ruff/pull/5172](https://togithub.com/astral-sh/ruff/pull/5172) - Fix subprocess.run on Windows Python 3.7 by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5220](https://togithub.com/astral-sh/ruff/pull/5220) #### New Contributors - [@​rodjunger](https://togithub.com/rodjunger) made their first contribution in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - [@​DavideCanton](https://togithub.com/DavideCanton) made their first contribution in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) made their first contribution in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - [@​adampauls](https://togithub.com/adampauls) made their first contribution in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - [@​tkukushkin](https://togithub.com/tkukushkin) made their first contribution in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - [@​Taybou](https://togithub.com/Taybou) made their first contribution in [https://github.com/astral-sh/ruff/pull/5088](https://togithub.com/astral-sh/ruff/pull/5088) - [@​davidszotten](https://togithub.com/davidszotten) made their first contribution in [https://github.com/astral-sh/ruff/pull/5158](https://togithub.com/astral-sh/ruff/pull/5158) - [@​dosisod](https://togithub.com/dosisod) made their first contribution in [https://github.com/astral-sh/ruff/pull/5203](https://togithub.com/astral-sh/ruff/pull/5203) **Full Changelog**: astral-sh/ruff@v0.0.272...v0.0.273 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/allenporter/flux-local). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMzEuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [docs/MarkDown](https://togithub.com/Python-Markdown/markdown) ([changelog](https://togithub.com/Python-Markdown/markdown/blob/master/docs/change_log/index.md)) | `==3.3.7` -> `==3.4.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/) | | [docs/mkdocs-material](https://togithub.com/squidfunk/mkdocs-material) | `==9.1.14` -> `==9.1.17` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [docs/mkdocstrings](https://togithub.com/mkdocstrings/mkdocstrings) ([changelog](https://mkdocstrings.github.io/changelog)) | `==0.21.2` -> `==0.22.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/) | | [misc-lint/blacken-docs](https://togithub.com/asottile/blacken-docs) ([changelog](https://togithub.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst)) | `==1.13.0` -> `==1.14.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/) | | [misc-lint/pycln](https://hadialqattan.github.io/pycln) ([source](https://togithub.com/hadialqattan/pycln)) | `==2.1.3` -> `==2.1.5` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [misc-lint/ruff](https://beta.ruff.rs/docs) ([source](https://togithub.com/astral-sh/ruff), [changelog](https://togithub.com/astral-sh/ruff/releases)) | `==0.0.272` -> `==0.0.275` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [pytest/pytest](https://docs.pytest.org/en/latest/) ([source](https://togithub.com/pytest-dev/pytest), [changelog](https://docs.pytest.org/en/stable/changelog.html)) | `==7.3.1` -> `==7.4.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/) | | [pytest/pytest-mock](https://togithub.com/pytest-dev/pytest-mock) ([changelog](https://pytest-mock.readthedocs.io/en/latest/changelog.html)) | `==3.10.0` -> `==3.11.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/) | | [typecheck/mypy](https://www.mypy-lang.org/) ([source](https://togithub.com/python/mypy), [changelog](https://mypy-lang.blogspot.com/)) | `==1.3.0` -> `==1.4.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>Python-Markdown/markdown (docs/MarkDown)</summary> ### [`v3.4.3`](https://togithub.com/Python-Markdown/markdown/compare/3.4.2...3.4.3) [Compare Source](https://togithub.com/Python-Markdown/markdown/compare/3.4.2...3.4.3) ### [`v3.4.2`](https://togithub.com/Python-Markdown/markdown/compare/3.4.1...3.4.2) [Compare Source](https://togithub.com/Python-Markdown/markdown/compare/3.4.1...3.4.2) ### [`v3.4.1`](https://togithub.com/Python-Markdown/markdown/compare/3.4...3.4.1) [Compare Source](https://togithub.com/Python-Markdown/markdown/compare/3.4...3.4.1) ### [`v3.4`](https://togithub.com/Python-Markdown/markdown/compare/3.3.7...3.4) [Compare Source](https://togithub.com/Python-Markdown/markdown/compare/3.3.7...3.4) </details> <details> <summary>squidfunk/mkdocs-material (docs/mkdocs-material)</summary> ### [`v9.1.17`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.1.17): mkdocs-material-9.1.17 [Compare Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.1.16...9.1.17) - Fixed [#​5633](https://togithub.com/squidfunk/mkdocs-material/issues/5633): Code annotations with nested lists incorrectly mounted - Fixed [#​5628](https://togithub.com/squidfunk/mkdocs-material/issues/5628): Regression in new social plugin configuration scheme ### [`v9.1.16`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.1.16): mkdocs-material-9.1.16 [Compare Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.1.15...9.1.16) - Updated Indonesian translations - Ensure scroll bar follows color scheme of operating system ### [`v9.1.15`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.1.15): mkdocs-material-9.1.15 [Compare Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.1.14...9.1.15) - Fixed [#​5566](https://togithub.com/squidfunk/mkdocs-material/issues/5566): Indicate color scheme to operating system - Fixed [#​5565](https://togithub.com/squidfunk/mkdocs-material/issues/5565): Update `Dockerfile` to latest version of base image - Fixed [#​5554](https://togithub.com/squidfunk/mkdocs-material/issues/5554): Add additional version tags (`9`, `9.1`) to Docker image - Fixed [#​5536](https://togithub.com/squidfunk/mkdocs-material/issues/5536): Strip tags of ARIA labels in table of contents </details> <details> <summary>mkdocstrings/mkdocstrings (docs/mkdocstrings)</summary> ### [`v0.22.0`](https://togithub.com/mkdocstrings/mkdocstrings/blob/HEAD/CHANGELOG.md#​0220-httpsgithubcommkdocstringsmkdocstringsreleasestag0220---2023-05-25) [Compare Source](https://togithub.com/mkdocstrings/mkdocstrings/compare/0.21.2...0.22.0) <small>[Compare with 0.21.2](https://togithub.com/mkdocstrings/mkdocstrings/compare/0.21.2...0.22.0)</small> ##### Features - Allow extensions to add templates ([cf0af05](https://togithub.com/mkdocstrings/mkdocstrings/commit/cf0af059eb89240eba0437de417c124389e2f20e) by Timothée Mazzucotelli). [PR #​569](https://togithub.com/mkdocstrings/mkdocstrings/pull/569) ##### Code Refactoring - Report inventory loading errors ([2c05d78](https://togithub.com/mkdocstrings/mkdocstrings/commit/2c05d7854b87251e26c1a2e1810b85702ff110f3) by Timothée Mazzucotelli). Co-authored-by: Oleh Prypin <oleh@pryp.in> </details> <details> <summary>asottile/blacken-docs (misc-lint/blacken-docs)</summary> ### [`v1.14.0`](https://togithub.com/asottile/blacken-docs/blob/HEAD/CHANGELOG.rst#​1140-2023-06-13) [Compare Source](https://togithub.com/asottile/blacken-docs/compare/1.13.0...1.14.0) - Support Python 3.12. </details> <details> <summary>hadialqattan/pycln (misc-lint/pycln)</summary> ### [`v2.1.5`](https://togithub.com/hadialqattan/pycln/releases/tag/v2.1.5) [Compare Source](https://togithub.com/hadialqattan/pycln/compare/v2.1.4...v2.1.5) ##### Changed - [Widen `pathspec` version artificial lock by @​hadialqattan](https://togithub.com/hadialqattan/pycln/pull/203) ### [`v2.1.4`](https://togithub.com/hadialqattan/pycln/releases/tag/v2.1.4) [Compare Source](https://togithub.com/hadialqattan/pycln/compare/v2.1.3...v2.1.4) ##### Fixed - [Detect third-party libs installed in editable mode by @​hadialqattan](https://togithub.com/hadialqattan/pycln/pull/200) - [Preserve the original line break format by @​maxbachmann & @​hadialqattan](https://togithub.com/hadialqattan/pycln/pull/197) ##### Changed - [Bump JRubics/poetry-publish from 1.16 to 1.17 by @​dependabot\[bot\]](https://togithub.com/hadialqattan/pycln/pull/201) - [Remove `pathspec` version artificial lock by @​hadialqattan](https://togithub.com/hadialqattan/pycln/pull/199) - [Bump codecov/codecov-action from 3.1.1 to 3.1.4 by @​dependabot\[bot\]](https://togithub.com/hadialqattan/pycln/pull/198) - [Bump typer from 0.7.0 to 0.9.0 by @​dependabot\[bot\]](https://togithub.com/hadialqattan/pycln/pull/195) </details> <details> <summary>astral-sh/ruff (misc-lint/ruff)</summary> ### [`v0.0.275`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.275) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.274...v0.0.275) <!-- Release notes generated using configuration in .github/release.yml at v0.0.275 --> #### What's Changed Highlights include a 7-10x decrease in Ruff's cache size. ##### Rules - Add support for top-level quoted annotations in RUF013 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5235](https://togithub.com/astral-sh/ruff/pull/5235) - Add support for nested quoted annotations in RUF013 by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5254](https://togithub.com/astral-sh/ruff/pull/5254) - Move `compare-to-empty-string` (`PLC1901`) to nursery by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5264](https://togithub.com/astral-sh/ruff/pull/5264) - Ignore Pydantic classes when evaluating `mutable-class-default` (`RUF012`) by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5273](https://togithub.com/astral-sh/ruff/pull/5273) - Allow `typing.Final` for `mutable-class-default annotations` (`RUF012`) by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5274](https://togithub.com/astral-sh/ruff/pull/5274) - Modify `deprecated-import` (`UP035`) to prefer `typing_extensions` in some versions by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5291](https://togithub.com/astral-sh/ruff/pull/5291) ##### Bug Fixes - Restore existing bindings when unbinding caught exceptions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5256](https://togithub.com/astral-sh/ruff/pull/5256) - Avoid including nursery rules in linter-level selectors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5268](https://togithub.com/astral-sh/ruff/pull/5268) #### New Contributors - [@​jgberry](https://togithub.com/jgberry) made their first contribution in [https://github.com/astral-sh/ruff/pull/5221](https://togithub.com/astral-sh/ruff/pull/5221) **Full Changelog**: astral-sh/ruff@v0.0.274...v0.0.275 ### [`v0.0.274`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.274) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.273...v0.0.274) <!-- Release notes generated using configuration in .github/release.yml at v0.0.274 --> #### What's Changed Follow-up release to `v0.0.273` to fix a panic in cache accesses. ##### Bug Fixes - Use package roots rather than package members for cache initialization by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5233](https://togithub.com/astral-sh/ruff/pull/5233) - Avoid `.unwrap()` on cache access by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5229](https://togithub.com/astral-sh/ruff/pull/5229) - Revert change to `RUF010` to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5232](https://togithub.com/astral-sh/ruff/pull/5232) - Avoid erroneous RUF013 violations for quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5234](https://togithub.com/astral-sh/ruff/pull/5234) **Full Changelog**: astral-sh/ruff@v0.0.273...v0.0.274 ### [`v0.0.273`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.273) [Compare Source](https://togithub.com/astral-sh/ruff/compare/v0.0.272...v0.0.273) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed Highlights include: - Autofix capabilities for rules like `flake8-import-conventions`, which require symbol renames across a file. - Significant decrease in Ruff's cache size (e.g., a ~50% decrease for FastAPI). - Dozens and dozens of bug fixes + performance improvements. ##### Rules - \[`copyright`] Implement copyright notice detection by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/astral-sh/ruff/pull/4701](https://togithub.com/astral-sh/ruff/pull/4701) - \[`flake8-datetimez`] Enable UTC-import for `datetime-utc-alias` fix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5100](https://togithub.com/astral-sh/ruff/pull/5100) - \[`flake8-implicit-str-concat`] Add autofix for `ISC001` by [@​tkukushkin](https://togithub.com/tkukushkin) in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - \[`flake8-import-conventions`] Enable autofix for unconventional imports rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5152](https://togithub.com/astral-sh/ruff/pull/5152) - \[`flake8-pyi`] Add autofix for `Set`-to-`AbstractSet` rewrite using reference tracking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5074](https://togithub.com/astral-sh/ruff/pull/5074) - \[`flake8-pyi`] Implement PYI044 by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - \[`flake8-return`] Extend revised `RET504` implementation to `with` statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4998](https://togithub.com/astral-sh/ruff/pull/4998) - \[`flake8-return`] Implement autofix for revised `RET504` rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4999](https://togithub.com/astral-sh/ruff/pull/4999) - \[`flake8-return`] Refactor `RET504` to only enforce assignment-then-return pattern by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4997](https://togithub.com/astral-sh/ruff/pull/4997) - \[`flake8-slots`] Add plugin, add `SLOT000`, `SLOT001` and `SLOT002` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4909](https://togithub.com/astral-sh/ruff/pull/4909) - \[`perflint`] Add `perflint` plugin, add first rule `PERF102` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/astral-sh/ruff/pull/4821](https://togithub.com/astral-sh/ruff/pull/4821) - \[`pylint`] Add Pylint rule `comparison-with-itself` (`R0124`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/4957](https://togithub.com/astral-sh/ruff/pull/4957) - \[`pyupgrade`] Add a rule to remove unnecessary parentheses in class definitions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5032](https://togithub.com/astral-sh/ruff/pull/5032) - \[`ruff`] Add a rule for static keys in dict comprehensions by [@​rodjunger](https://togithub.com/rodjunger) in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - \[`ruff`] Add rule to disallow implicit optional with autofix by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4831](https://togithub.com/astral-sh/ruff/pull/4831) - \[`ruff`] Expand RUF008 to all classes, but to a new code (RUF012) by [@​adampauls](https://togithub.com/adampauls) in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - \[`ruff`] Remove unannotated attributes from RUF008 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5049](https://togithub.com/astral-sh/ruff/pull/5049) - \[`ruff`] Upgrade explicit-type-conversion rule (`RUF010`) to remove unnecessary `str` calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4971](https://togithub.com/astral-sh/ruff/pull/4971) ##### Settings - Option (`-o`/`--output-file`) to write output to a file by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4950](https://togithub.com/astral-sh/ruff/pull/4950) - Add JSON Lines (NDJSON) message serialization by [@​akx](https://togithub.com/akx) in [https://github.com/astral-sh/ruff/pull/5048](https://togithub.com/astral-sh/ruff/pull/5048) - Add rule documentation URL to JSON output by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5187](https://togithub.com/astral-sh/ruff/pull/5187) ##### Caching - Only use a single cache file per Python package by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5117](https://togithub.com/astral-sh/ruff/pull/5117) - Open cache files in parallel by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5120](https://togithub.com/astral-sh/ruff/pull/5120) ##### Jupyter - Add support for auto-fix in Jupyter notebooks by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/4665](https://togithub.com/astral-sh/ruff/pull/4665) - Add roundtrip support for Jupyter notebook by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5028](https://togithub.com/astral-sh/ruff/pull/5028) ##### Bug Fixes - Handle decorators in class-parenthesis-modifying rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5034](https://togithub.com/astral-sh/ruff/pull/5034) - Allow re-assignments to `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4967](https://togithub.com/astral-sh/ruff/pull/4967) - Handled dict and set inside f-string ([#​4249](https://togithub.com/astral-sh/ruff/issues/4249)) by [@​DavideCanton](https://togithub.com/DavideCanton) in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - Support concatenated string key removals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4976](https://togithub.com/astral-sh/ruff/pull/4976) - Respect 'is not' operators split across newlines by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4977](https://togithub.com/astral-sh/ruff/pull/4977) - Parenthesize expressions prior to lexing in F632 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5001](https://togithub.com/astral-sh/ruff/pull/5001) - Ignore pyproject.toml for adding noqa directives by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/astral-sh/ruff/pull/5013](https://togithub.com/astral-sh/ruff/pull/5013) - Support 'reason' argument to `pytest.fail` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5040](https://togithub.com/astral-sh/ruff/pull/5040) - Allow `async with` in `redefined-loop-name` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5125](https://togithub.com/astral-sh/ruff/pull/5125) - Skip `DJ008` enforcement in stub files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5139](https://togithub.com/astral-sh/ruff/pull/5139) - Detect continuations at start-of-file by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5173](https://togithub.com/astral-sh/ruff/pull/5173) - Fix allowed-ellipsis detection by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5174](https://togithub.com/astral-sh/ruff/pull/5174) - Remove continuations before trailing semicolons by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5199](https://togithub.com/astral-sh/ruff/pull/5199) - Support parenthesized expressions when splitting compound assertions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5219](https://togithub.com/astral-sh/ruff/pull/5219) - Use phf for confusables to reduce llvm lines by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/4926](https://togithub.com/astral-sh/ruff/pull/4926) - Allow private accesses within special dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4968](https://togithub.com/astral-sh/ruff/pull/4968) - Support concatenated literals in format-literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/4974](https://togithub.com/astral-sh/ruff/pull/4974) - Fix line numbers in source frames by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/astral-sh/ruff/pull/4984](https://togithub.com/astral-sh/ruff/pull/4984) - Suggest combining async with statements by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5022](https://togithub.com/astral-sh/ruff/pull/5022) - Improve `TypedDict` conversion logic for shadowed builtins and dunder methods by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5038](https://togithub.com/astral-sh/ruff/pull/5038) - Support glob patterns in pep8\_naming ignore-names by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5024](https://togithub.com/astral-sh/ruff/pull/5024) - Respect all `__all__` definitions for docstring visibility by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5052](https://togithub.com/astral-sh/ruff/pull/5052) - Don't treat annotations as resolved in forward references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5060](https://togithub.com/astral-sh/ruff/pull/5060) - Consider ignore-names in all pep8 naming rules by [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) in [https://github.com/astral-sh/ruff/pull/5079](https://togithub.com/astral-sh/ruff/pull/5079) - Ignore `reimplemented-builtin` if using `await` by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/astral-sh/ruff/pull/5101](https://togithub.com/astral-sh/ruff/pull/5101) - Allow space in filename for powershell + windows + python module by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5115](https://togithub.com/astral-sh/ruff/pull/5115) - Don't treat straight imports of **future** as `__future__` imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5128](https://togithub.com/astral-sh/ruff/pull/5128) - Remove continuations when deleting statements by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/astral-sh/ruff/pull/5198](https://togithub.com/astral-sh/ruff/pull/5198) - Fix corner case involving terminal backslash after fixing `W293` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/astral-sh/ruff/pull/5172](https://togithub.com/astral-sh/ruff/pull/5172) - Fix subprocess.run on Windows Python 3.7 by [@​konstin](https://togithub.com/konstin) in [https://github.com/astral-sh/ruff/pull/5220](https://togithub.com/astral-sh/ruff/pull/5220) #### New Contributors - [@​rodjunger](https://togithub.com/rodjunger) made their first contribution in [https://github.com/astral-sh/ruff/pull/4929](https://togithub.com/astral-sh/ruff/pull/4929) - [@​DavideCanton](https://togithub.com/DavideCanton) made their first contribution in [https://github.com/astral-sh/ruff/pull/4563](https://togithub.com/astral-sh/ruff/pull/4563) - [@​Thomasdezeeuw](https://togithub.com/Thomasdezeeuw) made their first contribution in [https://github.com/astral-sh/ruff/pull/5021](https://togithub.com/astral-sh/ruff/pull/5021) - [@​adampauls](https://togithub.com/adampauls) made their first contribution in [https://github.com/astral-sh/ruff/pull/4390](https://togithub.com/astral-sh/ruff/pull/4390) - [@​tkukushkin](https://togithub.com/tkukushkin) made their first contribution in [https://github.com/astral-sh/ruff/pull/4853](https://togithub.com/astral-sh/ruff/pull/4853) - [@​Taybou](https://togithub.com/Taybou) made their first contribution in [https://github.com/astral-sh/ruff/pull/5088](https://togithub.com/astral-sh/ruff/pull/5088) - [@​davidszotten](https://togithub.com/davidszotten) made their first contribution in [https://github.com/astral-sh/ruff/pull/5158](https://togithub.com/astral-sh/ruff/pull/5158) - [@​dosisod](https://togithub.com/dosisod) made their first contribution in [https://github.com/astral-sh/ruff/pull/5203](https://togithub.com/astral-sh/ruff/pull/5203) **Full Changelog**: astral-sh/ruff@v0.0.272...v0.0.273 </details> <details> <summary>pytest-dev/pytest (pytest/pytest)</summary> ### [`v7.4.0`](https://togithub.com/pytest-dev/pytest/releases/tag/7.4.0) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/7.3.2...7.4.0) # pytest 7.4.0 (2023-06-23) ## Features - [#​10901](https://togithub.com/pytest-dev/pytest/issues/10901): Added `ExceptionInfo.from_exception() <pytest.ExceptionInfo.from_exception>`{.interpreted-text role="func"}, a simpler way to create an `~pytest.ExceptionInfo`{.interpreted-text role="class"} from an exception. This can replace `ExceptionInfo.from_exc_info() <pytest.ExceptionInfo.from_exc_info()>`{.interpreted-text role="func"} for most uses. ## Improvements - [#​10872](https://togithub.com/pytest-dev/pytest/issues/10872): Update test log report annotation to named tuple and fixed inconsistency in docs for `pytest_report_teststatus`{.interpreted-text role="hook"} hook. - [#​10907](https://togithub.com/pytest-dev/pytest/issues/10907): When an exception traceback to be displayed is completely filtered out (by mechanisms such as `__tracebackhide__`, internal frames, and similar), now only the exception string and the following message are shown: "All traceback entries are hidden. Pass \[--full-trace]{.title-ref} to see hidden and internal frames.". Previously, the last frame of the traceback was shown, even though it was hidden. - [#​10940](https://togithub.com/pytest-dev/pytest/issues/10940): Improved verbose output (`-vv`) of `skip` and `xfail` reasons by performing text wrapping while leaving a clear margin for progress output. Added `TerminalReporter.wrap_write()` as a helper for that. - [#​10991](https://togithub.com/pytest-dev/pytest/issues/10991): Added handling of `%f` directive to print microseconds in log format options, such as `log-date-format`. - [#​11005](https://togithub.com/pytest-dev/pytest/issues/11005): Added the underlying exception to the cache provider's path creation and write warning messages. - [#​11013](https://togithub.com/pytest-dev/pytest/issues/11013): Added warning when `testpaths`{.interpreted-text role="confval"} is set, but paths are not found by glob. In this case, pytest will fall back to searching from the current directory. - [#​11043](https://togithub.com/pytest-dev/pytest/issues/11043): When \[--confcutdir]{.title-ref} is not specified, and there is no config file present, the conftest cutoff directory (\[--confcutdir]{.title-ref}) is now set to the `rootdir <rootdir>`{.interpreted-text role="ref"}. Previously in such cases, \[conftest.py]{.title-ref} files would be probed all the way to the root directory of the filesystem. If you are badly affected by this change, consider adding an empty config file to your desired cutoff directory, or explicitly set \[--confcutdir]{.title-ref}. - [#​11081](https://togithub.com/pytest-dev/pytest/issues/11081): The `norecursedirs`{.interpreted-text role="confval"} check is now performed in a `pytest_ignore_collect`{.interpreted-text role="hook"} implementation, so plugins can affect it. If after updating to this version you see that your \[norecursedirs]{.title-ref} setting is not being respected, it means that a conftest or a plugin you use has a bad \[pytest_ignore_collect]{.title-ref} implementation. Most likely, your hook returns \[False]{.title-ref} for paths it does not want to ignore, which ends the processing and doesn't allow other plugins, including pytest itself, to ignore the path. The fix is to return \[None]{.title-ref} instead of \[False]{.title-ref} for paths your hook doesn't want to ignore. - [#​8711](https://togithub.com/pytest-dev/pytest/issues/8711): `caplog.set_level() <pytest.LogCaptureFixture.set_level>`{.interpreted-text role="func"} and `caplog.at_level() <pytest.LogCaptureFixture.at_level>`{.interpreted-text role="func"} will temporarily enable the requested `level` if `level` was disabled globally via `logging.disable(LEVEL)`. ## Bug Fixes - [#​10831](https://togithub.com/pytest-dev/pytest/issues/10831): Terminal Reporting: Fixed bug when running in `--tb=line` mode where `pytest.fail(pytrace=False)` tests report `None`. - [#​11068](https://togithub.com/pytest-dev/pytest/issues/11068): Fixed the `--last-failed` whole-file skipping functionality ("skipped N files") for `non-python test files <non-python tests>`{.interpreted-text role="ref"}. - [#​11104](https://togithub.com/pytest-dev/pytest/issues/11104): Fixed a regression in pytest 7.3.2 which caused to `testpaths`{.interpreted-text role="confval"} to be considered for loading initial conftests, even when it was not utilized (e.g. when explicit paths were given on the command line). Now the `testpaths` are only considered when they are in use. - [#​1904](https://togithub.com/pytest-dev/pytest/issues/1904): Fixed traceback entries hidden with `__tracebackhide__ = True` still being shown for chained exceptions (parts after "... the above exception ..." message). - [#​7781](https://togithub.com/pytest-dev/pytest/issues/7781): Fix writing non-encodable text to log file when using `--debug`. ## Improved Documentation - [#​9146](https://togithub.com/pytest-dev/pytest/issues/9146): Improved documentation for `caplog.set_level() <pytest.LogCaptureFixture.set_level>`{.interpreted-text role="func"}. ## Trivial/Internal Changes - [#​11031](https://togithub.com/pytest-dev/pytest/issues/11031): Enhanced the CLI flag for `-c` to now include `--config-file` to make it clear that this flag applies to the usage of a custom config file. ### [`v7.3.2`](https://togithub.com/pytest-dev/pytest/releases/tag/7.3.2) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/7.3.1...7.3.2) # pytest 7.3.2 (2023-06-10) ## Bug Fixes - [#​10169](https://togithub.com/pytest-dev/pytest/issues/10169): Fix bug where very long option names could cause pytest to break with `OSError: [Errno 36] File name too long` on some systems. - [#​10894](https://togithub.com/pytest-dev/pytest/issues/10894): Support for Python 3.12 (beta at the time of writing). - [#​10987](https://togithub.com/pytest-dev/pytest/issues/10987): `testpaths`{.interpreted-text role="confval"} is now honored to load root `conftests`. - [#​10999](https://togithub.com/pytest-dev/pytest/issues/10999): The \[monkeypatch]{.title-ref} \[setitem]{.title-ref}/\[delitem]{.title-ref} type annotations now allow \[TypedDict]{.title-ref} arguments. - [#​11028](https://togithub.com/pytest-dev/pytest/issues/11028): Fixed bug in assertion rewriting where a variable assigned with the walrus operator could not be used later in a function call. - [#​11054](https://togithub.com/pytest-dev/pytest/issues/11054): Fixed `--last-failed`'s "(skipped N files)" functionality for files inside of packages (directories with \[\__init\_\_.py]{.title-ref} files). </details> <details> <summary>pytest-dev/pytest-mock (pytest/pytest-mock)</summary> ### [`v3.11.1`](https://togithub.com/pytest-dev/pytest-mock/blob/HEAD/CHANGELOG.rst#​3111-2023-06-15) [Compare Source](https://togithub.com/pytest-dev/pytest-mock/compare/v3.11.0...v3.11.1) (This release source code is identical to `3.11.0` except a small internal fix to deployment/CI) - Fixed introspection for failed `assert_has_calls` (`#365`\_). - Updated type annotations for `mocker.patch` and `mocker.spy` (`#364`\_). .. \_#̴[https://github.com/pytest-dev/pytest-mock/pull/365](https://togithub.com/pytest-dev/pytest-mock/pull/365)ull/365 .. \[https://github.com/pytest-dev/pytest-mock/pull/364](https://togithub.com/pytest-dev/pytest-mock/pull/364)-mock/pull/364 ### [`v3.11.0`](https://togithub.com/pytest-dev/pytest-mock/blob/HEAD/CHANGELOG.rst#​3110-2023-06-15) [Compare Source](https://togithub.com/pytest-dev/pytest-mock/compare/v3.10.0...v3.11.0) - Fixed introspection for failed `assert_has_calls` (`#365`\_). - Updated type annotations for `mocker.patch` and `mocker.spy` (`#364`\_). .. \_#̴[https://github.com/pytest-dev/pytest-mock/pull/365](https://togithub.com/pytest-dev/pytest-mock/pull/365)ull/365 .. \[https://github.com/pytest-dev/pytest-mock/pull/364](https://togithub.com/pytest-dev/pytest-mock/pull/364)-mock/pull/364 </details> <details> <summary>python/mypy (typecheck/mypy)</summary> ### [`v1.4.0`](https://togithub.com/python/mypy/compare/v1.3.0...v1.4.0) [Compare Source](https://togithub.com/python/mypy/compare/v1.3.0...v1.4.0) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every 3 months on the first day of the month" (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://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/AlexWaygood/typeshed-stats). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNDQuMiIsInVwZGF0ZWRJblZlciI6IjM1LjE0NC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Summary
Add initial support for applying auto-fixes in Jupyter Notebook.
Solution
Cell offsets are the boundaries for each cell in the concatenated source code. They are represented using
TextSize. It includes the start and end offset as well, thus creating a range for each cell. These offsets are updated using theSourceMapmarkers.SourceMap
SourceMapcontains markers constructed from each edits which tracks the original source code position to the transformed positions. The following drawing might make it clear:The center column where the dotted lines are present are the markers included in the
SourceMap. TheNotebooklooks at these markers and updates the cell offsets after each linter loop. If you notice closely, the destination takes into account all of the markers before it.The index is constructed only when required as it's only used to render the diagnostics. So, a
OnceCellis used for this purpose. The cell offsets, cell content and the index will be updated after each iteration of linting in the mentioned order. The order is important here as the content is updated as per the new offsets and index is updated as per the new content.Limitations
1 (resolved d721923)
Auto-fixes which spans across multiple cell will panic. This is because it's difficult to determine which part of the edit content belongs to which cell. This mainly includes the import sorter in the following scenario where there are 2 continuous cells with import statements:
(The commented line break is just to visualize cell separation and is not part of the code.)
Here, the concatenated content would be:
And the formatted output would be:
Now, it's not possible to determine which part of the content belongs to which cell and even if we try to update it as per the line count the context will change as an import might move out from the actual cell.
Possible solutions:
Editwhich spans across multiple cells but this creates a problem in the lint loop. Take the above code as an example where there are 2 cells containing import statements which needs to be sorted. Now, this edit will span both cells, we'll ignore this edit, in the next iteration the same edit will be created and ignored and this will go on till we reachMAX_ITERATION.Editis scoped to an entire import block, we could refactor the sorter to create individual edits such as move this import statement from line 4 to line 2, remove this import statement, remove this symbol from this import statement, add a symbol to this import statement, etc. We would have to think about how to represent an edit like separating each symbol on it's own line (black style).2
Styling rules such as the ones in
pycodestylewill not be applicable everywhere in Jupyter notebook, especially at the cell boundaries. Let's take an example where a rule suggests to have 2 blank lines before a function and the cells contains the following code:(Again, the comment is only to visualize cell boundaries.)
In the concatenated source code, the 2 blank lines will be added but it shouldn't actually be added when we look in terms of Jupyter notebook. It's as if the function
firstis at the start of a file.nbqasolves this by recording newlines before and after runningautopep8, then running the tool and restoring the newlines at the end (refer nbQA-dev/nbQA#807).Test Plan
Three commands were run in order with common flags (
--select=ALL --no-cache --isolated) to isolate which stage the problem is occurring:--fix --diff)--fix)https://github.com/facebookresearch/segment-anything
https://github.com/openai/openai-cookbook
https://github.com/tensorflow/docs
These repository includes some notebooks where it panics because an edit spans across multiple cells. This is due to the import statements are in 2 or more continuous cells.(resolved d721923)https://github.com/tensorflow/models
To-Do:
Revert back the auto-fixes if the linter loop panics (as is done for Python files)nbformat(only for testing purposes)Add roundtrip support (this will most likely be done with the second todo)(different PR)%,!,?) on any cells (this will ignore cells which contains code as well as magic commands).Just for backup, ignore any cells containing syntax errorAdd--diffpreview for Jupyter notebook--fixflag will try to add the newline, but we'll remove it before updating the cell and this loop will go on.resolves: #1218
fixes: #4556