|
1 | 1 | # Changelog
|
2 | 2 |
|
| 3 | +## 0.4.0 |
| 4 | + |
| 5 | +### A new, hand-written parser |
| 6 | + |
| 7 | +Ruff's new parser is **>2x faster**, which translates to a **20-40% speedup** for all linting and formatting invocations. |
| 8 | +There's a lot to say about this exciting change, so check out the [blog post](https://astral.sh/blog/ruff-v0.4.0) for more details! |
| 9 | + |
| 10 | +See [#10036](https://github.com/astral-sh/ruff/pull/10036) for implementation details. |
| 11 | + |
| 12 | +### A new language server in Rust |
| 13 | + |
| 14 | +With this release, we also want to highlight our new language server. `ruff server` is a Rust-powered language |
| 15 | +server that comes built-in with Ruff. It can be used with any editor that supports the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP). |
| 16 | +It uses a multi-threaded, lock-free architecture inspired by `rust-analyzer` and it will open the door for a lot |
| 17 | +of exciting features. It’s also faster than our previous [Python-based language server](https://github.com/astral-sh/ruff-lsp) |
| 18 | +-- but you probably guessed that already. |
| 19 | + |
| 20 | +`ruff server` is only in alpha, but it has a lot of features that you can try out today: |
| 21 | + |
| 22 | +- Lints Python files automatically and shows quick-fixes when available |
| 23 | +- Formats Python files, with support for range formatting |
| 24 | +- Comes with commands for quickly performing actions: `ruff.applyAutofix`, `ruff.applyFormat`, and `ruff.applyOrganizeImports` |
| 25 | +- Supports `source.fixAll` and `source.organizeImports` source actions |
| 26 | +- Automatically reloads your project configuration when you change it |
| 27 | + |
| 28 | +To setup `ruff server` with your editor, refer to the [README.md](https://github.com/astral-sh/ruff/blob/main/crates/ruff_server/README.md). |
| 29 | + |
| 30 | +### Preview features |
| 31 | + |
| 32 | +- \[`pycodestyle`\] Do not trigger `E3` rules on `def`s following a function/method with a dummy body ([#10704](https://github.com/astral-sh/ruff/pull/10704)) |
| 33 | +- \[`pylint`\] Implement `invalid-bytes-returned` (`E0308`) ([#10959](https://github.com/astral-sh/ruff/pull/10959)) |
| 34 | +- \[`pylint`\] Implement `invalid-length-returned` (`E0303`) ([#10963](https://github.com/astral-sh/ruff/pull/10963)) |
| 35 | +- \[`pylint`\] Implement `self-cls-assignment` (`W0642`) ([#9267](https://github.com/astral-sh/ruff/pull/9267)) |
| 36 | +- \[`pylint`\] Omit stubs from `invalid-bool` and `invalid-str-return-type` ([#11008](https://github.com/astral-sh/ruff/pull/11008)) |
| 37 | +- \[`ruff`\] New rule `unused-async` (`RUF029`) to detect unneeded `async` keywords on functions ([#9966](https://github.com/astral-sh/ruff/pull/9966)) |
| 38 | + |
| 39 | +### Rule changes |
| 40 | + |
| 41 | +- \[`flake8-bandit`\] Allow `urllib.request.urlopen` calls with static `Request` argument (`S310`) ([#10964](https://github.com/astral-sh/ruff/pull/10964)) |
| 42 | +- \[`flake8-bugbear`\] Treat `raise NotImplemented`-only bodies as stub functions (`B006`) ([#10990](https://github.com/astral-sh/ruff/pull/10990)) |
| 43 | +- \[`flake8-slots`\] Respect same-file `Enum` subclasses (`SLOT000`) ([#11006](https://github.com/astral-sh/ruff/pull/11006)) |
| 44 | +- \[`pylint`\] Support inverted comparisons (`PLR1730`) ([#10920](https://github.com/astral-sh/ruff/pull/10920)) |
| 45 | + |
| 46 | +### Linter |
| 47 | + |
| 48 | +- Improve handling of builtin symbols in linter rules ([#10919](https://github.com/astral-sh/ruff/pull/10919)) |
| 49 | +- Improve display of rules in `--show-settings` ([#11003](https://github.com/astral-sh/ruff/pull/11003)) |
| 50 | +- Improve inference capabilities of the `BuiltinTypeChecker` ([#10976](https://github.com/astral-sh/ruff/pull/10976)) |
| 51 | +- Resolve classes and functions relative to script name ([#10965](https://github.com/astral-sh/ruff/pull/10965)) |
| 52 | +- Improve performance of `RuleTable::any_enabled` ([#10971](https://github.com/astral-sh/ruff/pull/10971)) |
| 53 | + |
| 54 | +### Server |
| 55 | + |
| 56 | +*This section is devoted to updates for our new language server, written in Rust.* |
| 57 | + |
| 58 | +- Enable ruff-specific source actions ([#10916](https://github.com/astral-sh/ruff/pull/10916)) |
| 59 | +- Refreshes diagnostics for open files when file configuration is changed ([#10988](https://github.com/astral-sh/ruff/pull/10988)) |
| 60 | +- Important errors are now shown as popups ([#10951](https://github.com/astral-sh/ruff/pull/10951)) |
| 61 | +- Introduce settings for directly configuring the linter and formatter ([#10984](https://github.com/astral-sh/ruff/pull/10984)) |
| 62 | +- Resolve configuration for each document individually ([#10950](https://github.com/astral-sh/ruff/pull/10950)) |
| 63 | +- Write a setup guide for Neovim ([#10987](https://github.com/astral-sh/ruff/pull/10987)) |
| 64 | + |
| 65 | +### Configuration |
| 66 | + |
| 67 | +- Add `RUFF_OUTPUT_FILE` environment variable support ([#10992](https://github.com/astral-sh/ruff/pull/10992)) |
| 68 | + |
| 69 | +### Bug fixes |
| 70 | + |
| 71 | +- Avoid `non-augmented-assignment` for reversed, non-commutative operators (`PLR6104`) ([#10909](https://github.com/astral-sh/ruff/pull/10909)) |
| 72 | +- Limit commutative non-augmented-assignments to primitive data types (`PLR6104`) ([#10912](https://github.com/astral-sh/ruff/pull/10912)) |
| 73 | +- Respect `per-file-ignores` for `RUF100` on blanket `# noqa` ([#10908](https://github.com/astral-sh/ruff/pull/10908)) |
| 74 | +- Consider `if` expression for parenthesized with items parsing ([#11010](https://github.com/astral-sh/ruff/pull/11010)) |
| 75 | +- Consider binary expr for parenthesized with items parsing ([#11012](https://github.com/astral-sh/ruff/pull/11012)) |
| 76 | +- Reset `FOR_TARGET` context for all kinds of parentheses ([#11009](https://github.com/astral-sh/ruff/pull/11009)) |
| 77 | + |
3 | 78 | ## 0.3.7
|
4 | 79 |
|
5 | 80 | ### Preview features
|
@@ -1385,7 +1460,7 @@ Read Ruff's new [versioning policy](https://docs.astral.sh/ruff/versioning/).
|
1385 | 1460 | - \[`refurb`\] Add `single-item-membership-test` (`FURB171`) ([#7815](https://github.com/astral-sh/ruff/pull/7815))
|
1386 | 1461 | - \[`pylint`\] Add `and-or-ternary` (`R1706`) ([#7811](https://github.com/astral-sh/ruff/pull/7811))
|
1387 | 1462 |
|
1388 |
| -_New rules are added in [preview](https://docs.astral.sh/ruff/preview/)._ |
| 1463 | +*New rules are added in [preview](https://docs.astral.sh/ruff/preview/).* |
1389 | 1464 |
|
1390 | 1465 | ### Configuration
|
1391 | 1466 |
|
|
0 commit comments