Dhruv Manilawala
f706c3fdf2
Add f-string formatting to the docs ( #15367 )
...
Revive https://github.com/astral-sh/ruff/pull/15341 as it got removed
from the latest rebase in https://github.com/astral-sh/ruff/pull/15238 .
2025-01-09 10:20:06 +01:00
Micha Reiser
424b720c19
Ruff 2025 style guide ( #13906 )
...
Closes #13371
2025-01-09 10:20:06 +01:00
Micha Reiser
1218bc65ed
Preserve multiline implicit concatenated strings in docstring positions ( #15126 )
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
2025-01-03 10:27:14 +01:00
Micha Reiser
82faa9bb62
Add tests demonstrating f-strings with debug expressions in replacements that contain escaped characters ( #14929 )
2024-12-12 09:33:20 +00:00
Dimitri Papadopoulos Orfanos
68eb0a2511
Stop referring to early ruff versions ( #14862 )
...
## Summary
Referring to old versions has become more distracting than useful.
## Test Plan
—
2024-12-09 16:47:26 +01:00
Dimitri Papadopoulos Orfanos
59145098d6
Fix typos found by codespell ( #14863 )
...
## Summary
Just fix typos.
## Test Plan
CI tests.
---------
Co-authored-by: Micha Reiser <micha@reiser.io>
2024-12-09 09:32:12 +00:00
Micha Reiser
1559c73fcd
Fix fstring formatting removing overlong implicit concatenated string in expression part ( #14811 )
...
## Summary
Fixes https://github.com/astral-sh/ruff/issues/14778
The formatter incorrectly removed the inner implicitly concatenated
string for following single-line f-string:
```py
f"{'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'a' if True else ""}"
# formatted
f"{ if True else ''}"
```
This happened because I changed the `RemoveSoftlinesBuffer` in
https://github.com/astral-sh/ruff/pull/14489 to remove any content
wrapped in `if_group_breaks`. After all, it emulates an *all flat*
layout. This works fine when `if_group_breaks` is only used to **add**
content if the gorup breaks. It doesn't work if the same content is
rendered differently depending on if the group fits using
`if_group_breaks` and `if_groups_fits` because the enclosing `group`
might still *break* if the entire content exceeds the line-length limit.
This PR fixes this by unwrapping any `if_group_fits` content by removing
the `if_group_fits` start and end tags.
## Test Plan
added test
2024-12-06 13:01:04 +01:00
renovate[bot]
5a67d3269b
Update pre-commit dependencies ( #14719 )
2024-12-02 06:02:56 +00:00
Micha Reiser
b63c2e126b
Upgrade Rust toolchain to 1.83 ( #14677 )
2024-11-29 12:05:05 +00:00
Dhruv Manilawala
f96fa6b0e2
Do not consider f-strings with escaped newlines as multiline ( #14624 )
...
## Summary
This PR fixes a bug in the f-string formatting to not consider the
escaped newlines for `is_multiline`. This is done by checking if the
f-string is triple-quoted or not similar to normal string literals.
This is not required to be gated behind preview because the logic change
for `is_multiline` was added in
https://github.com/astral-sh/ruff/pull/14454 .
## Test Plan
Add a test case which formats differently on `main`:
https://play.ruff.rs/ea3c55c2-f0fe-474e-b6b8-e3365e0ede5e
2024-11-27 10:25:38 +00:00
Dhruv Manilawala
4cd2b9926e
Gate is_multiline
change behind preview ( #14630 )
...
## Summary
Ref:
https://github.com/astral-sh/ruff/pull/14624#pullrequestreview-2464127254
## Test Plan
The test case in the follow-up PR showcases the difference between
preview and non-preview formatting:
https://github.com/astral-sh/ruff/pull/14624/files#diff-dc25bd4df280d9a9180598075b5bc2d0bac30af956767b373561029309c8f024
2024-11-27 15:50:28 +05:30
Dhruv Manilawala
c84c690f1e
Avoid invalid syntax for format-spec with quotes for all Python versions ( #14625 )
...
## Summary
fixes : #14608
The logic that was only applied for 3.12+ target version needs to be
applied for other versions as well.
## Test Plan
I've moved the existing test cases for 3.12 only to `f_string.py` so
that it's tested against the default target version.
I think we should probably enabled testing for two target version (pre
3.12 and 3.12) but it won't highlight any issue because the parser
doesn't consider this. Maybe we should enable this once we have target
version specific syntax errors in place
(https://github.com/astral-sh/ruff/issues/6591 ).
2024-11-27 13:19:33 +05:30
Dhruv Manilawala
f3dac27e9a
Fix f-string formatting in assignment statement ( #14454 )
...
## Summary
fixes : #13813
This PR fixes a bug in the formatting assignment statement when the
value is an f-string.
This is resolved by using custom best fit layouts if the f-string is (a)
not already a flat f-string (thus, cannot be multiline) and (b) is not a
multiline string (thus, cannot be flattened). So, it is used in cases
like the following:
```py
aaaaaaaaaaaaaaaaaa = f"testeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee{
expression}moreeeeeeeeeeeeeeeee"
```
Which is (a) `FStringLayout::Multiline` and (b) not a multiline.
There are various other examples in the PR diff along with additional
explanation and context as code comments.
## Test Plan
Add multiple test cases for various scenarios.
2024-11-26 15:07:18 +05:30
Dhruv Manilawala
efe54081d6
Remove FormatFStringPart
( #14448 )
...
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
## Summary
This is just a small refactor to remove the `FormatFStringPart` as it's
only used in the case when the f-string is not implicitly concatenated
in which case the only part is going to be `FString`. In implicitly
concatenated f-strings, we use `StringLike` instead.
2024-11-25 10:29:22 +05:30
Micha Reiser
b80de52592
Consider quotes inside format-specs when choosing the quotes for an f-string ( #14493 )
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
2024-11-22 12:43:53 +00:00
Micha Reiser
302fe76c2b
Fix unnecessary space around power op in overlong f-string expressions ( #14489 )
2024-11-22 13:01:22 +01:00
yataka
1b180c8342
Change default for Python version from 3.8 to 3.9 ( #13896 )
...
Co-authored-by: Micha Reiser <micha@reiser.io>
2024-11-20 13:11:51 +01:00
Micha Reiser
1f07880d5c
Add tests for python version compatibility ( #14430 )
2024-11-18 12:26:55 +00:00
Micha Reiser
c847cad389
Update insta snapshots ( #14366 )
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo shear (push) Blocked by required conditions
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz (push) Blocked by required conditions
CI / Fuzz the parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
2024-11-15 19:31:15 +01:00
Micha Reiser
443fd3b660
Disallow single-line implicit concatenated strings ( #13928 )
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz (push) Blocked by required conditions
CI / Fuzz the parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
2024-11-03 11:49:26 +00:00
Micha Reiser
cf0f5e1318
Fix formatting of single with-item with trailing comment ( #14005 )
2024-11-01 09:08:06 +01:00
Micha Reiser
9f3a38d408
Extract LineIndex
independent methods from Locator
( #13938 )
CI / Fuzz the parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz (push) Blocked by required conditions
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
2024-10-28 07:53:41 +00:00
Dhruv Manilawala
5af0966057
Remove unreferenced snapshots ( #13958 )
2024-10-28 07:16:05 +01:00
Micha Reiser
113ce840a6
Fix normalize
arguments when fstring_formatting
is disabled ( #13910 )
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz (push) Blocked by required conditions
CI / Fuzz the parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
2024-10-24 13:07:18 +00:00
Micha Reiser
7272f83868
Fix preview style name in can_omit_parentheses
to is_f_string_formatting_enabled ( #13907 )
2024-10-24 11:32:28 +00:00
Micha Reiser
73ee72b665
Join implicit concatenated strings when they fit on a line ( #13663 )
2024-10-24 11:52:22 +02:00
Micha Reiser
2f88f84972
Alternate quotes for strings inside f-strings in preview ( #13860 )
2024-10-23 07:57:53 +02:00
Micha Reiser
e9dd92107c
formatter: Introduce QuoteMetadata
( #13858 )
2024-10-21 20:23:46 +01:00
Alex Waygood
72adb09bf3
Simplify iteration idioms ( #13834 )
...
Remove unnecessary uses of `.as_ref()`, `.iter()`, `&**` and similar, mostly in situations when iterating over variables. Many of these changes are only possible following #13826 , when we bumped our MSRV to 1.80: several useful implementations on `&Box<[T]>` were only stabilised in Rust 1.80. Some of these changes we could have done earlier, however.
2024-10-20 22:25:27 +01:00
Micha Reiser
27c50bebec
Bump MSRV to Rust 1.80 ( #13826 )
2024-10-20 10:55:36 +02:00
Micha Reiser
2ff36530c3
Upgrade to Rust 1.82 ( #13816 )
2024-10-19 16:05:50 +02:00
Micha Reiser
6d7da7bdbe
Revert "Upgrade to Rust 1.82 toolchain" ( #13810 )
2024-10-18 12:18:26 +00:00
Micha Reiser
ff72055558
Upgrade to Rust 1.82 toolchain ( #13808 )
2024-10-18 12:08:15 +00:00
Micha Reiser
a94914dc35
Enable preview mode for 'unstable' black tests ( #13776 )
2024-10-16 12:25:34 +00:00
Micha Reiser
8f5b2aac9a
Refactor: Remove StringPart
and AnyStringPart
in favor of StringLikePart
( #13772 )
2024-10-16 12:52:06 +02:00
Micha Reiser
b9827a4122
Remove layout values from AnyStringPart
( #13681 )
2024-10-09 07:25:40 +01:00
Micha Reiser
fc661e193a
Normalize implicit concatenated f-string quotes per part ( #13539 )
2024-10-08 09:59:17 +00:00
Micha Reiser
f3e464ea4c
refactor: Simplify quote selection logic ( #13536 )
2024-09-27 14:40:28 +02:00
Micha Reiser
253f5f269a
refactor: Rename FormatStringContinuation
to FormatImplicitConcatenatedString
( #13531 )
2024-09-27 08:24:50 +00:00
Micha Reiser
c046101b79
Fix codeblock dynamic line length calculation for indented examples ( #13523 )
2024-09-27 09:09:07 +02:00
Micha Reiser
9442cd8fae
Parenthesize match..case
if
guards ( #13513 )
2024-09-26 06:44:33 +00:00
Micha Reiser
8012707348
Align formatting of patterns in match-cases with expression formatting in clause headers ( #13510 )
2024-09-26 08:35:22 +02:00
Micha Reiser
531ebf6dff
Fix parentheses around return type annotations ( #13381 )
2024-09-20 09:23:53 +02:00
Hamir Mahal
8b3da1867e
refactor: remove unnecessary string hashes ( #13250 )
2024-09-18 19:08:59 +02:00
Micha Reiser
6ac61d7b89
Fix placement of inline parameter comments ( #13379 )
2024-09-18 08:26:06 +02:00
Micha Reiser
d86e5ad031
Update Black tests ( #13375 )
2024-09-17 11:16:50 +02:00
Dhruv Manilawala
47f0b45be3
Implement AstNode
for Identifier
( #13207 )
...
## Summary
Follow-up to #13147 , this PR implements the `AstNode` for `Identifier`.
This makes it easier to create the `NodeKey` in red knot because it uses
a generic method to construct the key from `AnyNodeRef` and is important
for definitions that are created only on identifiers instead of
`ExprName`.
## Test Plan
`cargo test` and `cargo clippy`
2024-09-02 16:27:12 +05:30
Alex Waygood
aa0db338d9
Implement iter()
, len()
and is_empty()
for all display-literal AST nodes ( #12807 )
2024-08-12 10:39:28 +00:00
Micha Reiser
138e70bd5c
Upgrade to Rust 1.80 ( #12586 )
2024-07-30 19:18:08 +00:00
Micha Reiser
e18b4e42d3
[red-knot] Upgrade to the *new* *new* salsa ( #12406 )
2024-07-29 07:21:24 +00:00