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

Fix WithItem ranges for parenthesized, non-as items #6782

Merged
merged 1 commit into from
Aug 31, 2023

Conversation

charliermarsh
Copy link
Member

@charliermarsh charliermarsh commented Aug 22, 2023

Summary

This PR attempts to address a problem in the parser related to the range's of WithItem nodes in certain contexts -- specifically, WithItem nodes in parentheses that do not have an as token after them.

For example, here:

with (a, b):
    pass

The range of the WithItem a is set to the range of (a, b), as is the range of the WithItem b. In other words, when we have this kind of sequence, we use the range of the entire parenthesized context, rather than the ranges of the items themselves.

Note that this also applies to cases like:

with (a, b, c as d):
    pass

You can see the issue in the parser here:

#[inline]
WithItemsNoAs: Vec<ast::WithItem> = {
    <location:@L> <all:OneOrMore<Test<"all">>> <end_location:@R> => {
        all.into_iter().map(|context_expr| ast::WithItem { context_expr, optional_vars: None, range: (location..end_location).into() }).collect()
    },
}

Fixing this issue is... very tricky. The naive approach is to use the range of the context_expr as the range for the WithItem, but that range will be incorrect when the context_expr is itself parenthesized. For example, that solution would fail here, since the range of the first WithItem would be that of a, rather than (a):

with ((a), b):
    pass

The with parsing in general is highly precarious due to ambiguities in the grammar. Changing it in any way seems to lead to an ambiguous grammar that LALRPOP fails to translate. Consensus seems to be that we don't really understand why the current grammar works (i.e., how it avoids these ambiguities as-is).

The solution implemented here is to avoid changing the grammar itself, and instead change the shape of the nodes returned by various rules in the grammar. Specifically, everywhere that we return Expr, we instead return ParenthesizedExpr, which includes a parenthesized range and the underlying Expr itself. (If an Expr isn't parenthesized, the ranges will be equivalent.) In WithItemsNoAs, we can then use the parenthesized range as the range for the WithItem.

ast::ParenthesizedExpr {
expr: elts.into_iter().next().unwrap(),
range: (location..end_location).into(),
}
Copy link
Member Author

Choose a reason for hiding this comment

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

This is where the parser deals with parenthesize expressions. We return the full range, as well as the underlying expression, rather than discarding the range here as we are today.

<location:@L> "[" <e:ListLiteralValues?> "]"<end_location:@R> => {
let elts = e.unwrap_or_default();
let elts = e.into_iter().flatten().map(ast::Expr::from).collect();
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 guess this requires another allocation unfortunately, since we have to translate Vec<ParenthesizedExpr> to Vec<Expr>?

orelse: Box::new(orelse),
test: Box::new(test.into()),
body: Box::new(body.into()),
orelse: Box::new(orelse.into()),
Copy link
Member Author

Choose a reason for hiding this comment

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

We mostly need to add these From/Into conversions everywhere to translate between ParenthesizedExpr and Expr.

@charliermarsh
Copy link
Member Author

I am looking for feedback on the approach prior to fixing the remaining ~150 compiler errors.

@charliermarsh charliermarsh marked this pull request as ready for review August 22, 2023 22:27
@charliermarsh
Copy link
Member Author

Okay, this now compiles and does the right thing. The ranges are fixed.

is_async: false,
items: [
WithItem {
range: 566..569,
Copy link
Member Author

Choose a reason for hiding this comment

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

This is key: the length of the WithItem is 3, while the length of the inner item is 1.

@charliermarsh charliermarsh added the bug Something isn't working label Aug 22, 2023
@charliermarsh charliermarsh force-pushed the charlie/parse branch 2 times, most recently from 5fea24a to bdfc5a7 Compare August 22, 2023 23:26
@github-actions
Copy link
Contributor

github-actions bot commented Aug 22, 2023

PR Check Results

Ecosystem

✅ ecosystem check detected no changes.

@charliermarsh
Copy link
Member Author

charliermarsh commented Aug 23, 2023

Note that, on main, given:

with ((1), (2), 3 as x, (5)): pass

The last WithItem does use the full (5) range.

@charliermarsh
Copy link
Member Author

AFAICT in the CPython AST the withitems don't have ranges at all so not sure it can guide us:

Module(
    body=[
        With(
            items=[
                withitem(
                    context_expr=Constant(
                        value=1,
                        lineno=1,
                        col_offset=7,
                        end_lineno=1,
                        end_col_offset=8)),
                withitem(
                    context_expr=Constant(
                        value=2,
                        lineno=1,
                        col_offset=12,
                        end_lineno=1,
                        end_col_offset=13)),
                withitem(
                    context_expr=Constant(
                        value=3,
                        lineno=1,
                        col_offset=16,
                        end_lineno=1,
                        end_col_offset=17),
                    optional_vars=Name(
                        id='x',
                        ctx=Store(),
                        lineno=1,
                        col_offset=21,
                        end_lineno=1,
                        end_col_offset=22)),
                withitem(
                    context_expr=Constant(
                        value=5,
                        lineno=1,
                        col_offset=25,
                        end_lineno=1,
                        end_col_offset=26))],
            body=[
                Pass(
                    lineno=1,
                    col_offset=30,
                    end_lineno=1,
                    end_col_offset=34)],
            lineno=1,
            col_offset=0,
            end_lineno=1,
            end_col_offset=34)],
    type_ignores=[])

Comment on lines +3057 to +3089
#[derive(Clone, Debug)]
pub struct ParenthesizedExpr {
Copy link
Member

Choose a reason for hiding this comment

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

Can we make this type private (or pub(super) at most) and move it to parser.rs because it is mainly an internal workaround, but by no means public api

Copy link
Member Author

Choose a reason for hiding this comment

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

Unfortunately no -- it somehow becomes part of the public API in the generated LALRPOP code.

Copy link
Member

@MichaReiser MichaReiser left a comment

Choose a reason for hiding this comment

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

I'm torn on this, mainly because of

Consensus seems to be that we don't really understand why the current grammar works (i.e., how it avoids these ambiguities as-is).

and because I believe that LR(1) or LALR(1) grammars should be able to support with statements without the need for hacks (It's LL(1) grammars that the Python PEP points out are unsupported). That's why I'm convinced that the issue is somewhere else in our grammar (but yeah, LALRPOP ambiguity messages are impossible to understand).

I'm okayish with merging this when we open an issue to follow up, ideally as part of the formatter Beta. Maybe I can get some time to play around with this.

@charliermarsh
Copy link
Member Author

@MichaReiser - do you have an opinion on whether the ranges should include or exclude the parentheses? I’m torn on that myself. (Either outcome requires a code change — the PR here includes the parentheses, although that’s inconsistent with some other AST nodes, like the parenthesized pattern match case.)

@charliermarsh
Copy link
Member Author

I'm honestly not sure what's correct here.

Given:

with (a): pass

We currently omit the parentheses for the range (so the withitem has the range of a).

Given:

with (a) as b: pass

We use the full range of (a) as b as the withitem range.

@konstin
Copy link
Member

konstin commented Aug 24, 2023

Those ranges look inconvenient but correct to me. It's the same if you'd see as as a bin op:

with (a):
    pass

with (a) + b:
    pass

@MichaReiser
Copy link
Member

MichaReiser commented Aug 24, 2023

@MichaReiser - do you have an opinion on whether the ranges should include or exclude the parentheses? I’m torn on that myself. (Either outcome requires a code change — the PR here includes the parentheses, although that’s inconsistent with some other AST nodes, like the parenthesized pattern match case.)

I'm leaning towards including the range similar to tuples, where the parentheses are optional. With items are different from parenthesized expressions (and patterns) in that they don't allow nesting:

with (((a) as b)):
    pass

Isn't valid syntax

However, this does raises the question of what the expected range should be for:

with (a): pass

Is this a with item with a parenthesized expression or is the with item parenthesized, containing an expression? We would need to take a look at the grammar to understand the precedence.

Edit:
I studied the grammar and the precedence rules described in PEP617.

with_stmt:
    | 'with' '(' ','.with_item+ ','? ')' ':' block 
    | 'with' ','.with_item+ ':' [TYPE_COMMENT] block 
    | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block 
    | ASYNC 'with' ','.with_item+ ':' [TYPE_COMMENT] block 

with_item:
    | expression 'as' star_target &(',' | ')' | ':') 
    | expression 

...while a PEG parser will check if the first alternative succeeds and only if it fails, will it continue with the second or the third one in the order in which they are written. This makes the choice operator not commutative.

My understanding of this is that the a in with (a) is not a parenthesized expression, the parentheses belong to the with_stmt because the parentheses rule is the first and it succeeds parsing.

@MichaReiser
Copy link
Member

I guess the with (a) is more involved than I thought because the following is valid as well:

with (
	a,
	b
): pass

Meaning, it's not the with items that are parenthesized, but all of them.

@MichaReiser
Copy link
Member

Oh, I did read the spec incorrectly. With items that cannot be parenthesized. It's either parenthesizing all with items, or the expression in the with item.

I would still expect the WithItem range to span the full range for parenthesized expressions. This to align it with an expression statement

(a)

The range of the expression statement is 0..3, the range of the expression is 1...2

@charliermarsh
Copy link
Member Author

I might be misunderstanding your comment but with (a, b): pass is valid and it's two separate WithItems. Here are a few cases to consider:

with (a, b): pass

with (a, b) as c: pass

with ((a, b) as c): pass

with (a as b): pass

In the first case, that's two WithItem's (a and b), so both ranges should exclude the parentheses IIUC.

In the second case, it's a single WithItem that should include the parentheses.

In the third and fourth cases, that's a single WithItem. I guess it should include the outer parentheses?

@MichaReiser
Copy link
Member

MichaReiser commented Aug 24, 2023

In the third and fourth cases, that's a single WithItem. I guess it should include the outer parentheses?

No, it should not include the ranges in my view because WithItems can't have parentheses. It's the With statement that allows parentheses or the expression, but not the with item.

From ny comment aboce

I studied the grammar and the precedence rules described in PEP617.

with_stmt:
    | 'with' '(' ','.with_item+ ','? ')' ':' block 
    | 'with' ','.with_item+ ':' [TYPE_COMMENT] block 
    | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block 
    | ASYNC 'with' ','.with_item+ ':' [TYPE_COMMENT] block 

with_item:
    | expression 'as' star_target &(',' | ')' | ':') 
    | expression 

...while a PEG parser will check if the first alternative succeeds and only if it fails, will it continue with the second or the third one in the order in which they are written. This makes the choice operator not commutative.

My understanding of this is that the a in with (a) is not a parenthesized expression, the parentheses belong to the with_stmt because the parentheses rule is the first and it succeeds parsing.

What I meant that isn't valid is match (a as b), c: pass, proving that with items can't have their own parentheses.

@charliermarsh
Copy link
Member Author

charliermarsh commented Aug 24, 2023

Ah, I see, I think I was just confused by the message you posted after that, saying that it should include the parentheses. But I assume there, when you say (a), you're referring to something like:

with ((a), b):
  pass

Since in this case, the outer parentheses belong to the with statement, but the inner parentheses on (a) belong to the item?

@MichaReiser
Copy link
Member

MichaReiser commented Aug 24, 2023

Since in this case, the outer parentheses belong to the with statement, but the inner parentheses on (a) belong to the item?

yes, but we need to be careful with terminology. The parentheses belong to the expression a. But the range of the enclosing with item includes the whole expression range (including parentheses).

Copy link
Member

@MichaReiser MichaReiser left a comment

Choose a reason for hiding this comment

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

It hurts, but I think that's the best we can do without rewriting our parser 😭

I also don't fully understand why this is working. It could be poor luck, or even a bug, but we take it...

Comment on lines 1065 to 1059
<location:@L> <context_expr:Test<Goal>> <end_location:@R> if Goal != "as" => ast::WithItem {
context_expr: context_expr.into(),
optional_vars: None,
range: (location..end_location).into(),
},
<location:@L> <context_expr:Test<"all">> "as" <optional_vars:Expression<"all">> <end_location:@R> => {
Copy link
Member

Choose a reason for hiding this comment

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

Nit: We could probably use the range from the context_expr directly rather than collecting another range.

Copy link
Member Author

Choose a reason for hiding this comment

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

This is leading me down some confusing path around ranges for parenthesized named expressions in with-items 😭

},
<location:@L> "(" <elts:OneOrMore<Test<"all">>> <trailing_comma:","?> ")" <end_location:@R> if Goal != "no-withitems" => {
if elts.len() == 1 && trailing_comma.is_none() {
elts.into_iter().next().unwrap()
ast::ParenthesizedExpr {
expr: elts.into_iter().next().unwrap().into(),
Copy link
Member

Choose a reason for hiding this comment

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

into...unwrap...into what 🤯

@MichaReiser MichaReiser added the parser Related to the parser label Aug 25, 2023
@MichaReiser MichaReiser removed the bug Something isn't working label Aug 25, 2023
@charliermarsh
Copy link
Member Author

This is still getting on case wrong (sigh):

with (a := 1):
    pass

The expression rules require that the named expression is parenthesized, so the ( withitem ) case doesn't match, and it ends up being difficult to treat the parentheses as part of the WithItem.

@charliermarsh charliermarsh force-pushed the charlie/parse branch 2 times, most recently from db4d356 to a5ed1ff Compare August 30, 2023 17:25
@charliermarsh
Copy link
Member Author

Okay, this is now working in all (?) cases. I had to special-case parenthesized expressions and other expressions that "require" parentheses.

@charliermarsh
Copy link
Member Author

I now need to look into the formatter changes.

@charliermarsh
Copy link
Member Author

I also want to see the CodSpeed benchmarks.

@MichaReiser
Copy link
Member

I also want to see the CodSpeed benchmarks.

Parse time regresses by 1-2%. Can you change the codespeed threshold to 1% to see how it goes?

@MichaReiser
Copy link
Member

I now need to look into the formatter changes.

Does this mean the PR is ready to review or not? If not, can you put it back in draft state?

@charliermarsh
Copy link
Member Author

No, the PR is ready to review. Or rather, to merge? I actually didn’t expect it to be re-reviewed given that it had already been reviewed and accepted.

@charliermarsh
Copy link
Member Author

(The formatter changes are downstream of this, for example, #3711.)

@codspeed-hq
Copy link

codspeed-hq bot commented Aug 31, 2023

CodSpeed Performance Report

Merging #6782 will degrade performances by 1.73%

Comparing charlie/parse (9e2aec4) with main (f4ba0ea)

Summary

🔥 1 improvements
❌ 9 regressions
✅ 10 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Benchmark main charlie/parse Change
🔥 linter/default-rules[pydantic/types.py] 39.2 ms 38.2 ms +2.49%
linter/default-rules[numpy/ctypeslib.py] 18.2 ms 18.5 ms -1.41%
linter/default-rules[large/dataset.py] 91.5 ms 92.9 ms -1.47%
linter/all-rules[large/dataset.py] 156.9 ms 159.1 ms -1.37%
parser[numpy/globals.py] 1.4 ms 1.4 ms -1.23%
parser[numpy/ctypeslib.py] 12.5 ms 12.7 ms -1.52%
parser[unicode/pypinyin.py] 4.3 ms 4.3 ms -1.47%
parser[large/dataset.py] 68.8 ms 70 ms -1.73%
parser[pydantic/types.py] 26.8 ms 27.2 ms -1.34%
linter/default-rules[unicode/pypinyin.py] 6.3 ms 6.4 ms -1%

Finish

Trying to figure this out

Handle named expressions
@charliermarsh charliermarsh merged commit 68f605e into main Aug 31, 2023
16 checks passed
@charliermarsh charliermarsh deleted the charlie/parse branch August 31, 2023 15:21
renovate bot referenced this pull request in ixm-one/pytest-cmake-presets Sep 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://beta.ruff.rs/docs)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/releases)) | `^0.0.286`
-> `^0.0.287` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.0.287`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.287)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.286...v0.0.287)

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

#### What's Changed

##### Rules

- \[refurb] Implement previuew `repeated-append` rule (`FURB113`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- \[refurb] Implement previuew `delete-full-slice` rule (`FURB131`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6897](https://togithub.com/astral-sh/ruff/pull/6897)
- \[refurb] Implement preview `check-and-remove-from-set` rule
(`FURB132`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6904](https://togithub.com/astral-sh/ruff/pull/6904)

##### Bug Fixes

- Expand `PERF401` and `PERF402` with type checks by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6994](https://togithub.com/astral-sh/ruff/pull/6994)
- Insert space to avoid syntax error in RSE fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6886](https://togithub.com/astral-sh/ruff/pull/6886)
- Avoid PEP 604 upgrades that lead to invalid syntax by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6888](https://togithub.com/astral-sh/ruff/pull/6888)
- Fix ranges for global usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6917](https://togithub.com/astral-sh/ruff/pull/6917)
- Avoid invalid fix for C417 with separate keys and values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6954](https://togithub.com/astral-sh/ruff/pull/6954)
- Avoid panic when `typename` is provided as a keyword argument by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6955](https://togithub.com/astral-sh/ruff/pull/6955)
- Improve compatibility between multi-statement PYI rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7024](https://togithub.com/astral-sh/ruff/pull/7024)
- Fixed panic in `missing_copyright_notice` by
[@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)
- Avoid lexer infinite loop on invalid input by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6937](https://togithub.com/astral-sh/ruff/pull/6937)
- Fix `WithItem` ranges for parenthesized, non-`as` items by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6782](https://togithub.com/astral-sh/ruff/pull/6782)

#### New Contributors

- [@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- [@&#8203;Anselmoo](https://togithub.com/Anselmoo) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6986](https://togithub.com/astral-sh/ruff/pull/6986)
- [@&#8203;njgrisafi](https://togithub.com/njgrisafi) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7032](https://togithub.com/astral-sh/ruff/pull/7032)
- [@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)

**Full Changelog**:
astral-sh/ruff@v0.0.286...v0.0.287

</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:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuNjguMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
jankatins referenced this pull request in jankatins/pr-workflow-example Sep 2, 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://beta.ruff.rs/docs)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/releases)) | `0.0.286`
-> `0.0.287` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.0.287`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.287)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.286...v0.0.287)

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

#### What's Changed

##### Rules

- \[refurb] Implement previuew `repeated-append` rule (`FURB113`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- \[refurb] Implement previuew `delete-full-slice` rule (`FURB131`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6897](https://togithub.com/astral-sh/ruff/pull/6897)
- \[refurb] Implement preview `check-and-remove-from-set` rule
(`FURB132`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6904](https://togithub.com/astral-sh/ruff/pull/6904)

##### Bug Fixes

- Expand `PERF401` and `PERF402` with type checks by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6994](https://togithub.com/astral-sh/ruff/pull/6994)
- Insert space to avoid syntax error in RSE fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6886](https://togithub.com/astral-sh/ruff/pull/6886)
- Avoid PEP 604 upgrades that lead to invalid syntax by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6888](https://togithub.com/astral-sh/ruff/pull/6888)
- Fix ranges for global usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6917](https://togithub.com/astral-sh/ruff/pull/6917)
- Avoid invalid fix for C417 with separate keys and values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6954](https://togithub.com/astral-sh/ruff/pull/6954)
- Avoid panic when `typename` is provided as a keyword argument by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6955](https://togithub.com/astral-sh/ruff/pull/6955)
- Improve compatibility between multi-statement PYI rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7024](https://togithub.com/astral-sh/ruff/pull/7024)
- Fixed panic in `missing_copyright_notice` by
[@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)
- Avoid lexer infinite loop on invalid input by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6937](https://togithub.com/astral-sh/ruff/pull/6937)
- Fix `WithItem` ranges for parenthesized, non-`as` items by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6782](https://togithub.com/astral-sh/ruff/pull/6782)

#### New Contributors

- [@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- [@&#8203;Anselmoo](https://togithub.com/Anselmoo) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6986](https://togithub.com/astral-sh/ruff/pull/6986)
- [@&#8203;njgrisafi](https://togithub.com/njgrisafi) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7032](https://togithub.com/astral-sh/ruff/pull/7032)
- [@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)

**Full Changelog**:
astral-sh/ruff@v0.0.286...v0.0.287

</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:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuNjguMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->
renovate bot referenced this pull request in allenporter/flux-local Sep 2, 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://beta.ruff.rs/docs)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/releases)) | `==0.0.286`
-> `==0.0.287` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.0.287`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.287)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.286...v0.0.287)

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

#### What's Changed

##### Rules

- \[refurb] Implement previuew `repeated-append` rule (`FURB113`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- \[refurb] Implement previuew `delete-full-slice` rule (`FURB131`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6897](https://togithub.com/astral-sh/ruff/pull/6897)
- \[refurb] Implement preview `check-and-remove-from-set` rule
(`FURB132`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6904](https://togithub.com/astral-sh/ruff/pull/6904)

##### Bug Fixes

- Expand `PERF401` and `PERF402` with type checks by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6994](https://togithub.com/astral-sh/ruff/pull/6994)
- Insert space to avoid syntax error in RSE fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6886](https://togithub.com/astral-sh/ruff/pull/6886)
- Avoid PEP 604 upgrades that lead to invalid syntax by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6888](https://togithub.com/astral-sh/ruff/pull/6888)
- Fix ranges for global usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6917](https://togithub.com/astral-sh/ruff/pull/6917)
- Avoid invalid fix for C417 with separate keys and values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6954](https://togithub.com/astral-sh/ruff/pull/6954)
- Avoid panic when `typename` is provided as a keyword argument by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6955](https://togithub.com/astral-sh/ruff/pull/6955)
- Improve compatibility between multi-statement PYI rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7024](https://togithub.com/astral-sh/ruff/pull/7024)
- Fixed panic in `missing_copyright_notice` by
[@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)
- Avoid lexer infinite loop on invalid input by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6937](https://togithub.com/astral-sh/ruff/pull/6937)
- Fix `WithItem` ranges for parenthesized, non-`as` items by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6782](https://togithub.com/astral-sh/ruff/pull/6782)

#### New Contributors

- [@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- [@&#8203;Anselmoo](https://togithub.com/Anselmoo) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6986](https://togithub.com/astral-sh/ruff/pull/6986)
- [@&#8203;njgrisafi](https://togithub.com/njgrisafi) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7032](https://togithub.com/astral-sh/ruff/pull/7032)
- [@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)

**Full Changelog**:
astral-sh/ruff@v0.0.286...v0.0.287

</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:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuNjguMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate bot referenced this pull request in allenporter/pyrainbird Sep 3, 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://beta.ruff.rs/docs)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/releases)) | `==0.0.286`
-> `==0.0.287` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.286/0.0.287?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.0.287`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.287)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.286...v0.0.287)

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

#### What's Changed

##### Rules

- \[refurb] Implement previuew `repeated-append` rule (`FURB113`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- \[refurb] Implement previuew `delete-full-slice` rule (`FURB131`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6897](https://togithub.com/astral-sh/ruff/pull/6897)
- \[refurb] Implement preview `check-and-remove-from-set` rule
(`FURB132`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6904](https://togithub.com/astral-sh/ruff/pull/6904)

##### Bug Fixes

- Expand `PERF401` and `PERF402` with type checks by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6994](https://togithub.com/astral-sh/ruff/pull/6994)
- Insert space to avoid syntax error in RSE fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6886](https://togithub.com/astral-sh/ruff/pull/6886)
- Avoid PEP 604 upgrades that lead to invalid syntax by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6888](https://togithub.com/astral-sh/ruff/pull/6888)
- Fix ranges for global usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6917](https://togithub.com/astral-sh/ruff/pull/6917)
- Avoid invalid fix for C417 with separate keys and values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6954](https://togithub.com/astral-sh/ruff/pull/6954)
- Avoid panic when `typename` is provided as a keyword argument by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6955](https://togithub.com/astral-sh/ruff/pull/6955)
- Improve compatibility between multi-statement PYI rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7024](https://togithub.com/astral-sh/ruff/pull/7024)
- Fixed panic in `missing_copyright_notice` by
[@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)
- Avoid lexer infinite loop on invalid input by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6937](https://togithub.com/astral-sh/ruff/pull/6937)
- Fix `WithItem` ranges for parenthesized, non-`as` items by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6782](https://togithub.com/astral-sh/ruff/pull/6782)

#### New Contributors

- [@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- [@&#8203;Anselmoo](https://togithub.com/Anselmoo) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6986](https://togithub.com/astral-sh/ruff/pull/6986)
- [@&#8203;njgrisafi](https://togithub.com/njgrisafi) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7032](https://togithub.com/astral-sh/ruff/pull/7032)
- [@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)

**Full Changelog**:
astral-sh/ruff@v0.0.286...v0.0.287

</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:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuNjguMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
gatesn referenced this pull request in spiraldb/ziggy-pydust Sep 15, 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://beta.ruff.rs/docs)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/releases)) | `^0.0.286`
-> `^0.0.289` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.289?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.289?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.286/0.0.289?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.286/0.0.289?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.0.289`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.289)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.288...v0.0.289)

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

#### What's Changed

##### Bug Fixes

- Invert condition for < and <= in outdated version block by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7284](https://togithub.com/astral-sh/ruff/pull/7284)
- Ignore `@override` method when enforcing `bad-dunder-name` rule by
[@&#8203;brendonh8](https://togithub.com/brendonh8) in
[https://github.com/astral-sh/ruff/pull/7224](https://togithub.com/astral-sh/ruff/pull/7224)
- Add `NotebookIndex` to the cache by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6863](https://togithub.com/astral-sh/ruff/pull/6863)

##### Preview

This release includes a new preview mode which can be used to opt-in to
unstable rules and features.

- Update rule selection to respect preview mode by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7195](https://togithub.com/astral-sh/ruff/pull/7195)
- Display the `--preview` option in the CLI help menu by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7274](https://togithub.com/astral-sh/ruff/pull/7274)

See the [documentation](https://beta.ruff.rs/docs/preview/) and
[versioning
discussion](https://togithub.com/astral-sh/ruff/discussions/6998) for
more details.

#### New Contributors

- [@&#8203;brendonh8](https://togithub.com/brendonh8) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7224](https://togithub.com/astral-sh/ruff/pull/7224)

**Full Changelog**:
astral-sh/ruff@v0.0.288...v0.0.289

###
[`v0.0.288`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.288)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.287...v0.0.288)

#### What's Changed

##### Breaking Changes

- Remove emoji identifier support by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/7212](https://togithub.com/astral-sh/ruff/pull/7212)
- Location agnostic GitLab fingerprints by
[@&#8203;gregersn](https://togithub.com/gregersn) in
[https://github.com/astral-sh/ruff/pull/7203](https://togithub.com/astral-sh/ruff/pull/7203)

##### Rules

-   \[`ruff`]
- `RUF001`: Remove autofix for ambiguous unicode rule by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7168](https://togithub.com/astral-sh/ruff/pull/7168)

##### Settings

-   \[`flake8-self`]
- `SLF001`: Add `extend-ignore-names` option by
[@&#8203;jaap3](https://togithub.com/jaap3) in
[https://github.com/astral-sh/ruff/pull/7194](https://togithub.com/astral-sh/ruff/pull/7194)

##### Bug Fixes

-   \[`flake8-bugbear`]
- `B006`: Add newline if fix is at end-of-file by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7090](https://togithub.com/astral-sh/ruff/pull/7090)
- `B006`: Fix function docstring followed by whitespace but no newline
by [@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7160](https://togithub.com/astral-sh/ruff/pull/7160)
- `B009`: Parenthesize expressions when converting to attribute access
by [@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7091](https://togithub.com/astral-sh/ruff/pull/7091)
- `B009`, `B010`: Fix `getattr` calls on `int` literals by
[@&#8203;density](https://togithub.com/density) in
[https://github.com/astral-sh/ruff/pull/7057](https://togithub.com/astral-sh/ruff/pull/7057)
- `B013`: Supported starred exceptions in length-one tuple detection by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7080](https://togithub.com/astral-sh/ruff/pull/7080)
- `B013`: Insert required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7148](https://togithub.com/astral-sh/ruff/pull/7148)
-   \[`flake8-comprehensions`]
- `C402`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7152](https://togithub.com/astral-sh/ruff/pull/7152)
- `C404` Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7185](https://togithub.com/astral-sh/ruff/pull/7185)
- `C416` Add required space to fix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7204](https://togithub.com/astral-sh/ruff/pull/7204)
- `C417`: Support length-2 lists in dictionary comprehension rewrites by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7081](https://togithub.com/astral-sh/ruff/pull/7081)
- `C417`: Parenthesize targets if necessary by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7189](https://togithub.com/astral-sh/ruff/pull/7189)
-   \[`flake8-return`]
- `RET504`: Add space after return when inlining number by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7116](https://togithub.com/astral-sh/ruff/pull/7116)
-   \[`flake8-simplify`]
- `SIM105`: Avoid attempting to fix violations with multi-statement
lines by [@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7191](https://togithub.com/astral-sh/ruff/pull/7191)
- `SIM105` Avoid inserting an extra newline for fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7221](https://togithub.com/astral-sh/ruff/pull/7221)
- `SIM118`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7150](https://togithub.com/astral-sh/ruff/pull/7150)
- `SIM118`: delete `.keys()` rather than replace expression by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7223](https://togithub.com/astral-sh/ruff/pull/7223)
- `SIM210`: Retain parentheses when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7118](https://togithub.com/astral-sh/ruff/pull/7118)
- `SIM222`: Add parentheses when simplifying conditions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7117](https://togithub.com/astral-sh/ruff/pull/7117)
- `SIM300`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7167](https://togithub.com/astral-sh/ruff/pull/7167)
-   \[`flake8-pytest-style`]
- `PT018`: Split within `not`, rather than outside of `not` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7151](https://togithub.com/astral-sh/ruff/pull/7151)
-   \[`flynt`]
- `FLY002`: Add required space for fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7222](https://togithub.com/astral-sh/ruff/pull/7222)
-   \[`numpy`]
- `NPY001`: Avoid attempting to fix with overridden builtins by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7187](https://togithub.com/astral-sh/ruff/pull/7187)
- `NPY003`: Use symbol import for replacement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7083](https://togithub.com/astral-sh/ruff/pull/7083)
-   \[`pandas-vet`]
- `PD002`: Handle parenthesized calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7111](https://togithub.com/astral-sh/ruff/pull/7111)
-   \[`pep8-naming`]
- `N806`: Avoid triggering on `TypeAlias` assignments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7119](https://togithub.com/astral-sh/ruff/pull/7119)
-   \[`pydocstyle`]
- `D204`: Fix when there's a semicolon after a docstring by
[@&#8203;konstin](https://togithub.com/konstin) in
[https://github.com/astral-sh/ruff/pull/7174](https://togithub.com/astral-sh/ruff/pull/7174)
- `D213`, `D400`: Ignore single quote docstrings with newline escape by
[@&#8203;konstin](https://togithub.com/konstin) in
[https://github.com/astral-sh/ruff/pull/7173](https://togithub.com/astral-sh/ruff/pull/7173)
- `D417`: Fix error with function docstrings with dashed lines by
[@&#8203;eronnen](https://togithub.com/eronnen) in
[https://github.com/astral-sh/ruff/pull/7251](https://togithub.com/astral-sh/ruff/pull/7251)
-   \[`pyflakes`]
- `F401`: Avoid panic with noqa import name by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7260](https://togithub.com/astral-sh/ruff/pull/7260)
- `F841`: Expand fixes to handle parenthesized targets by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7110](https://togithub.com/astral-sh/ruff/pull/7110)
-   \[`pylint`]
- `PLW3301`: Copy the starred argument as is for autofix by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/7177](https://togithub.com/astral-sh/ruff/pull/7177)
-   \[`pyupgrade`]
- `UP006` and `UP007`: Add required space to fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7202](https://togithub.com/astral-sh/ruff/pull/7202)
- `UP007`: Avoid attempting to fix invalid `Optional` annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7079](https://togithub.com/astral-sh/ruff/pull/7079)
- `UP007`: Fix syntax error in autofix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7137](https://togithub.com/astral-sh/ruff/pull/7137)
- `UP021`: Avoid adding duplicate `text` keyword to `subprocess.run` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7112](https://togithub.com/astral-sh/ruff/pull/7112)
- `UP022`: Avoid adding duplicate `capture_output` keyword to
`subprocess.run` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7113](https://togithub.com/astral-sh/ruff/pull/7113)
- `UP028`: Support parenthesized expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7114](https://togithub.com/astral-sh/ruff/pull/7114)
- `UP022`: Avoid fixing when `capture_output` is provided by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7149](https://togithub.com/astral-sh/ruff/pull/7149)
- `UP024`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7171](https://togithub.com/astral-sh/ruff/pull/7171)
-   \[`ruff`]
- `RUF017`: Avoid duplicate fixes for multi-import imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7063](https://togithub.com/astral-sh/ruff/pull/7063)
- Fix named expression precedence in generator by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7170](https://togithub.com/astral-sh/ruff/pull/7170)
- Fix precedence of annotated assignments in generator by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7115](https://togithub.com/astral-sh/ruff/pull/7115)
- Update identifier Unicode character validation to match Python spec by
[@&#8203;LaBatata101](https://togithub.com/LaBatata101) in
[https://github.com/astral-sh/ruff/pull/7209](https://togithub.com/astral-sh/ruff/pull/7209)

##### Other Changes

- Added argfile test and documentation by
[@&#8203;njgrisafi](https://togithub.com/njgrisafi) in
[https://github.com/astral-sh/ruff/pull/7138](https://togithub.com/astral-sh/ruff/pull/7138)

#### New Contributors

- [@&#8203;oliviacrain](https://togithub.com/oliviacrain) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/7093](https://togithub.com/astral-sh/ruff/pull/7093)
- [@&#8203;dalgarno](https://togithub.com/dalgarno) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7108](https://togithub.com/astral-sh/ruff/pull/7108)
- [@&#8203;manmartgarc](https://togithub.com/manmartgarc) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/7179](https://togithub.com/astral-sh/ruff/pull/7179)
- [@&#8203;jaap3](https://togithub.com/jaap3) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7194](https://togithub.com/astral-sh/ruff/pull/7194)
- [@&#8203;gregersn](https://togithub.com/gregersn) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7203](https://togithub.com/astral-sh/ruff/pull/7203)
- [@&#8203;eronnen](https://togithub.com/eronnen) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7251](https://togithub.com/astral-sh/ruff/pull/7251)

**Full Changelog**:
astral-sh/ruff@v0.0.287...v0.0.288

###
[`v0.0.287`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.287)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.286...v0.0.287)

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

#### What's Changed

##### Rules

- \[refurb] Implement preview `repeated-append` rule (`FURB113`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- \[refurb] Implement preview `delete-full-slice` rule (`FURB131`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6897](https://togithub.com/astral-sh/ruff/pull/6897)
- \[refurb] Implement preview `check-and-remove-from-set` rule
(`FURB132`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6904](https://togithub.com/astral-sh/ruff/pull/6904)

##### Bug Fixes

- Expand `PERF401` and `PERF402` with type checks by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6994](https://togithub.com/astral-sh/ruff/pull/6994)
- Insert space to avoid syntax error in RSE fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6886](https://togithub.com/astral-sh/ruff/pull/6886)
- Avoid PEP 604 upgrades that lead to invalid syntax by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6888](https://togithub.com/astral-sh/ruff/pull/6888)
- Fix ranges for global usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6917](https://togithub.com/astral-sh/ruff/pull/6917)
- Avoid invalid fix for C417 with separate keys and values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6954](https://togithub.com/astral-sh/ruff/pull/6954)
- Avoid panic when `typename` is provided as a keyword argument by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6955](https://togithub.com/astral-sh/ruff/pull/6955)
- Improve compatibility between multi-statement PYI rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7024](https://togithub.com/astral-sh/ruff/pull/7024)
- Fixed panic in `missing_copyright_notice` by
[@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)
- Avoid lexer infinite loop on invalid input by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6937](https://togithub.com/astral-sh/ruff/pull/6937)
- Fix `WithItem` ranges for parenthesized, non-`as` items by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6782](https://togithub.com/astral-sh/ruff/pull/6782)

#### New Contributors

- [@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- [@&#8203;Anselmoo](https://togithub.com/Anselmoo) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6986](https://togithub.com/astral-sh/ruff/pull/6986)
- [@&#8203;njgrisafi](https://togithub.com/njgrisafi) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7032](https://togithub.com/astral-sh/ruff/pull/7032)
- [@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)

**Full Changelog**:
astral-sh/ruff@v0.0.286...v0.0.287

</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/fulcrum-so/ziggy-pydust).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi44My4wIiwidXBkYXRlZEluVmVyIjoiMzYuODMuMCIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
delta003 referenced this pull request in spiraldb/ziggy-pydust-template Sep 17, 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://beta.ruff.rs/docs)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/releases)) | `^0.0.286`
-> `^0.0.290` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.290?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.290?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.286/0.0.290?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.286/0.0.290?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.0.290`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.290)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.289...v0.0.290)

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

#### What's Changed

##### Rules

- Update `deprecated-import` lists based on recent `typing-extensions`
release by [@&#8203;charliermarsh](https://togithub.com/charliermarsh)
in
[https://github.com/astral-sh/ruff/pull/7356](https://togithub.com/astral-sh/ruff/pull/7356)
- Add support for bounds, constraints, and explicit variance on generic
type variables to `UP040` by
[@&#8203;nathanwhit](https://togithub.com/nathanwhit) in
[https://github.com/astral-sh/ruff/pull/6749](https://togithub.com/astral-sh/ruff/pull/6749)

##### Settings

- Show rule codes in shell tab completion by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7375](https://togithub.com/astral-sh/ruff/pull/7375)

##### Bug Fixes

- Parenthesize single-generator arguments when adding reverse keyword by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7365](https://togithub.com/astral-sh/ruff/pull/7365)
- Invert reverse argument regardless of whether it's a boolean by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7372](https://togithub.com/astral-sh/ruff/pull/7372)
- Extend `C416` to catch tuple unpacking by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7363](https://togithub.com/astral-sh/ruff/pull/7363)
- Allow `NURSERY` rule selctor in JSON Schema by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7374](https://togithub.com/astral-sh/ruff/pull/7374)
- Avoid flagging single-quoted docstrings with continuations for
multi-line rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7392](https://togithub.com/astral-sh/ruff/pull/7392)
- Treat whitespace-only line as blank for `D411` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7351](https://togithub.com/astral-sh/ruff/pull/7351)

##### Preview

[*What's this section?*](https://beta.ruff.rs/docs/preview/)

- \[`flake8-logging`] New rule `undocumented-warn` (`LOG009`) by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/7249](https://togithub.com/astral-sh/ruff/pull/7249)
- \[`flake8-logging`] New rule `direct-logger-instantiation` (`LOG001`)
by [@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7397](https://togithub.com/astral-sh/ruff/pull/7397)
- \[`flake8-logging`] New plugin `flake8_logging` (`LOG`) by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/7249](https://togithub.com/astral-sh/ruff/pull/7249)
- \[`perflint`] Add `manual-dict-comprehsion` (`PERF403`) by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6132](https://togithub.com/astral-sh/ruff/pull/6132)
- \[`pylint`] New rule `too-many-public-methods` (`PLR0904`) by
[@&#8203;jelly](https://togithub.com/jelly) in
[https://github.com/astral-sh/ruff/pull/6179](https://togithub.com/astral-sh/ruff/pull/6179)
- \[`refurb`] New rule `no-slice-copy` (`FURB145`) by
[@&#8203;tjkuson](https://togithub.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/7007](https://togithub.com/astral-sh/ruff/pull/7007)
- Add warnings for nursery and preview rule selection by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7210](https://togithub.com/astral-sh/ruff/pull/7210)
- Remove the `PREVIEW` rule selector by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7389](https://togithub.com/astral-sh/ruff/pull/7389)
- [`pre-commit`
support](https://togithub.com/astral-sh/ruff-pre-commit#using-ruffs-formatter-unstable)
for the [alpha
formatter](https://togithub.com/astral-sh/ruff/discussions/7310) by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff-pre-commit/pull/50](https://togithub.com/astral-sh/ruff-pre-commit/pull/50)

#### New Contributors

- [@&#8203;nathanwhit](https://togithub.com/nathanwhit) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6749](https://togithub.com/astral-sh/ruff/pull/6749)

**Full Changelog**:
astral-sh/ruff@v0.0.289...v0.0.290

###
[`v0.0.289`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.289)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.288...v0.0.289)

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

#### What's Changed

##### Bug Fixes

- Invert condition for < and <= in outdated version block by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7284](https://togithub.com/astral-sh/ruff/pull/7284)
- Ignore `@override` method when enforcing `bad-dunder-name` rule by
[@&#8203;brendonh8](https://togithub.com/brendonh8) in
[https://github.com/astral-sh/ruff/pull/7224](https://togithub.com/astral-sh/ruff/pull/7224)
- Add `NotebookIndex` to the cache by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6863](https://togithub.com/astral-sh/ruff/pull/6863)

##### Preview

This release includes a new preview mode which can be used to opt-in to
unstable rules and features.

- Update rule selection to respect preview mode by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7195](https://togithub.com/astral-sh/ruff/pull/7195)
- Display the `--preview` option in the CLI help menu by
[@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7274](https://togithub.com/astral-sh/ruff/pull/7274)

See the [documentation](https://beta.ruff.rs/docs/preview/) and
[versioning
discussion](https://togithub.com/astral-sh/ruff/discussions/6998) for
more details.

#### New Contributors

- [@&#8203;brendonh8](https://togithub.com/brendonh8) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7224](https://togithub.com/astral-sh/ruff/pull/7224)

**Full Changelog**:
astral-sh/ruff@v0.0.288...v0.0.289

###
[`v0.0.288`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.288)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.287...v0.0.288)

#### What's Changed

##### Breaking Changes

- Remove emoji identifier support by
[@&#8203;MichaReiser](https://togithub.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/7212](https://togithub.com/astral-sh/ruff/pull/7212)
- Location agnostic GitLab fingerprints by
[@&#8203;gregersn](https://togithub.com/gregersn) in
[https://github.com/astral-sh/ruff/pull/7203](https://togithub.com/astral-sh/ruff/pull/7203)

##### Rules

-   \[`ruff`]
- `RUF001`: Remove autofix for ambiguous unicode rule by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7168](https://togithub.com/astral-sh/ruff/pull/7168)

##### Settings

-   \[`flake8-self`]
- `SLF001`: Add `extend-ignore-names` option by
[@&#8203;jaap3](https://togithub.com/jaap3) in
[https://github.com/astral-sh/ruff/pull/7194](https://togithub.com/astral-sh/ruff/pull/7194)

##### Bug Fixes

-   \[`flake8-bugbear`]
- `B006`: Add newline if fix is at end-of-file by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7090](https://togithub.com/astral-sh/ruff/pull/7090)
- `B006`: Fix function docstring followed by whitespace but no newline
by [@&#8203;zanieb](https://togithub.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/7160](https://togithub.com/astral-sh/ruff/pull/7160)
- `B009`: Parenthesize expressions when converting to attribute access
by [@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7091](https://togithub.com/astral-sh/ruff/pull/7091)
- `B009`, `B010`: Fix `getattr` calls on `int` literals by
[@&#8203;density](https://togithub.com/density) in
[https://github.com/astral-sh/ruff/pull/7057](https://togithub.com/astral-sh/ruff/pull/7057)
- `B013`: Supported starred exceptions in length-one tuple detection by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7080](https://togithub.com/astral-sh/ruff/pull/7080)
- `B013`: Insert required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7148](https://togithub.com/astral-sh/ruff/pull/7148)
-   \[`flake8-comprehensions`]
- `C402`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7152](https://togithub.com/astral-sh/ruff/pull/7152)
- `C404` Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7185](https://togithub.com/astral-sh/ruff/pull/7185)
- `C416` Add required space to fix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7204](https://togithub.com/astral-sh/ruff/pull/7204)
- `C417`: Support length-2 lists in dictionary comprehension rewrites by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7081](https://togithub.com/astral-sh/ruff/pull/7081)
- `C417`: Parenthesize targets if necessary by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7189](https://togithub.com/astral-sh/ruff/pull/7189)
-   \[`flake8-return`]
- `RET504`: Add space after return when inlining number by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7116](https://togithub.com/astral-sh/ruff/pull/7116)
-   \[`flake8-simplify`]
- `SIM105`: Avoid attempting to fix violations with multi-statement
lines by [@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7191](https://togithub.com/astral-sh/ruff/pull/7191)
- `SIM105` Avoid inserting an extra newline for fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7221](https://togithub.com/astral-sh/ruff/pull/7221)
- `SIM118`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7150](https://togithub.com/astral-sh/ruff/pull/7150)
- `SIM118`: delete `.keys()` rather than replace expression by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7223](https://togithub.com/astral-sh/ruff/pull/7223)
- `SIM210`: Retain parentheses when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7118](https://togithub.com/astral-sh/ruff/pull/7118)
- `SIM222`: Add parentheses when simplifying conditions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7117](https://togithub.com/astral-sh/ruff/pull/7117)
- `SIM300`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7167](https://togithub.com/astral-sh/ruff/pull/7167)
-   \[`flake8-pytest-style`]
- `PT018`: Split within `not`, rather than outside of `not` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7151](https://togithub.com/astral-sh/ruff/pull/7151)
-   \[`flynt`]
- `FLY002`: Add required space for fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7222](https://togithub.com/astral-sh/ruff/pull/7222)
-   \[`numpy`]
- `NPY001`: Avoid attempting to fix with overridden builtins by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7187](https://togithub.com/astral-sh/ruff/pull/7187)
- `NPY003`: Use symbol import for replacement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7083](https://togithub.com/astral-sh/ruff/pull/7083)
-   \[`pandas-vet`]
- `PD002`: Handle parenthesized calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7111](https://togithub.com/astral-sh/ruff/pull/7111)
-   \[`pep8-naming`]
- `N806`: Avoid triggering on `TypeAlias` assignments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7119](https://togithub.com/astral-sh/ruff/pull/7119)
-   \[`pydocstyle`]
- `D204`: Fix when there's a semicolon after a docstring by
[@&#8203;konstin](https://togithub.com/konstin) in
[https://github.com/astral-sh/ruff/pull/7174](https://togithub.com/astral-sh/ruff/pull/7174)
- `D213`, `D400`: Ignore single quote docstrings with newline escape by
[@&#8203;konstin](https://togithub.com/konstin) in
[https://github.com/astral-sh/ruff/pull/7173](https://togithub.com/astral-sh/ruff/pull/7173)
- `D417`: Fix error with function docstrings with dashed lines by
[@&#8203;eronnen](https://togithub.com/eronnen) in
[https://github.com/astral-sh/ruff/pull/7251](https://togithub.com/astral-sh/ruff/pull/7251)
-   \[`pyflakes`]
- `F401`: Avoid panic with noqa import name by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7260](https://togithub.com/astral-sh/ruff/pull/7260)
- `F841`: Expand fixes to handle parenthesized targets by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7110](https://togithub.com/astral-sh/ruff/pull/7110)
-   \[`pylint`]
- `PLW3301`: Copy the starred argument as is for autofix by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/7177](https://togithub.com/astral-sh/ruff/pull/7177)
-   \[`pyupgrade`]
- `UP006` and `UP007`: Add required space to fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7202](https://togithub.com/astral-sh/ruff/pull/7202)
- `UP007`: Avoid attempting to fix invalid `Optional` annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7079](https://togithub.com/astral-sh/ruff/pull/7079)
- `UP007`: Fix syntax error in autofix by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7137](https://togithub.com/astral-sh/ruff/pull/7137)
- `UP021`: Avoid adding duplicate `text` keyword to `subprocess.run` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7112](https://togithub.com/astral-sh/ruff/pull/7112)
- `UP022`: Avoid adding duplicate `capture_output` keyword to
`subprocess.run` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7113](https://togithub.com/astral-sh/ruff/pull/7113)
- `UP028`: Support parenthesized expressions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7114](https://togithub.com/astral-sh/ruff/pull/7114)
- `UP022`: Avoid fixing when `capture_output` is provided by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7149](https://togithub.com/astral-sh/ruff/pull/7149)
- `UP024`: Add required space when fixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7171](https://togithub.com/astral-sh/ruff/pull/7171)
-   \[`ruff`]
- `RUF017`: Avoid duplicate fixes for multi-import imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7063](https://togithub.com/astral-sh/ruff/pull/7063)
- Fix named expression precedence in generator by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7170](https://togithub.com/astral-sh/ruff/pull/7170)
- Fix precedence of annotated assignments in generator by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7115](https://togithub.com/astral-sh/ruff/pull/7115)
- Update identifier Unicode character validation to match Python spec by
[@&#8203;LaBatata101](https://togithub.com/LaBatata101) in
[https://github.com/astral-sh/ruff/pull/7209](https://togithub.com/astral-sh/ruff/pull/7209)

##### Other Changes

- Added argfile test and documentation by
[@&#8203;njgrisafi](https://togithub.com/njgrisafi) in
[https://github.com/astral-sh/ruff/pull/7138](https://togithub.com/astral-sh/ruff/pull/7138)

#### New Contributors

- [@&#8203;oliviacrain](https://togithub.com/oliviacrain) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/7093](https://togithub.com/astral-sh/ruff/pull/7093)
- [@&#8203;dalgarno](https://togithub.com/dalgarno) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7108](https://togithub.com/astral-sh/ruff/pull/7108)
- [@&#8203;manmartgarc](https://togithub.com/manmartgarc) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/7179](https://togithub.com/astral-sh/ruff/pull/7179)
- [@&#8203;jaap3](https://togithub.com/jaap3) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7194](https://togithub.com/astral-sh/ruff/pull/7194)
- [@&#8203;gregersn](https://togithub.com/gregersn) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7203](https://togithub.com/astral-sh/ruff/pull/7203)
- [@&#8203;eronnen](https://togithub.com/eronnen) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7251](https://togithub.com/astral-sh/ruff/pull/7251)

**Full Changelog**:
astral-sh/ruff@v0.0.287...v0.0.288

###
[`v0.0.287`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.287)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.0.286...v0.0.287)

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

#### What's Changed

##### Rules

- \[refurb] Implement preview `repeated-append` rule (`FURB113`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- \[refurb] Implement preview `delete-full-slice` rule (`FURB131`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6897](https://togithub.com/astral-sh/ruff/pull/6897)
- \[refurb] Implement preview `check-and-remove-from-set` rule
(`FURB132`) by
[@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) in
[https://github.com/astral-sh/ruff/pull/6904](https://togithub.com/astral-sh/ruff/pull/6904)

##### Bug Fixes

- Expand `PERF401` and `PERF402` with type checks by
[@&#8203;qdegraaf](https://togithub.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6994](https://togithub.com/astral-sh/ruff/pull/6994)
- Insert space to avoid syntax error in RSE fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6886](https://togithub.com/astral-sh/ruff/pull/6886)
- Avoid PEP 604 upgrades that lead to invalid syntax by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6888](https://togithub.com/astral-sh/ruff/pull/6888)
- Fix ranges for global usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6917](https://togithub.com/astral-sh/ruff/pull/6917)
- Avoid invalid fix for C417 with separate keys and values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6954](https://togithub.com/astral-sh/ruff/pull/6954)
- Avoid panic when `typename` is provided as a keyword argument by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6955](https://togithub.com/astral-sh/ruff/pull/6955)
- Improve compatibility between multi-statement PYI rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/7024](https://togithub.com/astral-sh/ruff/pull/7024)
- Fixed panic in `missing_copyright_notice` by
[@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)
- Avoid lexer infinite loop on invalid input by
[@&#8203;dhruvmanila](https://togithub.com/dhruvmanila) in
[https://github.com/astral-sh/ruff/pull/6937](https://togithub.com/astral-sh/ruff/pull/6937)
- Fix `WithItem` ranges for parenthesized, non-`as` items by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6782](https://togithub.com/astral-sh/ruff/pull/6782)

#### New Contributors

- [@&#8203;SavchenkoValeriy](https://togithub.com/SavchenkoValeriy) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/6702](https://togithub.com/astral-sh/ruff/pull/6702)
- [@&#8203;Anselmoo](https://togithub.com/Anselmoo) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6986](https://togithub.com/astral-sh/ruff/pull/6986)
- [@&#8203;njgrisafi](https://togithub.com/njgrisafi) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/7032](https://togithub.com/astral-sh/ruff/pull/7032)
- [@&#8203;WindowGenerator](https://togithub.com/WindowGenerator) made
their first contribution in
[https://github.com/astral-sh/ruff/pull/7029](https://togithub.com/astral-sh/ruff/pull/7029)

**Full Changelog**:
astral-sh/ruff@v0.0.286...v0.0.287

</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/fulcrum-so/ziggy-pydust-template).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi44My4wIiwidXBkYXRlZEluVmVyIjoiMzYuODMuMCIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AifQ==-->

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
parser Related to the parser
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants