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

Fast path for ASCII only identifiers start #6609

Merged
merged 1 commit into from
Aug 16, 2023

Conversation

MichaReiser
Copy link
Member

@MichaReiser MichaReiser commented Aug 16, 2023

Summary

This PR adds a fast path for ASCII only identifier starts.

I noticed during profiling that the binary_search method is called a lot and wondered why. It turned out, it is used by the xid_start function and we call it when lexing identifiers.
However, the function shouldn't be called at all for my test file because it only contains ASCII characters.

This PR "fixes" our is_identifier_start to not call into xid_start if the character is ascii only.

Test Plan

cargo test

I verified that binary_search no longer appears in the profile.

@MichaReiser
Copy link
Member Author

Current dependencies on/for this PR:

This comment was auto-generated by Graphite.

@MichaReiser MichaReiser changed the title Fastpath for ASCII only identifiers start Fast path for ASCII only identifiers start Aug 16, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Aug 16, 2023

PR Check Results

Ecosystem

✅ ecosystem check detected no changes.

Benchmark

Linux

group                                      main                                   pr
-----                                      ----                                   --
formatter/large/dataset.py                 1.04      3.9±0.02ms    10.6 MB/sec    1.00      3.7±0.02ms    11.0 MB/sec
formatter/numpy/ctypeslib.py               1.01   767.1±16.79µs    21.7 MB/sec    1.00    759.6±2.77µs    21.9 MB/sec
formatter/numpy/globals.py                 1.00     75.1±0.30µs    39.3 MB/sec    1.05     78.6±0.31µs    37.5 MB/sec
formatter/pydantic/types.py                1.01  1516.9±38.48µs    16.8 MB/sec    1.00   1500.6±5.60µs    17.0 MB/sec
linter/all-rules/large/dataset.py          1.00     10.3±0.03ms     4.0 MB/sec    1.01     10.3±0.02ms     3.9 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.00      2.8±0.03ms     6.0 MB/sec    1.01      2.8±0.03ms     6.0 MB/sec
linter/all-rules/numpy/globals.py          1.00    392.3±3.98µs     7.5 MB/sec    1.00    392.0±1.62µs     7.5 MB/sec
linter/all-rules/pydantic/types.py         1.00      5.3±0.01ms     4.8 MB/sec    1.03      5.5±0.10ms     4.7 MB/sec
linter/default-rules/large/dataset.py      1.00      5.5±0.01ms     7.4 MB/sec    1.02      5.5±0.02ms     7.3 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00   1204.0±4.30µs    13.8 MB/sec    1.02   1231.1±1.48µs    13.5 MB/sec
linter/default-rules/numpy/globals.py      1.00    141.0±1.08µs    20.9 MB/sec    1.00    141.7±0.26µs    20.8 MB/sec
linter/default-rules/pydantic/types.py     1.00      2.5±0.00ms    10.3 MB/sec    1.02      2.5±0.01ms    10.2 MB/sec

Windows

group                                      main                                   pr
-----                                      ----                                   --
formatter/large/dataset.py                 1.02      4.3±0.06ms     9.4 MB/sec    1.00      4.2±0.10ms     9.6 MB/sec
formatter/numpy/ctypeslib.py               1.00   843.4±12.60µs    19.7 MB/sec    1.00   840.1±12.84µs    19.8 MB/sec
formatter/numpy/globals.py                 1.00     85.8±1.92µs    34.4 MB/sec    1.02     87.4±2.42µs    33.8 MB/sec
formatter/pydantic/types.py                1.00  1682.8±22.48µs    15.2 MB/sec    1.01  1702.2±33.51µs    15.0 MB/sec
linter/all-rules/large/dataset.py          1.01     12.8±0.17ms     3.2 MB/sec    1.00     12.8±0.13ms     3.2 MB/sec
linter/all-rules/numpy/ctypeslib.py        1.01      3.5±0.04ms     4.7 MB/sec    1.00      3.5±0.03ms     4.8 MB/sec
linter/all-rules/numpy/globals.py          1.00    440.8±5.96µs     6.7 MB/sec    1.00    440.6±8.59µs     6.7 MB/sec
linter/all-rules/pydantic/types.py         1.00      6.6±0.10ms     3.9 MB/sec    1.00      6.6±0.07ms     3.9 MB/sec
linter/default-rules/large/dataset.py      1.00      7.0±0.06ms     5.8 MB/sec    1.00      7.0±0.06ms     5.8 MB/sec
linter/default-rules/numpy/ctypeslib.py    1.00  1483.8±14.64µs    11.2 MB/sec    1.00  1482.4±17.30µs    11.2 MB/sec
linter/default-rules/numpy/globals.py      1.00    175.5±3.14µs    16.8 MB/sec    1.00    174.8±2.59µs    16.9 MB/sec
linter/default-rules/pydantic/types.py     1.01      3.1±0.05ms     8.1 MB/sec    1.00      3.1±0.03ms     8.2 MB/sec

@MichaReiser MichaReiser force-pushed the simple-tokenizer-ascii-shortpath branch from b4dd89c to e2f1770 Compare August 16, 2023 07:19
@MichaReiser MichaReiser merged commit e28858b into main Aug 16, 2023
@MichaReiser MichaReiser deleted the simple-tokenizer-ascii-shortpath branch August 16, 2023 08:22
@Boshen
Copy link
Contributor

Boshen commented Aug 16, 2023

Why profile when I have already done it for you ;-)

https://github.com/web-infra-dev/oxc/blob/b346a9ad6debc3016dd288f3c2c9e595b47a0a37/crates/oxc_parser/src/lexer/mod.rs#L345C1-L358

    fn match_char(&mut self, c: char, mut builder: AutoCow<'a>) -> Kind {
        // fast path for single character tokens
        // '{'  '}'  '('  ')'  '['  ']'  ';' ',' ':' '~'
        let size = c as usize;
        if size < 128 {
            let kind = SINGLE_CHAR_TOKENS[size];
            if kind != Kind::Undetermined {
                return kind;
            }
            // fast path for identifiers
            if is_identifier_start_ascii(c) {
                builder.push_matching(c);
                return self.identifier_name_or_keyword(builder);
            }
        }

https://github.com/web-infra-dev/oxc/blob/b346a9ad6debc3016dd288f3c2c9e595b47a0a37/crates/oxc_syntax/src/identifier.rs#L72-L100

// This contains `$` (36) and `_` (95)
pub const ASCII_START: Align64<[bool; 128]> = Align64([
    F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
    F, F, F, F, T, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
    F, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, F, F, F, T,
    F, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, F, F, F, F,
]);

#[inline]
pub fn is_identifier_start_ascii(c: char) -> bool {
    ASCII_START.0[c as usize]
}

/// Section 12.6 Detect `IdentifierStartChar`
#[inline]
pub fn is_identifier_start_all(c: char) -> bool {
    if c.is_ascii() {
        return is_identifier_start_ascii(c);
    }
    is_id_start_unicode(c)
}

@Boshen
Copy link
Contributor

Boshen commented Aug 16, 2023

And if you haven't already: replace unicode-xid with https://github.com/dtolnay/unicode-ident

@MichaReiser
Copy link
Member Author

And if you haven't already: replace unicode-xid with dtolnay/unicode-ident

Oh nice, another distraction for the weekend 😅

renovate bot referenced this pull request in allenporter/pyrainbird Aug 19, 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://github.com/astral-sh/ruff),
[changelog](https://github.com/astral-sh/ruff/releases)) | `==0.0.284`
-> `==0.0.285` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.0.285?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.0.285?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.0.284/0.0.285?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.0.284/0.0.285?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.284...v0.0.285)

#### What's Changed

##### New rules

- \[`flake8-pytest-style`] Implement `pytest-unittest-raises-assertion`
(`PT027`) by [@&#8203;harupy](https://github.com/harupy) in
[https://github.com/astral-sh/ruff/pull/6554](https://github.com/astral-sh/ruff/pull/6554)
- \[`flake8-pytest-style`] Implement
`pytest-duplicate-parametrize-test-cases` (`PT014`) by
[@&#8203;harupy](https://github.com/harupy) in
[https://github.com/astral-sh/ruff/pull/6598](https://github.com/astral-sh/ruff/pull/6598)
- \[`flake8-tidy-imports`] Implement `banned-module-level-imports`
(`TID253`) by [@&#8203;durumu](https://github.com/durumu) in
[https://github.com/astral-sh/ruff/pull/6378](https://github.com/astral-sh/ruff/pull/6378)
- \[`pylint`] Implement `bad-dunder-name` (`W3201`) (in the Ruff
nursery) by [@&#8203;LaBatata101](https://github.com/LaBatata101) in
[https://github.com/astral-sh/ruff/pull/6486](https://github.com/astral-sh/ruff/pull/6486)
- \[`pylint`] Implement `subprocess-run-check` (`W1510`) by
[@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/6487](https://github.com/astral-sh/ruff/pull/6487)
- \[`ruff`] Implement `quadratic-list-summation` (`RUF017`) by
[@&#8203;evanrittenhouse](https://github.com/evanrittenhouse) in
[https://github.com/astral-sh/ruff/pull/6489](https://github.com/astral-sh/ruff/pull/6489)

##### Rule changes

- \[`flake8-bugbear`] Add autofix for `B006` by
[@&#8203;qdegraaf](https://github.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6131](https://github.com/astral-sh/ruff/pull/6131)
- \[`flake8-pyi`] Avoid applying `PYI055` to runtime-evaluated
annotations by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6457](https://github.com/astral-sh/ruff/pull/6457)
- \[`flake8-self`] Allow `os._exit` accesses in `SLF001` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6490](https://github.com/astral-sh/ruff/pull/6490)
- \[`perflint`] Ignore `PERF203` if `try` contains loop control flow
statements by
[@&#8203;evanrittenhouse](https://github.com/evanrittenhouse) in
[https://github.com/astral-sh/ruff/pull/6536](https://github.com/astral-sh/ruff/pull/6536)
- \[`pylint`] Check for invalid format type specifiers in nested
replacements for `PLE1300` by
[@&#8203;zanieb](https://github.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/6616](https://github.com/astral-sh/ruff/pull/6616)
- \[`tryceratops`] Omit `NotImplementedError` from `TRY003` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6568](https://github.com/astral-sh/ruff/pull/6568)

##### Settings

- Respect `.ipynb` and `.pyi` sources when linting from stdin by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6628](https://github.com/astral-sh/ruff/pull/6628)
- Support glob patterns for `raises_require_match_for` and
`raises_require_match_for` by
[@&#8203;harupy](https://github.com/harupy) in
[https://github.com/astral-sh/ruff/pull/6635](https://github.com/astral-sh/ruff/pull/6635)

##### Bug Fixes

- Make `lambda-assignment` fix always-manual in class bodies by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6626](https://github.com/astral-sh/ruff/pull/6626)
- Fix counting of message arguments when msg is provided as a keyword by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6456](https://github.com/astral-sh/ruff/pull/6456)
- Add container types to `E721` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6469](https://github.com/astral-sh/ruff/pull/6469)
- Respect scoping rules when identifying builtins by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6468](https://github.com/astral-sh/ruff/pull/6468)
- Respect tab width in line-length heuristic by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6491](https://github.com/astral-sh/ruff/pull/6491)
- Respect dummy-variable-rgx for unused bound exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6492](https://github.com/astral-sh/ruff/pull/6492)
- Fix detection of top-level imports with newlines in `E402` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6526](https://github.com/astral-sh/ruff/pull/6526)
- Allow if-expression with dual string arms in `invalid-envvar-value` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6538](https://github.com/astral-sh/ruff/pull/6538)
- Add deprecated unittest assertions to PT009 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6572](https://github.com/astral-sh/ruff/pull/6572)
- Avoid unused argument rules when functions call `locals()` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6578](https://github.com/astral-sh/ruff/pull/6578)
- Allow top-level `await` in Jupyter notebooks by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6607](https://github.com/astral-sh/ruff/pull/6607)
- Don't detect `pandas#values` for stores, deletes, or class accesses by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6631](https://github.com/astral-sh/ruff/pull/6631)
- Avoid removing parentheses in `E712` fix by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6575](https://github.com/astral-sh/ruff/pull/6575)
- Skip whitespace between comments at start of file e.g. for `I002` by
[@&#8203;durumu](https://github.com/durumu) in
[https://github.com/astral-sh/ruff/pull/6523](https://github.com/astral-sh/ruff/pull/6523)
- Add support for nested replacements inside format specifications e.g.
for `PLE1300` by [@&#8203;zanieb](https://github.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/6616](https://github.com/astral-sh/ruff/pull/6616)

##### Playground

- Shared playground links now use short URLs by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6383](https://github.com/astral-sh/ruff/pull/6383)
- Fix possible JSON parse error on playground load by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6519](https://github.com/astral-sh/ruff/pull/6519)
- Fix unreachable panic in playground by
[@&#8203;MichaReiser](https://github.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/6623](https://github.com/astral-sh/ruff/pull/6623)

##### Performance

- Improve tokenizer performance for ASCII only identifiers by
[@&#8203;MichaReiser](https://github.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/6609](https://github.com/astral-sh/ruff/pull/6609)

#### New Contributors

- [@&#8203;magic-akari](https://github.com/magic-akari) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/6472](https://github.com/astral-sh/ruff/pull/6472)
- [@&#8203;durumu](https://github.com/durumu) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6378](https://github.com/astral-sh/ruff/pull/6378)
- [@&#8203;jamesbraza](https://github.com/jamesbraza) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6520](https://github.com/astral-sh/ruff/pull/6520)
- [@&#8203;takumaw](https://github.com/takumaw) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6533](https://github.com/astral-sh/ruff/pull/6533)
- [@&#8203;noklam](https://github.com/noklam) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6573](https://github.com/astral-sh/ruff/pull/6573)
- [@&#8203;Teraskull](https://github.com/Teraskull) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6605](https://github.com/astral-sh/ruff/pull/6605)

**Full Changelog**:
astral-sh/ruff@v0.0.284...v0.0.285

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

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

---

### Release Notes

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

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

[Compare
Source](https://github.com/astral-sh/ruff/compare/v0.0.284...v0.0.285)

#### What's Changed

##### New rules

- \[`flake8-pytest-style`] Implement `pytest-unittest-raises-assertion`
(`PT027`) by [@&#8203;harupy](https://github.com/harupy) in
[https://github.com/astral-sh/ruff/pull/6554](https://github.com/astral-sh/ruff/pull/6554)
- \[`flake8-pytest-style`] Implement
`pytest-duplicate-parametrize-test-cases` (`PT014`) by
[@&#8203;harupy](https://github.com/harupy) in
[https://github.com/astral-sh/ruff/pull/6598](https://github.com/astral-sh/ruff/pull/6598)
- \[`flake8-tidy-imports`] Implement `banned-module-level-imports`
(`TID253`) by [@&#8203;durumu](https://github.com/durumu) in
[https://github.com/astral-sh/ruff/pull/6378](https://github.com/astral-sh/ruff/pull/6378)
- \[`pylint`] Implement `bad-dunder-name` (`W3201`) (in the Ruff
nursery) by [@&#8203;LaBatata101](https://github.com/LaBatata101) in
[https://github.com/astral-sh/ruff/pull/6486](https://github.com/astral-sh/ruff/pull/6486)
- \[`pylint`] Implement `subprocess-run-check` (`W1510`) by
[@&#8203;tjkuson](https://github.com/tjkuson) in
[https://github.com/astral-sh/ruff/pull/6487](https://github.com/astral-sh/ruff/pull/6487)
- \[`ruff`] Implement `quadratic-list-summation` (`RUF017`) by
[@&#8203;evanrittenhouse](https://github.com/evanrittenhouse) in
[https://github.com/astral-sh/ruff/pull/6489](https://github.com/astral-sh/ruff/pull/6489)

##### Rule changes

- \[`flake8-bugbear`] Add autofix for `B006` by
[@&#8203;qdegraaf](https://github.com/qdegraaf) in
[https://github.com/astral-sh/ruff/pull/6131](https://github.com/astral-sh/ruff/pull/6131)
- \[`flake8-pyi`] Avoid applying `PYI055` to runtime-evaluated
annotations by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6457](https://github.com/astral-sh/ruff/pull/6457)
- \[`flake8-self`] Allow `os._exit` accesses in `SLF001` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6490](https://github.com/astral-sh/ruff/pull/6490)
- \[`perflint`] Ignore `PERF203` if `try` contains loop control flow
statements by
[@&#8203;evanrittenhouse](https://github.com/evanrittenhouse) in
[https://github.com/astral-sh/ruff/pull/6536](https://github.com/astral-sh/ruff/pull/6536)
- \[`pylint`] Check for invalid format type specifiers in nested
replacements for `PLE1300` by
[@&#8203;zanieb](https://github.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/6616](https://github.com/astral-sh/ruff/pull/6616)
- \[`tryceratops`] Omit `NotImplementedError` from `TRY003` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6568](https://github.com/astral-sh/ruff/pull/6568)

##### Settings

- Respect `.ipynb` and `.pyi` sources when linting from stdin by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6628](https://github.com/astral-sh/ruff/pull/6628)
- Support glob patterns for `raises_require_match_for` and
`raises_require_match_for` by
[@&#8203;harupy](https://github.com/harupy) in
[https://github.com/astral-sh/ruff/pull/6635](https://github.com/astral-sh/ruff/pull/6635)

##### Bug Fixes

- Make `lambda-assignment` fix always-manual in class bodies by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6626](https://github.com/astral-sh/ruff/pull/6626)
- Fix counting of message arguments when msg is provided as a keyword by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6456](https://github.com/astral-sh/ruff/pull/6456)
- Add container types to `E721` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6469](https://github.com/astral-sh/ruff/pull/6469)
- Respect scoping rules when identifying builtins by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6468](https://github.com/astral-sh/ruff/pull/6468)
- Respect tab width in line-length heuristic by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6491](https://github.com/astral-sh/ruff/pull/6491)
- Respect dummy-variable-rgx for unused bound exceptions by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6492](https://github.com/astral-sh/ruff/pull/6492)
- Fix detection of top-level imports with newlines in `E402` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6526](https://github.com/astral-sh/ruff/pull/6526)
- Allow if-expression with dual string arms in `invalid-envvar-value` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6538](https://github.com/astral-sh/ruff/pull/6538)
- Add deprecated unittest assertions to PT009 by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6572](https://github.com/astral-sh/ruff/pull/6572)
- Avoid unused argument rules when functions call `locals()` by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6578](https://github.com/astral-sh/ruff/pull/6578)
- Allow top-level `await` in Jupyter notebooks by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6607](https://github.com/astral-sh/ruff/pull/6607)
- Don't detect `pandas#values` for stores, deletes, or class accesses by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6631](https://github.com/astral-sh/ruff/pull/6631)
- Avoid removing parentheses in `E712` fix by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6575](https://github.com/astral-sh/ruff/pull/6575)
- Skip whitespace between comments at start of file e.g. for `I002` by
[@&#8203;durumu](https://github.com/durumu) in
[https://github.com/astral-sh/ruff/pull/6523](https://github.com/astral-sh/ruff/pull/6523)
- Add support for nested replacements inside format specifications e.g.
for `PLE1300` by [@&#8203;zanieb](https://github.com/zanieb) in
[https://github.com/astral-sh/ruff/pull/6616](https://github.com/astral-sh/ruff/pull/6616)

##### Playground

- Shared playground links now use short URLs by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6383](https://github.com/astral-sh/ruff/pull/6383)
- Fix possible JSON parse error on playground load by
[@&#8203;charliermarsh](https://github.com/charliermarsh) in
[https://github.com/astral-sh/ruff/pull/6519](https://github.com/astral-sh/ruff/pull/6519)
- Fix unreachable panic in playground by
[@&#8203;MichaReiser](https://github.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/6623](https://github.com/astral-sh/ruff/pull/6623)

##### Performance

- Improve tokenizer performance for ASCII only identifiers by
[@&#8203;MichaReiser](https://github.com/MichaReiser) in
[https://github.com/astral-sh/ruff/pull/6609](https://github.com/astral-sh/ruff/pull/6609)

#### New Contributors

- [@&#8203;magic-akari](https://github.com/magic-akari) made their
first contribution in
[https://github.com/astral-sh/ruff/pull/6472](https://github.com/astral-sh/ruff/pull/6472)
- [@&#8203;durumu](https://github.com/durumu) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6378](https://github.com/astral-sh/ruff/pull/6378)
- [@&#8203;jamesbraza](https://github.com/jamesbraza) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6520](https://github.com/astral-sh/ruff/pull/6520)
- [@&#8203;takumaw](https://github.com/takumaw) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6533](https://github.com/astral-sh/ruff/pull/6533)
- [@&#8203;noklam](https://github.com/noklam) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6573](https://github.com/astral-sh/ruff/pull/6573)
- [@&#8203;Teraskull](https://github.com/Teraskull) made their first
contribution in
[https://github.com/astral-sh/ruff/pull/6605](https://github.com/astral-sh/ruff/pull/6605)

**Full Changelog**:
astral-sh/ruff@v0.0.284...v0.0.285

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

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.

2 participants