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
Micha Reiser
ed238e0c76
Fix incorrect placement of leading function comment with type params ( #12447 )
2024-07-22 14:17:00 +02:00
konsti
9a817a2922
Insert empty line between suite and alternative branch after def/class ( #12294 )
...
When there is a function or class definition at the end of a suite
followed by the beginning of an alternative block, we have to insert a
single empty line between them.
In the if-else-statement example below, we insert an empty line after
the `foo` in the if-block, but none after the else-block `foo`, since in
the latter case the enclosing suite already adds empty lines.
```python
if sys.version_info >= (3, 10):
def foo():
return "new"
else:
def foo():
return "old"
class Bar:
pass
```
To do so, we track whether the current suite is the last one in the
current statement with a new option on the suite kind.
Fixes #12199
---------
Co-authored-by: Micha Reiser <micha@reiser.io>
2024-07-15 12:59:33 +02:00
Micha Reiser
bd01004a42
Use space
separator before parenthesiszed expressions in comprehensions with leading comments. ( #12282 )
2024-07-11 22:38:12 +02:00
renovate[bot]
53a80a5c11
Update Rust crate rustc-hash to v2 ( #12001 )
2024-06-23 20:46:42 -04:00
Micha Reiser
1f654ee729
Upgrade to Rust 1.79 ( #11875 )
2024-06-17 07:15:10 +01:00
Dhruv Manilawala
549cc1e437
Build CommentRanges
outside the parser ( #11792 )
...
## Summary
This PR updates the parser to remove building the `CommentRanges` and
instead it'll be built by the linter and the formatter when it's
required.
For the linter, it'll be built and owned by the `Indexer` while for the
formatter it'll be built from the `Tokens` struct and passed as an
argument.
## Test Plan
`cargo insta test`
2024-06-09 09:55:17 +00:00
Micha Reiser
32ca704956
Rename PreorderVisitor
to SourceOrderVisitor
( #11798 )
...
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2024-06-07 17:01:58 +00:00