688 Commits

Author SHA1 Message Date
Tobias Hernstig bbc529bc8a docs: Use correct number of lint rules supported (#24942) 2026-04-30 09:08:53 +00:00
renovate[bot] a7d824529b Update dependency ruff to v0.15.12 (#24857) 2026-04-26 22:22:41 -04:00
Dylan 66f93cf7ed Bump 0.15.12 (#24815) 2026-04-24 12:36:40 -05:00
Amethyst Reese ed669eab30 Implement #ruff:file-ignore file-level suppressions (#23599)
Follow-up to #23404

Add support for `#ruff:file-ignore[code]` style file-level suppressions
as own-line comments at global module scope. The range covered by these
suppressions is always the entirety of the file:

```py
# ruff:file-ignore[ARG001]

def foo(
	arg1,
	arg2,
):
	pass

def bar(
	arg1,
	arg2,
):
	pass
```

This currently requires having preview mode enabled. Without preview
mode,
the comments are parsed and processed, but not materialized into active
suppressions at runtime.
2026-04-24 16:02:15 +00:00
Auguste Lalande ae5e5b9ba9 [docs] Improve rules table accessibility (#24711) 2026-04-21 14:27:23 +01:00
Amethyst Reese 49aa2b253d Implement #ruff:ignore logical-line suppressions (#23404)
Adds support for `#ruff:ignore[code]` style suppressions as either
own-line
or end-of-line comments. The range covered by these suppressions is
determined
by the comment's position relative to the associated logical line
(statement
or suite header).

Standalone `ignore` comments apply to an entire multi-line
statement/header if the comment appears above the first line:
```py
# covers the entire header
def foo(
	arg1,
	arg2,
):
	pass
```
But will only apply to a single following line if it appears in the
middle of a multi-line statement/header:
```py
def foo(
	# only covers the next line
	arg1,
	arg2,
):
	pass
```

Trailing comments will only apply to a single physical line, similar to
existing `#noqa` comments:

```py
def foo(
    arg1, # only covers arg1
    arg2,
):
    pass
```


Intervening comments are allowed, which enables "stacking" of
`#ruff:ignore` comments with other own-line pragma comments:
```py
# ruff:ignore[code]
# fmt:off
value = [
	1, 2,
	3, 4,
]
# fmt:on
```

Includes some refactoring of the structs to generalize the naming/terms
used, otherwise the rest of the suppression system should be able to
stay unchanged.
2026-04-20 11:38:32 -07:00
renovate[bot] fd8e921461 Update dependency ruff to v0.15.11 (#24723)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-19 22:11:12 -04:00
Amethyst Reese 53554b1cfe Bump 0.15.11 (#24678) 2026-04-16 11:17:46 -07:00
Ben Berry-Allwood 8d0cdb32dd Update Neovim config examples to use vim.lsp.config (#24577)
## Summary

Neovim 0.11 (in March 2025) added
[vim.lsp.config()](https://neovim.io/doc/user/lsp/#vim.lsp.config())
which is now the recommended way to set up language servers. This was
added to the Ruff docs in #18108 in addition to the legacy method using
`nvim-lspconfig`.

Calling `nvim-lspconfig` to configure a language server is deprecated -
see [their
documentation](https://github.com/neovim/nvim-lspconfig?tab=readme-ov-file#important-%EF%B8%8F).

This PR:
- updates the documentation which describes both methods to now prefer
`vim.lsp.config`
- updates all other examples which only show the legacy method to now
use `vim.lsp.config`.

## Test Plan

I have tested a subset of the examples locally using Neovim 0.12.1.

---

I considered just removing the legacy method but was unsure. I'll follow
others' guidance on when that should be kept until.


https://github.com/user-attachments/assets/93984c45-a2f1-48dd-9fec-ed291b0a144e

---------

Co-authored-by: Dhruv Manilawala <dhruvmanila@gmail.com>
2026-04-13 07:44:45 +00:00
renovate[bot] e0c94198f0 Update dependency ruff to v0.15.10 (#24587)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-13 08:42:10 +02:00
Brent Westbrook 252f76102a Bump 0.15.10 (#24519) 2026-04-09 09:48:41 -04:00
shizuku 16c4090d0a docs: fix JSON typo in settings example (#24517)
## Summary

Fix a typo in the `fixViolation` example in `docs/editors/settings.md`
by removing a stray `=`.

## Test Plan

- not applicable (documentation-only change)
2026-04-09 11:27:19 +00:00
renovate[bot] 6ce1905aed Update dependency ruff to v0.15.9 (#24431) 2026-04-05 22:05:31 -04:00
renovate[bot] 2703ec64fd Update dependency mkdocs-redirects to v1.2.3 (#24430) 2026-04-05 22:05:23 -04:00
Dylan 724ccc1ae8 Bump 0.15.9 (#24369) 2026-04-02 12:59:00 -05:00
Matthew Lloyd 6468a35e9b Add nested-string-quote-style formatting option (#24312) 2026-03-31 18:48:24 +02:00
renovate[bot] fe84a4e987 Update dependency mkdocs-material to v9.7.6 (#24285) 2026-03-29 20:30:34 -04:00
renovate[bot] d11fd4bacb Update dependency ruff to v0.15.8 (#24286) 2026-03-29 20:29:32 -04:00
Amethyst Reese c2a8815842 Release 0.15.8 (#24217)
- **changelog**
- **everything else**
2026-03-26 11:20:09 -07:00
renovate[bot] 926036071f Update dependency mkdocs-material to v9.7.5 (#24118) 2026-03-22 20:28:39 -04:00
renovate[bot] 3852760371 Update dependency ruff to v0.15.7 (#24119) 2026-03-23 00:27:13 +00:00
Brent Westbrook 0ef39de46c Bump 0.15.7 (#24049) 2026-03-19 12:09:44 -04:00
renovate[bot] c48370cb55 Update dependency mkdocs-material to v9.7.4 (#23978)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[mkdocs-material](https://redirect.github.com/squidfunk/mkdocs-material)
([changelog](https://squidfunk.github.io/mkdocs-material/changelog/)) |
`==9.7.3` → `==9.7.4` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/mkdocs-material/9.7.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/mkdocs-material/9.7.3/9.7.4?slim=true)
|

---

### Release Notes

<details>
<summary>squidfunk/mkdocs-material (mkdocs-material)</summary>

###
[`v9.7.4`](https://redirect.github.com/squidfunk/mkdocs-material/releases/tag/9.7.4):
mkdocs-material-9.7.4

[Compare
Source](https://redirect.github.com/squidfunk/mkdocs-material/compare/9.7.3...9.7.4)

> \[!WARNING]
>
> **Material for MkDocs is in maintenance mode**
>
> Going forward, the Material for MkDocs team focuses on [Zensical], a
next-gen static site generator built from first principles. We will
provide critical bug fixes and security updates for Material for MkDocs
until November 2026.
>
> [Read the full announcement on our blog]

[Zensical]: https://zensical.org

[Read the full announcement on our blog]:
https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/

#### Changes

- Hardened social cards plugin by switching to sandboxed environment
(recommended by
[@&#8203;caveeroo](https://redirect.github.com/caveeroo))
- Updated MkDocs 2.0 incompatibility warning

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-16 07:51:06 +00:00
renovate[bot] 786df75f71 Update dependency ruff to v0.15.6 (#23979)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [ruff](https://docs.astral.sh/ruff)
([source](https://redirect.github.com/astral-sh/ruff),
[changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| `==0.15.5` → `==0.15.6` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.15.6?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.15.5/0.15.6?slim=true)
|

---

### Release Notes

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

###
[`v0.15.6`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0156)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.5...0.15.6)

Released on 2026-03-12.

##### Preview features

- Add support for `lazy` import parsing
([#&#8203;23755](https://redirect.github.com/astral-sh/ruff/pull/23755))
- Add support for star-unpacking of comprehensions (PEP 798)
([#&#8203;23788](https://redirect.github.com/astral-sh/ruff/pull/23788))
- Reject semantic syntax errors for lazy imports
([#&#8203;23757](https://redirect.github.com/astral-sh/ruff/pull/23757))
- Drop a few rules from the preview default set
([#&#8203;23879](https://redirect.github.com/astral-sh/ruff/pull/23879))
- \[`airflow`] Flag `Variable.get()` calls outside of task execution
context (`AIR003`)
([#&#8203;23584](https://redirect.github.com/astral-sh/ruff/pull/23584))
- \[`airflow`] Flag runtime-varying values in DAG/task constructor
arguments (`AIR304`)
([#&#8203;23631](https://redirect.github.com/astral-sh/ruff/pull/23631))
- \[`flake8-bugbear`] Implement `delattr-with-constant` (`B043`)
([#&#8203;23737](https://redirect.github.com/astral-sh/ruff/pull/23737))
- \[`flake8-tidy-imports`] Add `TID254` to enforce lazy imports
([#&#8203;23777](https://redirect.github.com/astral-sh/ruff/pull/23777))
- \[`flake8-tidy-imports`] Allow users to ban lazy imports with `TID254`
([#&#8203;23847](https://redirect.github.com/astral-sh/ruff/pull/23847))
- \[`isort`] Retain `lazy` keyword when sorting imports
([#&#8203;23762](https://redirect.github.com/astral-sh/ruff/pull/23762))
- \[`pyupgrade`] Add `from __future__ import annotations` automatically
(`UP006`)
([#&#8203;23260](https://redirect.github.com/astral-sh/ruff/pull/23260))
- \[`refurb`] Support `newline` parameter in `FURB101` for Python 3.13+
([#&#8203;23754](https://redirect.github.com/astral-sh/ruff/pull/23754))
- \[`ruff`] Add `os-path-commonprefix` (`RUF071`)
([#&#8203;23814](https://redirect.github.com/astral-sh/ruff/pull/23814))
- \[`ruff`] Add unsafe fix for os-path-commonprefix (`RUF071`)
([#&#8203;23852](https://redirect.github.com/astral-sh/ruff/pull/23852))
- \[`ruff`] Limit `RUF036` to typing contexts; make it unsafe for
non-typing-only
([#&#8203;23765](https://redirect.github.com/astral-sh/ruff/pull/23765))
- \[`ruff`] Use starred unpacking for `RUF017` in Python 3.15+
([#&#8203;23789](https://redirect.github.com/astral-sh/ruff/pull/23789))

##### Bug fixes

- Fix `--add-noqa` creating unwanted leading whitespace
([#&#8203;23773](https://redirect.github.com/astral-sh/ruff/pull/23773))
- Fix `--add-noqa` breaking shebangs
([#&#8203;23577](https://redirect.github.com/astral-sh/ruff/pull/23577))
- \[formatter] Fix lambda body formatting for multiline calls and
subscripts
([#&#8203;23866](https://redirect.github.com/astral-sh/ruff/pull/23866))
- \[formatter] Preserve required annotation parentheses in annotated
assignments
([#&#8203;23865](https://redirect.github.com/astral-sh/ruff/pull/23865))
- \[formatter] Preserve type-expression parentheses in the formatter
([#&#8203;23867](https://redirect.github.com/astral-sh/ruff/pull/23867))
- \[`flake8-annotations`] Fix stack overflow in `ANN401` on quoted
annotations with escape sequences
([#&#8203;23912](https://redirect.github.com/astral-sh/ruff/pull/23912))
- \[`pep8-naming`] Check naming conventions in `match` pattern bindings
(`N806`, `N815`, `N816`)
([#&#8203;23899](https://redirect.github.com/astral-sh/ruff/pull/23899))
- \[`perflint`] Fix comment duplication in fixes (`PERF401`, `PERF403`)
([#&#8203;23729](https://redirect.github.com/astral-sh/ruff/pull/23729))
- \[`pyupgrade`] Properly trigger `super` change in nested class
(`UP008`)
([#&#8203;22677](https://redirect.github.com/astral-sh/ruff/pull/22677))
- \[`ruff`] Avoid syntax errors in `RUF036` fixes
([#&#8203;23764](https://redirect.github.com/astral-sh/ruff/pull/23764))

##### Rule changes

- \[`flake8-bandit`] Flag `S501` with `requests.request`
([#&#8203;23873](https://redirect.github.com/astral-sh/ruff/pull/23873))
- \[`flake8-executable`] Fix WSL detection in non-Docker containers
([#&#8203;22879](https://redirect.github.com/astral-sh/ruff/pull/22879))
- \[`flake8-print`] Ignore `pprint` calls with `stream=`
([#&#8203;23787](https://redirect.github.com/astral-sh/ruff/pull/23787))

##### Documentation

- Update docs for Markdown code block formatting
([#&#8203;23871](https://redirect.github.com/astral-sh/ruff/pull/23871))
- \[`flake8-bugbear`] Fix misleading description for `B904`
([#&#8203;23731](https://redirect.github.com/astral-sh/ruff/pull/23731))

##### Contributors

- [@&#8203;zsol](https://redirect.github.com/zsol)
- [@&#8203;carljm](https://redirect.github.com/carljm)
- [@&#8203;ntBre](https://redirect.github.com/ntBre)
- [@&#8203;Bortlesboat](https://redirect.github.com/Bortlesboat)
- [@&#8203;sososonia-cyber](https://redirect.github.com/sososonia-cyber)
- [@&#8203;chirizxc](https://redirect.github.com/chirizxc)
- [@&#8203;leandrobbraga](https://redirect.github.com/leandrobbraga)
- [@&#8203;11happy](https://redirect.github.com/11happy)
- [@&#8203;Acelogic](https://redirect.github.com/Acelogic)
- [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish)
- [@&#8203;amyreese](https://redirect.github.com/amyreese)
- [@&#8203;xvchris](https://redirect.github.com/xvchris)
- [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh)
- [@&#8203;getehen](https://redirect.github.com/getehen)
- [@&#8203;Dev-iL](https://redirect.github.com/Dev-iL)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-16 07:50:18 +00:00
Amethyst Reese 3f96e100c8 Document editor features for markdown code formatting (#23924) 2026-03-13 12:32:18 -07:00
Dylan e4c7f35777 Bump 0.15.6 (#23919) 2026-03-12 17:48:57 -05:00
Amethyst Reese 919febc9b8 Update docs for Markdown code block formatting (#23871) 2026-03-10 11:11:26 -07:00
renovate[bot] 413d60570a Update dependency ruff to v0.15.5 (#23819) 2026-03-08 22:13:23 -04:00
renovate[bot] b6b861ca83 Update dependency mkdocs-material to v9.7.3 (#23818) 2026-03-08 22:13:14 -04:00
Amethyst Reese 5e4a3d9c3b Bump 0.15.5 (#23743)
Co-authored-by: Brent Westbrook <36778786+ntBre@users.noreply.github.com>
2026-03-05 19:48:21 +00:00
Amethyst Reese 9a70f5eb2f Discover markdown files by default in preview mode (#23434)
Adds `*.md` to the list of default globs in preview mode.

Adds a simple filter to the `check` CLI command to exclude file types
that aren't
supported for linting before checking if the set of resolved paths is
empty, preserving
existing behavior of warning "No Python files found under the given
path(s)" even if
there are markdown files present and preview mode is enabled.

Fixes #3792
2026-03-05 09:55:23 -08:00
renovate[bot] 1fc3aff61f Update dependency mkdocs-material to v9.7.2 (#23659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 11:28:20 +00:00
renovate[bot] c8f8f5ede5 Update dependency ruff to v0.15.4 (#23660)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [ruff](https://docs.astral.sh/ruff)
([source](https://redirect.github.com/astral-sh/ruff),
[changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| `==0.15.2` → `==0.15.4` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.15.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.15.2/0.15.4?slim=true)
|

---

### Release Notes

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

###
[`v0.15.4`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0154)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.3...0.15.4)

Released on 2026-02-26.

This is a follow-up release to 0.15.3 that resolves a panic when the new
rule `PLR1712` was enabled with any rule that analyzes definitions, such
as many of the `ANN` or `D` rules.

##### Bug fixes

- Fix panic on access to definitions after analyzing definitions
([#&#8203;23588](https://redirect.github.com/astral-sh/ruff/pull/23588))
- \[`pyflakes`] Suppress false positive in `F821` for names used before
`del` in stub files
([#&#8203;23550](https://redirect.github.com/astral-sh/ruff/pull/23550))

##### Documentation

- Clarify first-party import detection in Ruff
([#&#8203;23591](https://redirect.github.com/astral-sh/ruff/pull/23591))
- Fix incorrect `import-heading` example
([#&#8203;23568](https://redirect.github.com/astral-sh/ruff/pull/23568))

##### Contributors

- [@&#8203;stakeswky](https://redirect.github.com/stakeswky)
- [@&#8203;ntBre](https://redirect.github.com/ntBre)
- [@&#8203;thejcannon](https://redirect.github.com/thejcannon)
- [@&#8203;GeObts](https://redirect.github.com/GeObts)

###
[`v0.15.3`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0153)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.2...0.15.3)

Released on 2026-02-26.

##### Preview features

- Drop explicit support for `.qmd` file extension
([#&#8203;23572](https://redirect.github.com/astral-sh/ruff/pull/23572))

This can now be enabled instead by setting the
[`extension`](https://docs.astral.sh/ruff/settings/#extension) option:

  ```toml
  # ruff.toml
  extension = { qmd = "markdown" }

  # pyproject.toml
  [tool.ruff]
  extension = { qmd = "markdown" }
  ```

- Include configured extensions in file discovery
([#&#8203;23400](https://redirect.github.com/astral-sh/ruff/pull/23400))

- \[`flake8-bandit`] Allow suspicious imports in `TYPE_CHECKING` blocks
(`S401`-`S415`)
([#&#8203;23441](https://redirect.github.com/astral-sh/ruff/pull/23441))

- \[`flake8-bugbear`] Allow `B901` in pytest hook wrappers
([#&#8203;21931](https://redirect.github.com/astral-sh/ruff/pull/21931))

- \[`flake8-import-conventions`] Add missing conventions from upstream
(`ICN001`, `ICN002`)
([#&#8203;21373](https://redirect.github.com/astral-sh/ruff/pull/21373))

- \[`pydocstyle`] Add rule to enforce docstring section ordering
(`D420`)
([#&#8203;23537](https://redirect.github.com/astral-sh/ruff/pull/23537))

- \[`pylint`] Implement `swap-with-temporary-variable` (`PLR1712`)
([#&#8203;22205](https://redirect.github.com/astral-sh/ruff/pull/22205))

- \[`ruff`] Add `unnecessary-assign-before-yield` (`RUF070`)
([#&#8203;23300](https://redirect.github.com/astral-sh/ruff/pull/23300))

- \[`ruff`] Support file-level noqa in `RUF102`
([#&#8203;23535](https://redirect.github.com/astral-sh/ruff/pull/23535))

- \[`ruff`] Suppress diagnostic for invalid f-strings before Python 3.12
(`RUF027`)
([#&#8203;23480](https://redirect.github.com/astral-sh/ruff/pull/23480))

- \[`flake8-bandit`] Don't flag `BaseLoader`/`CBaseLoader` as unsafe
(`S506`)
([#&#8203;23510](https://redirect.github.com/astral-sh/ruff/pull/23510))

##### Bug fixes

- Avoid infinite loop between `I002` and `PYI025`
([#&#8203;23352](https://redirect.github.com/astral-sh/ruff/pull/23352))
- \[`pyflakes`] Fix false positive for `@overload` from
`lint.typing-modules` (`F811`)
([#&#8203;23357](https://redirect.github.com/astral-sh/ruff/pull/23357))
- \[`pyupgrade`] Fix false positive for `TypeVar` default before Python
3.12 (`UP046`)
([#&#8203;23540](https://redirect.github.com/astral-sh/ruff/pull/23540))
- \[`pyupgrade`] Fix handling of `\N` in raw strings (`UP032`)
([#&#8203;22149](https://redirect.github.com/astral-sh/ruff/pull/22149))

##### Rule changes

- Render sub-diagnostics in the GitHub output format
([#&#8203;23455](https://redirect.github.com/astral-sh/ruff/pull/23455))

- \[`flake8-bugbear`] Tag certain `B007` diagnostics as unnecessary
([#&#8203;23453](https://redirect.github.com/astral-sh/ruff/pull/23453))

- \[`ruff`] Ignore unknown rule codes in `RUF100`
([#&#8203;23531](https://redirect.github.com/astral-sh/ruff/pull/23531))

These are now flagged by
[`RUF102`](https://docs.astral.sh/ruff/rules/invalid-rule-code/)
instead.

##### Documentation

- Fix missing settings links for several linters
([#&#8203;23519](https://redirect.github.com/astral-sh/ruff/pull/23519))
- Update isort action comments heading
([#&#8203;23515](https://redirect.github.com/astral-sh/ruff/pull/23515))
- \[`pydocstyle`] Fix double comma in description of `D404`
([#&#8203;23440](https://redirect.github.com/astral-sh/ruff/pull/23440))

##### Other changes

- Update the Python module (notably `find_ruff_bin`) for parity with uv
([#&#8203;23406](https://redirect.github.com/astral-sh/ruff/pull/23406))

##### Contributors

- [@&#8203;zanieb](https://redirect.github.com/zanieb)
- [@&#8203;o1x3](https://redirect.github.com/o1x3)
- [@&#8203;assadyousuf](https://redirect.github.com/assadyousuf)
- [@&#8203;kar-ganap](https://redirect.github.com/kar-ganap)
- [@&#8203;denyszhak](https://redirect.github.com/denyszhak)
- [@&#8203;amyreese](https://redirect.github.com/amyreese)
- [@&#8203;carljm](https://redirect.github.com/carljm)
- [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish)
- [@&#8203;Bnyro](https://redirect.github.com/Bnyro)
- [@&#8203;danparizher](https://redirect.github.com/danparizher)
- [@&#8203;ntBre](https://redirect.github.com/ntBre)
- [@&#8203;gcomneno](https://redirect.github.com/gcomneno)
- [@&#8203;jaap3](https://redirect.github.com/jaap3)
- [@&#8203;stakeswky](https://redirect.github.com/stakeswky)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 07:46:25 +00:00
Brent Westbrook bc12fbb565 Update default Python version examples (#23605)
## Summary

Brings our documentation up to date with the implementation, see
https://github.com/astral-sh/ruff/pull/17529#issuecomment-3972000021

## Test Plan
2026-02-27 18:00:03 -05:00
Amethyst Reese 9982ad302a Document extension mapping for markdown code formatting (#23574)
Co-authored-by: Brent Westbrook <36778786+ntBre@users.noreply.github.com>
2026-02-26 21:24:50 +00:00
Brent Westbrook f14edd8661 Bump 0.15.4 (#23595)
Just to be sure, I ran the example from #23587 again on this branch:

```console
~/astral/ruff on  brent/0.15.4 [$] is 📦 v0.15.4 via 🐍 v3.14.2 via 🦀 v1.93.0
❯ echo 'x = id' | uvx ruff@latest --isolated check - --preview --select ANN003,PLR1712

error: Ruff crashed. If you could open an issue at:

    https://github.com/astral-sh/ruff/issues/new?title=%5BPanic%5D

...quoting the executed command, along with the relevant file contents and `pyproject.toml` settings, we'd be very appreciative!


thread 'main' (1681253) panicked at crates/ruff_python_semantic/src/definition.rs:285:26:
index out of bounds: the len is 0 but the index is 0
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

~/astral/ruff on  brent/0.15.4 [$] is 📦 v0.15.4 via 🐍 v3.14.2 via 🦀 v1.93.0
❯ echo 'x = id' | just run --isolated check - --preview --select ANN003,PLR1712
cargo run -p ruff -- --isolated check - --preview --select ANN003,PLR1712
   Compiling ruff_python_semantic v0.0.0 (/home/brent/astral/ruff/crates/ruff_python_semantic)
   Compiling ruff v0.15.4 (/home/brent/astral/ruff/crates/ruff)
   Compiling ruff_linter v0.15.4 (/home/brent/astral/ruff/crates/ruff_linter)
   Compiling ruff_graph v0.1.0 (/home/brent/astral/ruff/crates/ruff_graph)
   Compiling ruff_workspace v0.0.0 (/home/brent/astral/ruff/crates/ruff_workspace)
   Compiling ruff_markdown v0.0.0 (/home/brent/astral/ruff/crates/ruff_markdown)
   Compiling ruff_server v0.2.2 (/home/brent/astral/ruff/crates/ruff_server)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 23.14s
     Running `target/debug/ruff --isolated check - --preview --select ANN003,PLR1712`
warning: Detected debug build without --no-cache.
All checks passed!
```
2026-02-26 14:46:41 -05:00
Josh Cannon 625b4f5a67 [ruff] docs: Clarify first-party import detection in Ruff (#23591) 2026-02-26 10:38:39 -08:00
Brent Westbrook e5f2f36a3f Bump 0.15.3 (#23585) 2026-02-26 10:22:43 -05:00
Brent Westbrook e5ca9dd8f0 Update isort action comments heading (#23515)
Summary
--

Closes #23450 by renaming the `Action comments` heading to `isort action
comments`. I agree with the issue author that this should make it easier
to find.

Test Plan
--
2026-02-23 09:15:26 -05:00
renovate[bot] 630aa3ae45 Update dependency ruff to v0.15.2 (#23485) 2026-02-23 02:04:27 +00:00
Dylan 7cc15f024b Bump 0.15.2 (#23430) 2026-02-19 15:04:36 -06:00
Toshiki Kataoka a04d67ec1c Add Q004 to the list of conflicting rules (#23340)
## Summary

The page of unnecessary-escaped-quote (Q004) says it's redundant with
the formatter.

https://docs.astral.sh/ruff/rules/unnecessary-escaped-quote/#formatter-compatibility
But the list of the [conflicting lint
rules](https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules)
missed it.

<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

<!-- How was it tested? -->
2026-02-16 14:43:11 +00:00
renovate[bot] 9d1e79b2c9 Update dependency ruff to v0.15.1 (#23308)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [ruff](https://docs.astral.sh/ruff)
([source](https://redirect.github.com/astral-sh/ruff),
[changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| `==0.15.0` → `==0.15.1` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.15.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.15.0/0.15.1?slim=true)
|

---

### Release Notes

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

###
[`v0.15.1`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0151)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.0...0.15.1)

Released on 2026-02-12.

##### Preview features

- \[`airflow`] Add ruff rules to catch deprecated Airflow imports for
Airflow 3.1 (`AIR321`)
([#&#8203;22376](https://redirect.github.com/astral-sh/ruff/pull/22376))
- \[`airflow`] Third positional parameter not named `ti_key` should be
flagged for `BaseOperatorLink.get_link` (`AIR303`)
([#&#8203;22828](https://redirect.github.com/astral-sh/ruff/pull/22828))
- \[`flake8-gettext`] Fix false negatives for plural argument of
`ngettext` (`INT001`, `INT002`, `INT003`)
([#&#8203;21078](https://redirect.github.com/astral-sh/ruff/pull/21078))
- \[`pyflakes`] Fix infinite loop in preview fix for `unused-import`
(`F401`)
([#&#8203;23038](https://redirect.github.com/astral-sh/ruff/pull/23038))
- \[`pygrep-hooks`] Detect non-existent mock methods in standalone
expressions (`PGH005`)
([#&#8203;22830](https://redirect.github.com/astral-sh/ruff/pull/22830))
- \[`pylint`] Allow dunder submodules and improve diagnostic range
(`PLC2701`)
([#&#8203;22804](https://redirect.github.com/astral-sh/ruff/pull/22804))
- \[`pyupgrade`] Improve diagnostic range for tuples (`UP024`)
([#&#8203;23013](https://redirect.github.com/astral-sh/ruff/pull/23013))
- \[`refurb`] Check subscripts in tuple do not use lambda parameters in
`reimplemented-operator` (`FURB118`)
([#&#8203;23079](https://redirect.github.com/astral-sh/ruff/pull/23079))
- \[`ruff`] Detect mutable defaults in `field` calls (`RUF008`)
([#&#8203;23046](https://redirect.github.com/astral-sh/ruff/pull/23046))
- \[`ruff`] Ignore std `cmath.inf` (`RUF069`)
([#&#8203;23120](https://redirect.github.com/astral-sh/ruff/pull/23120))
- \[`ruff`] New rule `float-equality-comparison` (`RUF069`)
([#&#8203;20585](https://redirect.github.com/astral-sh/ruff/pull/20585))
- Don't format unlabeled Markdown code blocks
([#&#8203;23106](https://redirect.github.com/astral-sh/ruff/pull/23106))
- Markdown formatting support in LSP
([#&#8203;23063](https://redirect.github.com/astral-sh/ruff/pull/23063))
- Support Quarto Markdown language markers
([#&#8203;22947](https://redirect.github.com/astral-sh/ruff/pull/22947))
- Support formatting `pycon` Markdown code blocks
([#&#8203;23112](https://redirect.github.com/astral-sh/ruff/pull/23112))
- Use extension mapping to select Markdown code block language
([#&#8203;22934](https://redirect.github.com/astral-sh/ruff/pull/22934))

##### Bug fixes

- Avoid false positive for undefined variables in `FAST001`
([#&#8203;23224](https://redirect.github.com/astral-sh/ruff/pull/23224))
- Avoid introducing syntax errors for `FAST003` autofix
([#&#8203;23227](https://redirect.github.com/astral-sh/ruff/pull/23227))
- Avoid suggesting `InitVar` for `__post_init__` that references PEP 695
type parameters
([#&#8203;23226](https://redirect.github.com/astral-sh/ruff/pull/23226))
- Deduplicate type variables in generic functions
([#&#8203;23225](https://redirect.github.com/astral-sh/ruff/pull/23225))
- Fix exception handler parenthesis removal for Python 3.14+
([#&#8203;23126](https://redirect.github.com/astral-sh/ruff/pull/23126))
- Fix f-string middle panic when parsing t-strings
([#&#8203;23232](https://redirect.github.com/astral-sh/ruff/pull/23232))
- Wrap `RUF020` target for multiline fixes
([#&#8203;23210](https://redirect.github.com/astral-sh/ruff/pull/23210))
- Wrap `UP007` target for multiline fixes
([#&#8203;23208](https://redirect.github.com/astral-sh/ruff/pull/23208))
- Fix missing diagnostics for last range suppression in file
([#&#8203;23242](https://redirect.github.com/astral-sh/ruff/pull/23242))
- \[`pyupgrade`] Fix syntax error on string with newline escape and
comment (`UP037`)
([#&#8203;22968](https://redirect.github.com/astral-sh/ruff/pull/22968))

##### Rule changes

- Use `ruff` instead of `Ruff` as the program name in GitHub output
format
([#&#8203;23240](https://redirect.github.com/astral-sh/ruff/pull/23240))
- \[`PT006`] Fix syntax error when unpacking nested tuples in
`parametrize` fixes
([#&#8203;22441](https://redirect.github.com/astral-sh/ruff/issues/22441))
([#&#8203;22464](https://redirect.github.com/astral-sh/ruff/pull/22464))
- \[`airflow`] Catch deprecated attribute access from context key for
Airflow 3.0 (`AIR301`)
([#&#8203;22850](https://redirect.github.com/astral-sh/ruff/pull/22850))
- \[`airflow`] Capture deprecated arguments and a decorator (`AIR301`)
([#&#8203;23170](https://redirect.github.com/astral-sh/ruff/pull/23170))
- \[`flake8-boolean-trap`] Add `multiprocessing.Value` to excluded
functions for `FBT003`
([#&#8203;23010](https://redirect.github.com/astral-sh/ruff/pull/23010))
- \[`flake8-bugbear`] Add a secondary annotation showing the previous
occurrence (`B033`)
([#&#8203;22634](https://redirect.github.com/astral-sh/ruff/pull/22634))
- \[`flake8-type-checking`] Add sub-diagnostic showing the runtime use
of an annotation (`TC004`)
([#&#8203;23091](https://redirect.github.com/astral-sh/ruff/pull/23091))
- \[`isort`] Support configurable import section heading comments
([#&#8203;23151](https://redirect.github.com/astral-sh/ruff/pull/23151))
- \[`ruff`] Improve the diagnostic for `RUF012`
([#&#8203;23202](https://redirect.github.com/astral-sh/ruff/pull/23202))

##### Formatter

- Suppress diagnostic output for `format --check --silent`
([#&#8203;17736](https://redirect.github.com/astral-sh/ruff/pull/17736))

##### Documentation

- Add tabbed shell completion documentation
([#&#8203;23169](https://redirect.github.com/astral-sh/ruff/pull/23169))
- Explain how to enable Markdown formatting for pre-commit hook
([#&#8203;23077](https://redirect.github.com/astral-sh/ruff/pull/23077))
- Fixed import in `runtime-evaluated-decorators` example
([#&#8203;23187](https://redirect.github.com/astral-sh/ruff/pull/23187))
- Update ruff server contributing guide
([#&#8203;23060](https://redirect.github.com/astral-sh/ruff/pull/23060))

##### Other changes

- Exclude WASM artifacts from GitHub releases
([#&#8203;23221](https://redirect.github.com/astral-sh/ruff/pull/23221))

##### Contributors

- [@&#8203;mkniewallner](https://redirect.github.com/mkniewallner)
- [@&#8203;bxff](https://redirect.github.com/bxff)
- [@&#8203;dylwil3](https://redirect.github.com/dylwil3)
- [@&#8203;Avasam](https://redirect.github.com/Avasam)
- [@&#8203;amyreese](https://redirect.github.com/amyreese)
- [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh)
- [@&#8203;Alex-ley-scrub](https://redirect.github.com/Alex-ley-scrub)
- [@&#8203;Kalmaegi](https://redirect.github.com/Kalmaegi)
- [@&#8203;danparizher](https://redirect.github.com/danparizher)
- [@&#8203;AiyionPrime](https://redirect.github.com/AiyionPrime)
- [@&#8203;eureka928](https://redirect.github.com/eureka928)
- [@&#8203;11happy](https://redirect.github.com/11happy)
- [@&#8203;Jkhall81](https://redirect.github.com/Jkhall81)
- [@&#8203;chirizxc](https://redirect.github.com/chirizxc)
- [@&#8203;leandrobbraga](https://redirect.github.com/leandrobbraga)
- [@&#8203;tvatter](https://redirect.github.com/tvatter)
- [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish)
- [@&#8203;shaanmajid](https://redirect.github.com/shaanmajid)
- [@&#8203;ntBre](https://redirect.github.com/ntBre)
- [@&#8203;sjyangkevin](https://redirect.github.com/sjyangkevin)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My44LjUiLCJ1cGRhdGVkSW5WZXIiOiI0My44LjUiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImludGVybmFsIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 01:31:42 +00:00
Amethyst Reese a2f11d239f Prepare for 0.15.1 (#23253)
- **Changelog**
- **Everything else**

---------

Co-authored-by: Brent Westbrook <36778786+ntBre@users.noreply.github.com>
2026-02-12 14:17:21 -08:00
Charlie Marsh 0c52521b4b Add tabbed shell completion documentation (#23169)
## Summary

Closes https://github.com/astral-sh/ruff/issues/23168.
2026-02-09 09:01:52 -05:00
renovate[bot] 96bbc5b306 Update dependency ruff to v0.15.0 (#23164) 2026-02-08 21:21:05 -05:00
renovate[bot] f0d1b7a8c8 Update dependency mdformat-mkdocs to v5.1.4 (#23155) 2026-02-08 21:15:07 -05:00
Thibault Vatter ddd192ac18 Support Quarto Markdown language markers (#22947)
See [this
comment](https://github.com/astral-sh/ruff/pull/22470#issuecomment-3818540650)
from #22470. Also related to #6140.

## Summary

Add support for formatting code blocks with curly brace syntax (e.g.,
\`\`\`{python}, \`\`\`{py}, \`\`\`{pyi}) in Markdown files. This syntax
is commonly used in tools like Quarto and R Markdown.

The regex pattern now matches both the standard syntax (\`\`\`python)
and the curly brace variant (\`\`\`{python}).

## Test Plan

Added test cases.

Fix #22951

---------

Co-authored-by: Amethyst Reese <amethyst@n7.gg>
2026-02-04 16:21:34 -08:00
Mathieu Kniewallner 0f02d48e6f Explain how to enable Markdown formatting for pre-commit hook (#23077)
## Summary

When running Ruff through pre-commit, since [`types_or` does not include
`markdown`](https://github.com/astral-sh/ruff-pre-commit/blob/0470f7c8a653e950f7cc5a653204ceb3fde4c02a/.pre-commit-hooks.yaml#L17),
Markdown files are not included. I believe it could be useful to
indicate what needs be done in that case.

We could also set `markdown` to `ruff-format` hook, but we probably
don't want to do that until the feature is stable?

## Test Plan

Tested the hook locally on a project using Markdown files.

For the documentation, checked it locally:
<img width="1058" height="259" alt="image"
src="https://github.com/user-attachments/assets/251a67e2-e1f7-4357-ba0c-52d6f65fe39a"
/>
2026-02-04 16:12:04 -08:00
Brent Westbrook ce5f7b6127 Bump 0.15.0 (#23055) 2026-02-03 12:20:59 -05:00