diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md index 0558ab5cca1ee3..e385d85febaa71 100644 --- a/BREAKING_CHANGES.md +++ b/BREAKING_CHANGES.md @@ -1,5 +1,50 @@ # Breaking Changes +## 0.3.0 + +### Ruff 2024.2 style +The `format` command now uses the improved Ruff 2024.2 style. Expect changes in formatting when upgrading. + +### `isort`: Use one blank line after imports in typing stub files + +Previously, Ruff used one or two blank lines (or the number configured by `isort.lines-after-imports`) in typing stub files (`.pyi`). +Using more than one blank line isn't in accordance with the [typing style guide](https://typing.readthedocs.io/en/latest/source/stubs.html#style-guide) and incompatible with ruff's formatter. +As of this release, `isort` now always uses one blank line after imports in typing stub files. + +### Remove `build` from the default exclusion list + +Ruff maintains a list of default exclusions, which now consists of the following patterns: + +- `.bzr` +- `.direnv` +- `.eggs` +- `.git` +- `.git-rewrite` +- `.hg` +- `.ipynb_checkpoints` +- `.mypy_cache` +- `.nox` +- `.pants.d` +- `.pyenv` +- `.pytest_cache` +- `.pytype` +- `.ruff_cache` +- `.svn` +- `.tox` +- `.venv` +- `.vscode` +- `__pypackages__` +- `_build` +- `buck-out` +- `dist` +- `node_modules` +- `site-packages` +- `venv` + +Previously, the `build` directory was excluded by default. However, the `build` directory tends to be a not un-popular directory +name and excluding it by default caused confusion. Ruff now no longer excludes `build` by default except if it is excluded in your `.gitignore`. +If necessary, you can exclude `build` by adding it to `extend-exclude` in your `pyproject.toml` file. + ## 0.1.9 ### `site-packages` is now excluded by default ([#5513](https://github.com/astral-sh/ruff/pull/5513)) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7846a900aab2cc..e8c4cf6252fd09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,83 @@ # Changelog +## 0.3.0 + +This release introduces the new Ruff formatter 2024 stable style and adds a new lint rule to +detect invalid formatter suppression comments. + +### Preview features + +- [`pycodestyle`] Allow `os.environ` modifications between + imports (`E402`) ([#10066](https://github.com/astral-sh/ruff/pull/10066)) +- [`pycodestyle`] Don't warn about single whitespace before + comma in tuple (`E203`) ([#10094](https://github.com/astral-sh/ruff/pull/10094)) + +### Rule changes + +- [`isort`]: Use one blank line after imports in typing stub files. ([#9971](https://github.com/astral-sh/ruff/pull/9971)) +- [`pylint`] New + Rule `dict-iter-missing-items` (`PLE1141`) ([#9845](https://github.com/astral-sh/ruff/pull/9845)) +- [`pylint`] Ignore `sys.version` + and `sys.platform` (`PLR1714`) ([#10054](https://github.com/astral-sh/ruff/pull/10054)) +- [`ruff`] Expand rule for `list(iterable).pop(0)` + idiom (`RUF015`) ([#10148](https://github.com/astral-sh/ruff/pull/10148)) +- [`flake8-boolean-trap`] Allow boolean positionals + in `__post_init__` ([#10027](https://github.com/astral-sh/ruff/pull/10027)) +- [`flake8-copyright`] Allow © in copyright + notices ([#10065](https://github.com/astral-sh/ruff/pull/10065)) +- \[`pyupgrade`\] Detect literals with unary operators ( + `UP018`) ([#10060](https://github.com/astral-sh/ruff/pull/10060)) +- \[`eradicate`\] Detect commented out `case` + statements (`ERA001`) ([#10055](https://github.com/astral-sh/ruff/pull/10055)) +- \[`eradicate`\] detect single-line code for try:, except:, + etc. (`ERA001`) ([#10057](https://github.com/astral-sh/ruff/pull/10057)) + +### Formatter + +The following preview styles are promoted to stable. + +- Prefer splitting the assignment's value over the target or type annotation ([#8943](https://github.com/astral-sh/ruff/pull/8943)) +- Remove blank lines before class docstrings ([#9154](https://github.com/astral-sh/ruff/pull/9154)) +- Wrap multiple context managers in `with` parentheses when targeting Python 3.9 or newer ([#9222](https://github.com/astral-sh/ruff/pull/9222)) +- Add a blank line after nested classes with a dummy body (`...`) in typing stub files ([#9155](https://github.com/astral-sh/ruff/pull/9155)) +- Reduce vertical spacing for classes and functions with a dummy (`...`) body ([#7440](https://github.com/astral-sh/ruff/issues/7440), [#9240](https://github.com/astral-sh/ruff/pull/9240)) +- Add a blank line after the module docstring ([#8283](https://github.com/astral-sh/ruff/pull/8283)) +- Parenthesize long type hints in assignments ([#9210](https://github.com/astral-sh/ruff/pull/9210)) +- Preserve indent for single mulitline-string call-expressions ([#9673](https://github.com/astral-sh/ruff/pull/9637)) +- Normalize hex escape and unicode escape sequences ([#9280](https://github.com/astral-sh/ruff/pull/9280)) + +### CLI + +- Explicitly disallow `extend` as part of a `--config` + flag ([#10135](https://github.com/astral-sh/ruff/pull/10135)) +- Remove `build` from the default exclusion list ([#10093](https://github.com/astral-sh/ruff/pull/10093)) + +### Bug fixes + +- [`pycodestyle`] Mark fixes overlapping with a multiline string as + unsafe (`W293`) ([#10049](https://github.com/astral-sh/ruff/pull/10049)) +- [`flake8-type-checking`] Respect runtime-required decorators for function + signatures ([#10091](https://github.com/astral-sh/ruff/pull/10091)) +- Set PowerPC page size to 64KB ([#10080](https://github.com/astral-sh/ruff/pull/10080)) +- [`ruff`] Avoid f-string false positives in `gettext` + calls (`RUF027`) ([#10118](https://github.com/astral-sh/ruff/pull/10118)) +- \[`pylint`\] Delete entire statement, including + semicolons (`PLR0203`) ([#10074](https://github.com/astral-sh/ruff/pull/10074)) + +### Performance + +- Add cold attribute to less likely printer queue branches in the + formatter ([#10121](https://github.com/astral-sh/ruff/pull/10121)) +- Skip unnecessary string normalization in the + formatter ([#10116](https://github.com/astral-sh/ruff/pull/10116)) + +### Documentation + +- Remove "Beta" Label from formatter + documentation ([#10144](https://github.com/astral-sh/ruff/pull/10144)) +- `line-length` option: fix link + to `pycodestyle.max-line-length` ([#10136](https://github.com/astral-sh/ruff/pull/10136)) + ## 0.2.2 Highlights include: diff --git a/Cargo.lock b/Cargo.lock index 4fba4c76c532f0..2db6a93508f713 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1950,7 +1950,7 @@ dependencies = [ [[package]] name = "ruff" -version = "0.2.2" +version = "0.3.0" dependencies = [ "anyhow", "argfile", @@ -2111,7 +2111,7 @@ dependencies = [ [[package]] name = "ruff_linter" -version = "0.2.2" +version = "0.3.0" dependencies = [ "aho-corasick", "annotate-snippets 0.9.2", @@ -2365,7 +2365,7 @@ dependencies = [ [[package]] name = "ruff_shrinking" -version = "0.2.2" +version = "0.3.0" dependencies = [ "anyhow", "clap", diff --git a/README.md b/README.md index a903e927ea1b25..66ea87ae3dde0f 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ Ruff can also be used as a [pre-commit](https://pre-commit.com/) hook via [`ruff ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.2.2 + rev: v0.3.0 hooks: # Run the linter. - id: ruff diff --git a/crates/ruff/Cargo.toml b/crates/ruff/Cargo.toml index 13dd5e31d9d562..43f31ff524c0f0 100644 --- a/crates/ruff/Cargo.toml +++ b/crates/ruff/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff" -version = "0.2.2" +version = "0.3.0" publish = false authors = { workspace = true } edition = { workspace = true } diff --git a/crates/ruff_linter/Cargo.toml b/crates/ruff_linter/Cargo.toml index 6800145786fdd8..53cd3a79b8ad92 100644 --- a/crates/ruff_linter/Cargo.toml +++ b/crates/ruff_linter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff_linter" -version = "0.2.2" +version = "0.3.0" publish = false authors = { workspace = true } edition = { workspace = true } diff --git a/crates/ruff_shrinking/Cargo.toml b/crates/ruff_shrinking/Cargo.toml index f760d4f14f22f5..ad6bf18edc5d2c 100644 --- a/crates/ruff_shrinking/Cargo.toml +++ b/crates/ruff_shrinking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff_shrinking" -version = "0.2.2" +version = "0.3.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/docs/integrations.md b/docs/integrations.md index dfe11f4ccbf514..382621b3ebdb0e 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -14,7 +14,7 @@ Ruff can be used as a [pre-commit](https://pre-commit.com) hook via [`ruff-pre-c ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.2.2 + rev: v0.3.0 hooks: # Run the linter. - id: ruff @@ -27,7 +27,7 @@ To enable lint fixes, add the `--fix` argument to the lint hook: ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.2.2 + rev: v0.3.0 hooks: # Run the linter. - id: ruff @@ -41,7 +41,7 @@ To run the hooks over Jupyter Notebooks too, add `jupyter` to the list of allowe ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.2.2 + rev: v0.3.0 hooks: # Run the linter. - id: ruff diff --git a/pyproject.toml b/pyproject.toml index 86597f5e1b01a9..67c64a53eb1539 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "ruff" -version = "0.2.2" +version = "0.3.0" description = "An extremely fast Python linter and code formatter, written in Rust." authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }] readme = "README.md" diff --git a/scripts/benchmarks/pyproject.toml b/scripts/benchmarks/pyproject.toml index 45ec7fb3ccbcbf..146bbcd7b0ad24 100644 --- a/scripts/benchmarks/pyproject.toml +++ b/scripts/benchmarks/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "scripts" -version = "0.2.2" +version = "0.3.0" description = "" authors = ["Charles Marsh "]