Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce explcit clones #3793

Merged
merged 1 commit into from
Mar 29, 2023
Merged

Reduce explcit clones #3793

merged 1 commit into from
Mar 29, 2023

Conversation

MichaReiser
Copy link
Member

@MichaReiser MichaReiser commented Mar 29, 2023

This PR removes some explicit clone in the code base by:

  • Deriving Copy for field-less enums and pass them by value. This won't improve performance but signals to readers that copying is cheap.
  • Avoid cloning scopes and parents during the deferred checking phase. Cloning isn't necessary because scopes and parents are append-only, and truncate is sufficient to restore them to their previous state.

I used this opportunity to align the deferred checks and replaced the

self.deferred.list.reverse();

while let Some((...)) = self.deferred.list.pop() {
	...
}

with

while !self.deferred.list.is_empty() {
	let list = std::mem::take(&mut self.deferred.list);
	
	for item in list {
		...
	}
}

This has the advantage that we avoid reversing the list (O(n)) and fixes the potential bug where an item added to self.deferred.list during traversal is processed before the other deferred items (because reverse is called before the loop)

CPython Benchmark

The performance improves a little.

hyperfine --warmup 10 \
             "./ruff-main ./crates/ruff/resources/test/cpython/ --no-cache -e --select=ALL" \
             "./target/release/ruff ./crates/ruff/resources/test/cpython/ --no-cache -e --select=ALL"
Benchmark 1: ./ruff-main ./crates/ruff/resources/test/cpython/ --no-cache -e --select=ALL
  Time (mean ± σ):     786.2 ms ±  14.6 ms    [User: 7788.2 ms, System: 306.2 ms]
  Range (minmax):   766.3 ms811.4 ms    10 runs
 
Benchmark 2: ./target/release/ruff ./crates/ruff/resources/test/cpython/ --no-cache -e --select=ALL
  Time (mean ± σ):     775.4 ms ±  14.0 ms    [User: 7784.1 ms, System: 274.0 ms]
  Range (minmax):   755.4 ms801.5 ms    10 runs
 
Summary
  './target/release/ruff ./crates/ruff/resources/test/cpython/ --no-cache -e --select=ALL' ran
    1.01 ± 0.03 times faster than './ruff-main ./crates/ruff/resources/test/cpython/ --no-cache -e --select=ALL'

@MichaReiser
Copy link
Member Author

Current dependencies on/for this PR:

This comment was auto-generated by Graphite.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 29, 2023

PR Check Results

Ecosystem

✅ ecosystem check detected no changes.

Benchmark

Linux

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     14.6±0.02ms     2.8 MB/sec    1.01     14.7±0.03ms     2.8 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      3.8±0.01ms     4.4 MB/sec    1.00      3.8±0.00ms     4.4 MB/sec
linter/all-rules/numpy/globals.py          1.00    411.9±1.86µs     7.2 MB/sec    1.02    418.1±6.34µs     7.1 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.3±0.01ms     4.0 MB/sec    1.00      6.4±0.01ms     4.0 MB/sec
linter/default-rules/large/dataset.py      1.00      7.8±0.01ms     5.2 MB/sec    1.00      7.8±0.01ms     5.2 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00   1726.5±4.18µs     9.6 MB/sec    1.00   1722.5±2.33µs     9.7 MB/sec
linter/default-rules/numpy/globals.py      1.00    181.3±0.38µs    16.3 MB/sec    1.01    183.3±0.95µs    16.1 MB/sec
linter/default-rules/pydantic/types.py     1.00      3.6±0.01ms     7.1 MB/sec    1.00      3.6±0.01ms     7.0 MB/sec

Windows

group                                      main                                   pr
-----                                      ----                                   --
linter/all-rules/large/dataset.py          1.00     15.6±0.07ms     2.6 MB/sec    1.00     15.6±0.08ms     2.6 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      4.1±0.03ms     4.0 MB/sec    1.01      4.2±0.03ms     4.0 MB/sec
linter/all-rules/numpy/globals.py          1.00    436.2±5.68µs     6.8 MB/sec    1.01    439.7±4.02µs     6.7 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.7±0.02ms     3.8 MB/sec    1.01      6.8±0.02ms     3.8 MB/sec
linter/default-rules/large/dataset.py      1.00      8.1±0.02ms     5.0 MB/sec    1.02      8.3±0.03ms     4.9 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00   1752.8±8.74µs     9.5 MB/sec    1.02   1796.2±7.75µs     9.3 MB/sec
linter/default-rules/numpy/globals.py      1.00    184.9±1.37µs    16.0 MB/sec    1.01    187.5±2.92µs    15.7 MB/sec
linter/default-rules/pydantic/types.py     1.00      3.7±0.02ms     6.9 MB/sec    1.02      3.8±0.01ms     6.7 MB/sec

@MichaReiser MichaReiser force-pushed the reduce-clones branch 2 times, most recently from 7a5076f to 5c7dcbb Compare March 29, 2023 11:35
self.deferred.definitions.push((
definition,
scope.visibility.clone(),
scope.visibility,
(self.ctx.scope_stack.clone(), self.ctx.parents.clone()),
Copy link
Member Author

Choose a reason for hiding this comment

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

Cloning the whole stack here (and when adding to dead_scopes is something we should look at at some point.

I think we could reduce the cost of cloning by:

  • Having one Vec<ScopeInternal> that stores all existing scopes
  • ScopeInternal is a Scope without its id. The is implicit by the position of the Scope in the vector.
  • Add a parent: Option<ScopeId> to scope to allow upwards traversal.
  • Change ScopeStack to Vec<ScopeId>

I need to look closer into what parents is used for

Copy link
Member

Choose a reason for hiding this comment

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

parents is the stack of statements that are parents of the current statement (so e.g. if we're looking at a function definition inside of a class, it might have a parents of vec![ClassDef { ... }]).

Copy link
Member Author

Choose a reason for hiding this comment

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

Thx!

}
}
}
}

fn check_deferred_for_loops(&mut self) {
self.deferred.for_loops.reverse();
while let Some((stmt, (scopes, parents))) = self.deferred.for_loops.pop() {
self.ctx.scope_stack = scopes.clone();
Copy link
Member Author

Choose a reason for hiding this comment

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

I'm surprised that clippy didn't flag this unnecessary clone

@MichaReiser MichaReiser marked this pull request as ready for review March 29, 2023 11:48
Copy link
Member

@charliermarsh charliermarsh left a comment

Choose a reason for hiding this comment

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

Great change.

@MichaReiser MichaReiser changed the title Reduce clone calls Reduce explcit clones Mar 29, 2023
@MichaReiser MichaReiser merged commit 595cd06 into main Mar 29, 2023
@MichaReiser MichaReiser deleted the reduce-clones branch March 29, 2023 13:15
renovate bot added a commit to ixm-one/pytest-cmake-presets that referenced this pull request Mar 30, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff) | `^0.0.259` ->
`^0.0.260` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/compatibility-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/confidence-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.260`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.260)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.259...v0.0.260)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`flake8-bugbear`] Add more immutable functions for `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[astral-sh/ruff#3764
- \[`flake8-bugbear`] Allow `pathlib.Path()` in `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[astral-sh/ruff#3794
- \[`flake8-bugbear`] Expand the scope of useless-expression (B018) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3455
- \[`flake8-bugbear`]: Implement rule `B031` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3680
- \[`flake8-gettext`] Implement `flake8-gettext` by
[@&#8203;leiserfg](https://togithub.com/leiserfg) in
[astral-sh/ruff#3785
- \[`flake8-logging-format`] Add support for `.log(level, msg)` calls in
`flake8-logging-format` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3726
- \[`flake8-logging-format`] Allow aliased `logging` module as a logger
candidate by [@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3718
- \[`flake8-pyi`] Add autofix for `PYI014` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3729
- \[`flake8-pyi`] Implement `PYI012` by
[@&#8203;JBLDKY](https://togithub.com/JBLDKY) in
[astral-sh/ruff#3743
- \[`flake8-pyi`] Implement `PYI015` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3728
- \[`flake8-simplify`] Fix SIM222 and SIM223 false negative by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3740
- \[`isort`]: support submodules in known\_(first|third)\_party config
options by [@&#8203;astaric](https://togithub.com/astaric) in
[astral-sh/ruff#3768
- \[`pycodestyle`] Use unicode-width to determine line-length instead of
character count by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#3714
- \[`pydocstyle`] Implement autofix for `D403` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3731
- \[`pylint`] Avoid `useless-import alias` (`C0414`) in `.pyi` files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3761
- \[`pylint`] Exempt `PLR1711` and `RET501` if non-`None` annotation by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3705
- \[`tryceratops`] Exempt return with side effects for TRY300 by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3780

##### Bug Fixes

- Avoid parsing `ForwardRef` contents as type references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3698
- Avoid parsing f-strings in type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3699
- Include `with` statements in complexity calculation by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3771
- Use import alias locations for `pep8-naming` import rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3772
- Allow `TID252` to fix all valid module paths by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3796
- Fix SIM118 auto-fix by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3695
- Avoid panics for implicitly concatenated forward references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3700
- Allow simple container literals as default values by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3703
- Traverse over nested string type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3724
- Use `wild::args()` and add `wild` as a dependency by
[@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) in
[astral-sh/ruff#3739
- Avoid overlong-line errors for lines that end with URLs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3663
- Sort statistics by count by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3748
- Reduce explicit clones by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#3793
- Add flymake-ruff to docs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3800

#### New Contributors

- [@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) made
their first contribution in
[astral-sh/ruff#3739
- [@&#8203;leiserfg](https://togithub.com/leiserfg) made their first
contribution in
[astral-sh/ruff#3741
- [@&#8203;JBLDKY](https://togithub.com/JBLDKY) made their first
contribution in
[astral-sh/ruff#3743
- [@&#8203;astaric](https://togithub.com/astaric) made their first
contribution in
[astral-sh/ruff#3768

**Full Changelog**:
astral-sh/ruff@v0.0.259...v0.0.260

</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://app.renovatebot.com/dashboard#github/ixm-one/pytest-cmake-presets).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMi4xIiwidXBkYXRlZEluVmVyIjoiMzUuMjIuMSJ9-->

Signed-off-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot added a commit to allenporter/pyrainbird that referenced this pull request Mar 31, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff) | `==0.0.259` ->
`==0.0.260` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/compatibility-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/confidence-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.260`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.260)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.259...v0.0.260)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`flake8-bugbear`] Add more immutable functions for `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[astral-sh/ruff#3764
- \[`flake8-bugbear`] Allow `pathlib.Path()` in `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[astral-sh/ruff#3794
- \[`flake8-bugbear`] Expand the scope of useless-expression (B018) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3455
- \[`flake8-bugbear`]: Implement rule `B031` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3680
- \[`flake8-gettext`] Implement `flake8-gettext` by
[@&#8203;leiserfg](https://togithub.com/leiserfg) in
[astral-sh/ruff#3785
- \[`flake8-logging-format`] Add support for `.log(level, msg)` calls in
`flake8-logging-format` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3726
- \[`flake8-logging-format`] Allow aliased `logging` module as a logger
candidate by [@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3718
- \[`flake8-pyi`] Add autofix for `PYI014` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3729
- \[`flake8-pyi`] Implement `PYI012` by
[@&#8203;JBLDKY](https://togithub.com/JBLDKY) in
[astral-sh/ruff#3743
- \[`flake8-pyi`] Implement `PYI015` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3728
- \[`flake8-simplify`] Fix SIM222 and SIM223 false negative by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3740
- \[`isort`]: support submodules in known\_(first|third)\_party config
options by [@&#8203;astaric](https://togithub.com/astaric) in
[astral-sh/ruff#3768
- \[`pycodestyle`] Use unicode-width to determine line-length instead of
character count by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#3714
- \[`pydocstyle`] Implement autofix for `D403` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3731
- \[`pylint`] Avoid `useless-import alias` (`C0414`) in `.pyi` files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3761
- \[`pylint`] Exempt `PLR1711` and `RET501` if non-`None` annotation by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3705
- \[`tryceratops`] Exempt return with side effects for TRY300 by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3780

##### Bug Fixes

- Avoid parsing `ForwardRef` contents as type references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3698
- Avoid parsing f-strings in type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3699
- Include `with` statements in complexity calculation by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3771
- Use import alias locations for `pep8-naming` import rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3772
- Allow `TID252` to fix all valid module paths by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3796
- Fix SIM118 auto-fix by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3695
- Avoid panics for implicitly concatenated forward references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3700
- Allow simple container literals as default values by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3703
- Traverse over nested string type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3724
- Use `wild::args()` and add `wild` as a dependency by
[@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) in
[astral-sh/ruff#3739
- Avoid overlong-line errors for lines that end with URLs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3663
- Sort statistics by count by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3748
- Reduce explicit clones by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#3793
- Add flymake-ruff to docs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3800

#### New Contributors

- [@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) made
their first contribution in
[astral-sh/ruff#3739
- [@&#8203;leiserfg](https://togithub.com/leiserfg) made their first
contribution in
[astral-sh/ruff#3741
- [@&#8203;JBLDKY](https://togithub.com/JBLDKY) made their first
contribution in
[astral-sh/ruff#3743
- [@&#8203;astaric](https://togithub.com/astaric) made their first
contribution in
[astral-sh/ruff#3768

**Full Changelog**:
astral-sh/ruff@v0.0.259...v0.0.260

</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://app.renovatebot.com/dashboard#github/allenporter/pyrainbird).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMy4zIiwidXBkYXRlZEluVmVyIjoiMzUuMjMuMyJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot added a commit to allenporter/flux-local that referenced this pull request Apr 1, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ruff](https://togithub.com/charliermarsh/ruff) | `==0.0.259` ->
`==0.0.260` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/compatibility-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.260/confidence-slim/0.0.259)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.260`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.260)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.259...v0.0.260)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`flake8-bugbear`] Add more immutable functions for `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[astral-sh/ruff#3764
- \[`flake8-bugbear`] Allow `pathlib.Path()` in `B008` by
[@&#8203;rouge8](https://togithub.com/rouge8) in
[astral-sh/ruff#3794
- \[`flake8-bugbear`] Expand the scope of useless-expression (B018) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3455
- \[`flake8-bugbear`]: Implement rule `B031` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3680
- \[`flake8-gettext`] Implement `flake8-gettext` by
[@&#8203;leiserfg](https://togithub.com/leiserfg) in
[astral-sh/ruff#3785
- \[`flake8-logging-format`] Add support for `.log(level, msg)` calls in
`flake8-logging-format` by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3726
- \[`flake8-logging-format`] Allow aliased `logging` module as a logger
candidate by [@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[astral-sh/ruff#3718
- \[`flake8-pyi`] Add autofix for `PYI014` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3729
- \[`flake8-pyi`] Implement `PYI012` by
[@&#8203;JBLDKY](https://togithub.com/JBLDKY) in
[astral-sh/ruff#3743
- \[`flake8-pyi`] Implement `PYI015` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3728
- \[`flake8-simplify`] Fix SIM222 and SIM223 false negative by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3740
- \[`isort`]: support submodules in known\_(first|third)\_party config
options by [@&#8203;astaric](https://togithub.com/astaric) in
[astral-sh/ruff#3768
- \[`pycodestyle`] Use unicode-width to determine line-length instead of
character count by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#3714
- \[`pydocstyle`] Implement autofix for `D403` by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3731
- \[`pylint`] Avoid `useless-import alias` (`C0414`) in `.pyi` files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3761
- \[`pylint`] Exempt `PLR1711` and `RET501` if non-`None` annotation by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3705
- \[`tryceratops`] Exempt return with side effects for TRY300 by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3780

##### Bug Fixes

- Avoid parsing `ForwardRef` contents as type references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3698
- Avoid parsing f-strings in type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3699
- Include `with` statements in complexity calculation by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3771
- Use import alias locations for `pep8-naming` import rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3772
- Allow `TID252` to fix all valid module paths by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3796
- Fix SIM118 auto-fix by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3695
- Avoid panics for implicitly concatenated forward references by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3700
- Allow simple container literals as default values by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3703
- Traverse over nested string type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3724
- Use `wild::args()` and add `wild` as a dependency by
[@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) in
[astral-sh/ruff#3739
- Avoid overlong-line errors for lines that end with URLs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3663
- Sort statistics by count by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[astral-sh/ruff#3748
- Reduce explicit clones by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[astral-sh/ruff#3793
- Add flymake-ruff to docs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[astral-sh/ruff#3800

#### New Contributors

- [@&#8203;agriyakhetarpal](https://togithub.com/agriyakhetarpal) made
their first contribution in
[astral-sh/ruff#3739
- [@&#8203;leiserfg](https://togithub.com/leiserfg) made their first
contribution in
[astral-sh/ruff#3741
- [@&#8203;JBLDKY](https://togithub.com/JBLDKY) made their first
contribution in
[astral-sh/ruff#3743
- [@&#8203;astaric](https://togithub.com/astaric) made their first
contribution in
[astral-sh/ruff#3768

**Full Changelog**:
astral-sh/ruff@v0.0.259...v0.0.260

</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://app.renovatebot.com/dashboard#github/allenporter/flux-local).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMi4xIiwidXBkYXRlZEluVmVyIjoiMzUuMjIuMSJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants