Release Notes
Preview features
- Formatter: Avoid invalid syntax for format-spec with quotes for all Python versions (#14625)
- Formatter: Consider quotes inside format-specs when choosing the quotes for an f-string (#14493)
- Formatter: Do not consider f-strings with escaped newlines as multiline (#14624)
- Formatter: Fix f-string formatting in assignment statement (#14454)
- Formatter: Fix unnecessary space around power operator (
**) in overlong f-string expressions (#14489)
- [
airflow] Avoid implicit schedule argument to DAG and @dag (AIR301) (#14581)
- [
flake8-builtins] Exempt private built-in modules (A005) (#14505)
- [
flake8-pytest-style] Fix pytest.mark.parametrize rules to check calls instead of decorators (#14515)
- [
flake8-type-checking] Implement runtime-cast-value (TC006) (#14511)
- [
flake8-type-checking] Implement unquoted-type-alias (TC007) and quoted-type-alias (TC008) (#12927)
- [
flake8-use-pathlib] Recommend Path.iterdir() over os.listdir() (PTH208) (#14509)
- [
pylint] Extend invalid-envvar-default to detect os.environ.get (PLW1508) (#14512)
- [
pylint] Implement len-test (PLC1802) (#14309)
- [
refurb] Fix bug where methods defined using lambdas were flagged by FURB118 (#14639)
- [
ruff] Auto-add r prefix when string has no backslashes for unraw-re-pattern (RUF039) (#14536)
- [
ruff] Implement invalid-assert-message-literal-argument (RUF040) (#14488)
- [
ruff] Implement unnecessary-nested-literal (RUF041) (#14323)
- [
ruff] Implement unnecessary-regular-expression (RUF055) (#14659)
Rule changes
- Ignore more rules for stub files (#14541)
- [
pep8-naming] Eliminate false positives for single-letter names (N811, N814) (#14584)
- [
pyflakes] Avoid false positives in @no_type_check contexts (F821, F722) (#14615)
- [
ruff] Detect redirected-noqa in file-level comments (RUF101) (#14635)
- [
ruff] Mark fixes for unsorted-dunder-all and unsorted-dunder-slots as unsafe when there are complex comments in the sequence (RUF022, RUF023) (#14560)
Bug fixes
- Avoid fixing code to
None | None for redundant-none-literal (PYI061) and never-union (RUF020) (#14583, #14589)
- [
flake8-bugbear] Fix mutable-contextvar-default to resolve annotated function calls properly (B039) (#14532)
- [
flake8-pyi, ruff] Fix traversal of nested literals and unions (PYI016, PYI051, PYI055, PYI062, RUF041) (#14641)
- [
flake8-pyi] Avoid rewriting invalid type expressions in unnecessary-type-union (PYI055) (#14660)
- [
flake8-type-checking] Avoid syntax errors and type checking problem for quoted annotations autofix (TC003, TC006) (#14634)
- [
pylint] Do not wrap function calls in parentheses in the fix for unnecessary-dunder-call (PLC2801) (#14601)
- [
ruff] Handle attrs's auto_attribs correctly (RUF009) (#14520)
Contributors
Install ruff 0.8.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.8.1/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.8.1/ruff-installer.ps1 | iex"
Download ruff 0.8.1