-
-
Notifications
You must be signed in to change notification settings - Fork 437
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
Support excluding multiline regexes (fix #996) #1807
Conversation
tests/test_parser.py
Outdated
parser = self.parse_text("""\ | ||
def foo(): | ||
print('Hello, world!') | ||
""", regex) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please indent the code strings like this:
parser = self.parse_text("""\ | |
def foo(): | |
print('Hello, world!') | |
""", regex) | |
parser = self.parse_text("""\ | |
def foo(): | |
print('Hello, world!') | |
""", regex) |
This should match the way other code is included in tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you! Done.
tests/test_parser.py
Outdated
assert parser.statements == set() | ||
|
||
def test_multiline_exclusion_multiple_matches(self) -> None: | ||
regex = r"print\('.*'\)" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This isn't a multi-line regex?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, that was just a sanity check from when I was sketching this that slipped through. I'll rewrite the test so it covers multiple multi-line matches.
We should also add a test for the #1803 example. |
Do you want to update the docs, or leave that to me? |
Co-authored-by: Ned Batchelder <ned@nedbatchelder.com>
No, I'd rather let you do your thing with the docs. But thanks for asking :) |
This is now released as part of coverage 7.6.0. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [coverage](https://togithub.com/nedbat/coveragepy) | `==7.5.4` -> `==7.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nedbat/coveragepy (coverage)</summary> ### [`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0) - Exclusion patterns can now be multi-line, thanks to `Daniel Diniz <pull 1807_>`*. This enables many interesting exclusion use-cases, including those requested in issues `118 <issue 118_>`* (entire files), `996 <issue 996_>`\_ (multiple lines only when appearing together), `1741 <issue 1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_ (arbitrary sequence of marked lines). See the :ref:`multi_line_exclude` section of the docs for more details and examples. - The JSON report now includes per-function and per-class coverage information. Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started. This closes `issue 1793`\_ and `issue 1532`\_. - Fixed an incorrect calculation of "(no class)" lines in the HTML classes report. - Python 3.13.0b3 is supported. .. \_issue 118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8 .. \_issue 996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96 .. \_issue 153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532 .. \_issue 17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741 .. \_issue 1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793 .. \_issue [https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803 .. \_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807 .. \_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809 .. \_changes\_7-5-4: </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/rustymotors/server). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [coverage](https://togithub.com/nedbat/coveragepy) | `==7.5.4` -> `==7.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nedbat/coveragepy (coverage)</summary> ### [`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0) - Exclusion patterns can now be multi-line, thanks to `Daniel Diniz <pull 1807_>`*. This enables many interesting exclusion use-cases, including those requested in issues `118 <issue 118_>`* (entire files), `996 <issue 996_>`\_ (multiple lines only when appearing together), `1741 <issue 1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_ (arbitrary sequence of marked lines). See the :ref:`multi_line_exclude` section of the docs for more details and examples. - The JSON report now includes per-function and per-class coverage information. Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started. This closes `issue 1793`\_ and `issue 1532`\_. - Fixed an incorrect calculation of "(no class)" lines in the HTML classes report. - Python 3.13.0b3 is supported. .. \_issue 118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8 .. \_issue 996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96 .. \_issue 153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532 .. \_issue 17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741 .. \_issue 1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793 .. \_issue [https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803 .. \_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807 .. \_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809 .. \_changes\_7-5-4: </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:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [coverage](https://togithub.com/nedbat/coveragepy) | `>=7.5,<7.6` -> `>=7.6,<7.7` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nedbat/coveragepy (coverage)</summary> ### [`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0) - Exclusion patterns can now be multi-line, thanks to `Daniel Diniz <pull 1807_>`*. This enables many interesting exclusion use-cases, including those requested in issues `118 <issue 118_>`* (entire files), `996 <issue 996_>`\_ (multiple lines only when appearing together), `1741 <issue 1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_ (arbitrary sequence of marked lines). See the :ref:`multi_line_exclude` section of the docs for more details and examples. - The JSON report now includes per-function and per-class coverage information. Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started. This closes `issue 1793`\_ and `issue 1532`\_. - Fixed an incorrect calculation of "(no class)" lines in the HTML classes report. - Python 3.13.0b3 is supported. .. \_issue 118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8 .. \_issue 996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96 .. \_issue 153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532 .. \_issue 17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741 .. \_issue 1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793 .. \_issue [https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803 .. \_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807 .. \_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809 .. \_changes\_7-5-4: </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/hetznercloud/hcloud-python). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | | | lockFileMaintenance | All locks refreshed | | | | | | [coverage](https://togithub.com/nedbat/coveragepy) | dependencies | minor | `7.5.4` -> `7.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [importlib-metadata](https://togithub.com/python/importlib_metadata) | dependencies | minor | `8.0.0` -> `8.2.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/importlib-metadata/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/importlib-metadata/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/importlib-metadata/8.0.0/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/importlib-metadata/8.0.0/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [pytest](https://togithub.com/pytest-dev/pytest) ([changelog](https://docs.pytest.org/en/stable/changelog.html)) | dev | minor | `8.2.2` -> `8.3.2` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest/8.2.2/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest/8.2.2/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [ruff](https://docs.astral.sh/ruff) ([source](https://togithub.com/astral-sh/ruff), [changelog](https://togithub.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | dev | patch | `0.5.1` -> `0.5.5` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.5.1/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.5.1/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [selenium](https://www.selenium.dev) | dependencies | minor | `4.22.0` -> `4.23.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/selenium/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/selenium/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/selenium/4.22.0/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/selenium/4.22.0/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | 🔧 This Pull Request updates lock files to use the latest dependency versions. --- ### Release Notes <details> <summary>nedbat/coveragepy (coverage)</summary> ### [`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0) - Exclusion patterns can now be multi-line, thanks to `Daniel Diniz <pull 1807_>`*. This enables many interesting exclusion use-cases, including those requested in issues `118 <issue 118_>`* (entire files), `996 <issue 996_>`\_ (multiple lines only when appearing together), `1741 <issue 1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_ (arbitrary sequence of marked lines). See the :ref:`multi_line_exclude` section of the docs for more details and examples. - The JSON report now includes per-function and per-class coverage information. Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started. This closes `issue 1793`\_ and `issue 1532`\_. - Fixed an incorrect calculation of "(no class)" lines in the HTML classes report. - Python 3.13.0b3 is supported. .. \_issue 118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8 .. \_issue 996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96 .. \_issue 153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532 .. \_issue 17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741 .. \_issue 1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793 .. \_issue [https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803 .. \_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807 .. \_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809 .. \_changes\_7-5-4: </details> <details> <summary>python/importlib_metadata (importlib-metadata)</summary> ### [`v8.2.0`](https://togithub.com/python/importlib_metadata/compare/v8.1.0...v8.2.0) [Compare Source](https://togithub.com/python/importlib_metadata/compare/v8.1.0...v8.2.0) ### [`v8.1.0`](https://togithub.com/python/importlib_metadata/compare/v8.0.0...v8.1.0) [Compare Source](https://togithub.com/python/importlib_metadata/compare/v8.0.0...v8.1.0) </details> <details> <summary>pytest-dev/pytest (pytest)</summary> ### [`v8.3.2`](https://togithub.com/pytest-dev/pytest/releases/tag/8.3.2) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/8.3.1...8.3.2) # pytest 8.3.2 (2024-07-24) ## Bug fixes - [#​12652](https://togithub.com/pytest-dev/pytest/issues/12652): Resolve regression \[conda]{.title-ref} environments where no longer being automatically detected. \-- by `RonnyPfannschmidt`{.interpreted-text role="user"} ### [`v8.3.1`](https://togithub.com/pytest-dev/pytest/releases/tag/8.3.1) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/8.3.0...8.3.1) # pytest 8.3.1 (2024-07-20) The 8.3.0 release failed to include the change notes and docs for the release. This patch release remedies this. There are no other changes. ### [`v8.3.0`](https://togithub.com/pytest-dev/pytest/compare/8.2.2...8.3.0) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/8.2.2...8.3.0) </details> <details> <summary>astral-sh/ruff (ruff)</summary> ### [`v0.5.5`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#055) [Compare Source](https://togithub.com/astral-sh/ruff/compare/0.5.4...0.5.5) ##### Preview features - \[`fastapi`] Implement `fastapi-redundant-response-model` (`FAST001`) and `fastapi-non-annotated-dependency`(`FAST002`) ([#​11579](https://togithub.com/astral-sh/ruff/pull/11579)) - \[`pydoclint`] Implement `docstring-missing-exception` (`DOC501`) and `docstring-extraneous-exception` (`DOC502`) ([#​11471](https://togithub.com/astral-sh/ruff/pull/11471)) ##### Rule changes - \[`numpy`] Fix NumPy 2.0 rule for `np.alltrue` and `np.sometrue` ([#​12473](https://togithub.com/astral-sh/ruff/pull/12473)) - \[`numpy`] Ignore `NPY201` inside `except` blocks for compatibility with older numpy versions ([#​12490](https://togithub.com/astral-sh/ruff/pull/12490)) - \[`pep8-naming`] Avoid applying `ignore-names` to `self` and `cls` function names (`N804`, `N805`) ([#​12497](https://togithub.com/astral-sh/ruff/pull/12497)) ##### Formatter - Fix incorrect placement of leading function comment with type params ([#​12447](https://togithub.com/astral-sh/ruff/pull/12447)) ##### Server - Do not bail code action resolution when a quick fix is requested ([#​12462](https://togithub.com/astral-sh/ruff/pull/12462)) ##### Bug fixes - Fix `Ord` implementation of `cmp_fix` ([#​12471](https://togithub.com/astral-sh/ruff/pull/12471)) - Raise syntax error for unparenthesized generator expression in multi-argument call ([#​12445](https://togithub.com/astral-sh/ruff/pull/12445)) - \[`pydoclint`] Fix panic in `DOC501` reported in [#​12428](https://togithub.com/astral-sh/ruff/pull/12428) ([#​12435](https://togithub.com/astral-sh/ruff/pull/12435)) - \[`flake8-bugbear`] Allow singleton tuples with starred expressions in `B013` ([#​12484](https://togithub.com/astral-sh/ruff/pull/12484)) ##### Documentation - Add Eglot setup guide for Emacs editor ([#​12426](https://togithub.com/astral-sh/ruff/pull/12426)) - Add note about the breaking change in `nvim-lspconfig` ([#​12507](https://togithub.com/astral-sh/ruff/pull/12507)) - Add note to include notebook files for native server ([#​12449](https://togithub.com/astral-sh/ruff/pull/12449)) - Add setup docs for Zed editor ([#​12501](https://togithub.com/astral-sh/ruff/pull/12501)) ### [`v0.5.4`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#054) [Compare Source](https://togithub.com/astral-sh/ruff/compare/0.5.3...0.5.4) ##### Rule changes - \[`ruff`] Rename `RUF007` to `zip-instead-of-pairwise` ([#​12399](https://togithub.com/astral-sh/ruff/pull/12399)) ##### Bug fixes - \[`flake8-builtins`] Avoid shadowing diagnostics for `@override` methods ([#​12415](https://togithub.com/astral-sh/ruff/pull/12415)) - \[`flake8-comprehensions`] Insert parentheses for multi-argument generators ([#​12422](https://togithub.com/astral-sh/ruff/pull/12422)) - \[`pydocstyle`] Handle escaped docstrings within docstring (`D301`) ([#​12192](https://togithub.com/astral-sh/ruff/pull/12192)) ##### Documentation - Fix GitHub link to Neovim setup ([#​12410](https://togithub.com/astral-sh/ruff/pull/12410)) - Fix `output-format` default in settings reference ([#​12409](https://togithub.com/astral-sh/ruff/pull/12409)) ### [`v0.5.3`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#053) [Compare Source](https://togithub.com/astral-sh/ruff/compare/0.5.2...0.5.3) **Ruff 0.5.3 marks the stable release of the Ruff language server and introduces revamped [documentation](https://docs.astral.sh/ruff/editors), including [setup guides for your editor of choice](https://docs.astral.sh/ruff/editors/setup) and [the language server itself](https://docs.astral.sh/ruff/editors/settings)**. ##### Preview features - Formatter: Insert empty line between suite and alternative branch after function/class definition ([#​12294](https://togithub.com/astral-sh/ruff/pull/12294)) - \[`pyupgrade`] Implement `unnecessary-default-type-args` (`UP043`) ([#​12371](https://togithub.com/astral-sh/ruff/pull/12371)) ##### Rule changes - \[`flake8-bugbear`] Detect enumerate iterations in `loop-iterator-mutation` (`B909`) ([#​12366](https://togithub.com/astral-sh/ruff/pull/12366)) - \[`flake8-bugbear`] Remove `discard`, `remove`, and `pop` allowance for `loop-iterator-mutation` (`B909`) ([#​12365](https://togithub.com/astral-sh/ruff/pull/12365)) - \[`pylint`] Allow `repeated-equality-comparison` for mixed operations (`PLR1714`) ([#​12369](https://togithub.com/astral-sh/ruff/pull/12369)) - \[`pylint`] Ignore `self` and `cls` when counting arguments (`PLR0913`) ([#​12367](https://togithub.com/astral-sh/ruff/pull/12367)) - \[`pylint`] Use UTF-8 as default encoding in `unspecified-encoding` fix (`PLW1514`) ([#​12370](https://togithub.com/astral-sh/ruff/pull/12370)) ##### Server - Build settings index in parallel for the native server ([#​12299](https://togithub.com/astral-sh/ruff/pull/12299)) - Use fallback settings when indexing the project ([#​12362](https://togithub.com/astral-sh/ruff/pull/12362)) - Consider `--preview` flag for `server` subcommand for the linter and formatter ([#​12208](https://togithub.com/astral-sh/ruff/pull/12208)) ##### Bug fixes - \[`flake8-comprehensions`] Allow additional arguments for `sum` and `max` comprehensions (`C419`) ([#​12364](https://togithub.com/astral-sh/ruff/pull/12364)) - \[`pylint`] Avoid dropping extra boolean operations in `repeated-equality-comparison` (`PLR1714`) ([#​12368](https://togithub.com/astral-sh/ruff/pull/12368)) - \[`pylint`] Consider expression before statement when determining binding kind (`PLR1704`) ([#​12346](https://togithub.com/astral-sh/ruff/pull/12346)) ##### Documentation - Add docs for Ruff language server ([#​12344](https://togithub.com/astral-sh/ruff/pull/12344)) - Migrate to standalone docs repo ([#​12341](https://togithub.com/astral-sh/ruff/pull/12341)) - Update versioning policy for editor integration ([#​12375](https://togithub.com/astral-sh/ruff/pull/12375)) ##### Other changes - Publish Wasm API to npm ([#​12317](https://togithub.com/astral-sh/ruff/pull/12317)) ### [`v0.5.2`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#052) [Compare Source](https://togithub.com/astral-sh/ruff/compare/0.5.1...0.5.2) ##### Preview features - Use `space` separator before parenthesized expressions in comprehensions with leading comments ([#​12282](https://togithub.com/astral-sh/ruff/pull/12282)) - \[`flake8-async`] Update `ASYNC100` to include `anyio` and `asyncio` ([#​12221](https://togithub.com/astral-sh/ruff/pull/12221)) - \[`flake8-async`] Update `ASYNC109` to include `anyio` and `asyncio` ([#​12236](https://togithub.com/astral-sh/ruff/pull/12236)) - \[`flake8-async`] Update `ASYNC110` to include `anyio` and `asyncio` ([#​12261](https://togithub.com/astral-sh/ruff/pull/12261)) - \[`flake8-async`] Update `ASYNC115` to include `anyio` and `asyncio` ([#​12262](https://togithub.com/astral-sh/ruff/pull/12262)) - \[`flake8-async`] Update `ASYNC116` to include `anyio` and `asyncio` ([#​12266](https://togithub.com/astral-sh/ruff/pull/12266)) ##### Rule changes - \[`flake8-return`] Exempt properties from explicit return rule (`RET501`) ([#​12243](https://togithub.com/astral-sh/ruff/pull/12243)) - \[`numpy`] Add `np.NAN`-to-`np.nan` diagnostic ([#​12292](https://togithub.com/astral-sh/ruff/pull/12292)) - \[`refurb`] Make `list-reverse-copy` an unsafe fix ([#​12303](https://togithub.com/astral-sh/ruff/pull/12303)) ##### Server - Consider `include` and `extend-include` settings in native server ([#​12252](https://togithub.com/astral-sh/ruff/pull/12252)) - Include nested configurations in settings reloading ([#​12253](https://togithub.com/astral-sh/ruff/pull/12253)) ##### CLI - Omit code frames for fixes with empty ranges ([#​12304](https://togithub.com/astral-sh/ruff/pull/12304)) - Warn about formatter incompatibility for `D203` ([#​12238](https://togithub.com/astral-sh/ruff/pull/12238)) ##### Bug fixes - Make cache-write failures non-fatal on Windows ([#​12302](https://togithub.com/astral-sh/ruff/pull/12302)) - Treat `not` operations as boolean tests ([#​12301](https://togithub.com/astral-sh/ruff/pull/12301)) - \[`flake8-bandit`] Avoid `S310` violations for HTTP-safe f-strings ([#​12305](https://togithub.com/astral-sh/ruff/pull/12305)) - \[`flake8-bandit`] Support explicit string concatenations in S310 HTTP detection ([#​12315](https://togithub.com/astral-sh/ruff/pull/12315)) - \[`flake8-bandit`] fix S113 false positive for httpx without `timeout` argument ([#​12213](https://togithub.com/astral-sh/ruff/pull/12213)) - \[`pycodestyle`] Remove "non-obvious" allowance for E721 ([#​12300](https://togithub.com/astral-sh/ruff/pull/12300)) - \[`pyflakes`] Consider `with` blocks as single-item branches for redefinition analysis ([#​12311](https://togithub.com/astral-sh/ruff/pull/12311)) - \[`refurb`] Restrict forwarding for `newline` argument in `open()` calls to Python versions >= 3.10 ([#​12244](https://togithub.com/astral-sh/ruff/pull/12244)) ##### Documentation - Update help and documentation to reflect `--output-format full` default ([#​12248](https://togithub.com/astral-sh/ruff/pull/12248)) ##### Performance - Use more threads when discovering Python files ([#​12258](https://togithub.com/astral-sh/ruff/pull/12258)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on monday" in timezone America/Los_Angeles, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/cerebrotech/cucu). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR allows using multiline regexes in
exclude_lines
. It does so by matching regexes against the whole source code, instead of line by line as was done before.The behavior is equivalent to adding a
# pragma: no cover
comment to each line matched by the multiline regex. Because of that, if a suite (e.g.if True:
) is matched, all statements inside it will also be excluded, just like if there was a no-cover pragma on the suite line.This is made possible because @nedbat figured out a O(N) algorithm for finding line numbers for the matches. With it, there's a small performance increase for excluding lines compared to the previous code.
Fixes #996.