Commit Graph

61 Commits

Author SHA1 Message Date
Charlie Marsh e8e66f3824
Remove unnecessary path prefixes (#4492) 2023-05-18 10:19:09 -04:00
Micha Reiser ddf7de7e86
Prototype Black's string joining/splitting (#4449) 2023-05-16 18:42:40 +01:00
Jeong, YunWon 4b05ca1198
Specialize ConversionFlag (#4450) 2023-05-16 18:00:13 +02:00
Charlie Marsh f0465bf106
Emit non-logical newlines for "empty" lines (#4444) 2023-05-16 14:58:56 +00:00
Micha Reiser fa26860296
Refactor range from `Attributed` to `Node`s (#4422) 2023-05-16 06:36:32 +00:00
Jonathan Plasse c10a4535b9
Disallow `unreachable_pub` (#4314) 2023-05-11 18:00:00 -04:00
Micha Reiser 1ccef5150d
Remove lifetime from FormatContext (#4376) 2023-05-11 15:43:42 +00:00
Jeong, YunWon be6e00ef6e
Re-integrate RustPython parser repository (#4359)
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-11 07:47:17 +00:00
Calum Young f0f4bf2929
Move typos to pre-commit config (#4148) 2023-04-29 12:13:35 -04:00
Micha Reiser cab65b25da
Replace row/column based `Location` with byte-offsets. (#3931) 2023-04-26 18:11:02 +00:00
Micha Reiser 381203c084
Store source code on message (#3897) 2023-04-11 07:57:36 +00:00
Micha Reiser 76c47a9a43
Cheap cloneable LineIndex (#3896) 2023-04-11 07:33:40 +00:00
Charlie Marsh cf7e1ddd08
Remove some `usize` references (#3819) 2023-03-30 17:35:42 -04:00
Charlie Marsh c2750a59ab
Implement an iterator for universal newlines (#3454)
# Summary

We need to support CR line endings (as opposed to LF and CRLF line endings, which are already supported). They're rare, but they do appear in Python code, and we tend to panic on any file that uses them.

Our `Locator` abstraction now supports CR line endings. However, Rust's `str#lines` implementation does _not_.

This PR adds a `UniversalNewlineIterator` implementation that respects all of CR, LF, and CRLF line endings, and plugs it into most of the `.lines()` call sites.

As an alternative design, it could be nice if we could leverage `Locator` for this. We've already computed all of the line endings, so we could probably iterate much more efficiently?

# Test Plan

Largely relying on automated testing, however, also ran over some known failure cases, like #3404.
2023-03-13 00:01:29 -04:00
Charlie Marsh da1f83fe32
Remove `core` module from `ruff_python_formatter` (#3373) 2023-03-08 19:11:39 +00:00
Charlie Marsh 0a9d259f9c
Remove copied `core` modules from `ruff_python_formatter` (#3371) 2023-03-08 19:03:40 +00:00
Charlie Marsh 130e733023
Implement `From<Located>` for `Range` (#3377) 2023-03-08 18:50:20 +00:00
Charlie Marsh ff2c0dd491
Use shared `leading_quote` implementation in ruff_python_formatter (#3396) 2023-03-08 18:21:59 +00:00
Charlie Marsh d1c48016eb
Rename `ruff_python` crate to `ruff_python_stdlib` (#3354)
In hindsight, `ruff_python` is too general. A good giveaway is that it's actually a prefix of some other crates. The intent of this crate is to reimplement pieces of the Python standard library and CPython itself, so `ruff_python_stdlib` feels appropriate.
2023-03-06 13:43:22 +00:00
Charlie Marsh f5f09b489b
Introduce dedicated CST tokens for other operator kinds (#3267) 2023-02-27 23:54:57 -05:00
Charlie Marsh 061495a9eb
Make BoolOp its own located token (#3265) 2023-02-28 03:43:28 +00:00
Charlie Marsh 470e1c1754
Preserve comments on non-defaulted arguments (#3264) 2023-02-27 23:41:40 +00:00
Charlie Marsh 16be691712
Enable more non-panicking formatter tests (#3262) 2023-02-27 18:21:53 -05:00
Charlie Marsh 2261e194a0
Create dedicated `Body` nodes in the formatter CST (#3223) 2023-02-27 22:55:05 +00:00
Charlie Marsh 1c75071136
Implement basic rendering of remaining AST nodes (#3233) 2023-02-26 05:05:56 +00:00
Charlie Marsh 51bca19c1d
Add builders for common comment rendering (#3232) 2023-02-26 04:16:24 +00:00
Jeong YunWon 84e96cdcd9
More enum work (#3212) 2023-02-25 11:40:16 -05:00
Charlie Marsh 159422071e
Handle end-of-line comments on `excepthandler` and `alias` (#3196) 2023-02-23 22:35:39 -05:00
Charlie Marsh 6eaacf96be
Introduce a new CST element for slice segments (#3195) 2023-02-24 00:49:41 +00:00
Charlie Marsh eb15371453
Make Locator available in AST-to-CST conversion pass (#3194) 2023-02-23 19:43:03 -05:00
Charlie Marsh bda2a0007a
Parenthesize numbers during attribute accesses (#3189) 2023-02-23 14:57:23 -05:00
Charlie Marsh 32d165b7ad
Implement complex literal formatting (#3186) 2023-02-23 19:09:33 +00:00
Charlie Marsh ac79bf4ee9
Implement float literal formatting (#3184) 2023-02-23 14:02:23 -05:00
Charlie Marsh 376eab3a53
Implement integer literal formatting (#3183) 2023-02-23 18:31:56 +00:00
Charlie Marsh 08be7bd285
Add a TODO to string_literal (#3181) 2023-02-23 12:46:20 -05:00
Charlie Marsh 1e7233a8eb
Add support for reformatting byte strings (#3176) 2023-02-23 16:50:24 +00:00
Charlie Marsh f967f344fc
Add support for basic `Constant::Str` formatting (#3173)
This PR enables us to apply the proper quotation marks, including support for escapes. There are some significant TODOs, especially around implicit concatenations like:

```py
(
  "abc"
  "def"
)
```

Which are represented as a single AST node, which requires us to tokenize _within_ the formatter to identify all the individual string parts.
2023-02-23 16:23:10 +00:00
Charlie Marsh 095f005bf4
Move RustPython vendored and helper code into its own crate (#3171) 2023-02-23 14:14:16 +00:00
Charlie Marsh e5c1f95545
Check-in updated snapshot (#3161) 2023-02-23 03:42:27 +00:00
Charlie Marsh 227ff62a4e
Don't touch tuple brackets after `in` (#3160) 2023-02-23 03:10:24 +00:00
Charlie Marsh d8e4902516
Un-modify `tupleassign` and `function2` tests (#3158)
I manually changed these in #3080 and #3083 to get the tests passing (with notes around the deviations) -- but that's no longer necessary, now that we have proper testing that takes deviations into account.
2023-02-23 02:37:25 +00:00
Charlie Marsh 5fd827545b
Add a trailing newline to all .py.expect files (#3156)
This just re-formats all the `.py.expect` files with Black, both to add a trailing newline and be doubly-certain that they're correctly formatted.

I also ensured that we add a hard line break after each statement, and that we avoid including an extra newline in the generated Markdown (since the code should contain the exact expected newlines).
2023-02-23 02:29:27 +00:00
Charlie Marsh 2f9de335db
Upgrade RustPython to match new flattened exports (#3141) 2023-02-22 19:36:13 +00:00
Charlie Marsh 1efa2e07ad
Avoid match statement misidentification in token rules (#3129) 2023-02-22 15:44:45 +00:00
Micha Reiser ffd8e958fc
chore: Upgrade Rust to 1.67.0 (#3125) 2023-02-22 10:03:17 -05:00
Micha Reiser ed33b75bad
test(ruff_python_formatter): Run all Black tests (#2993)
This PR changes the testing infrastructure to run all black tests and:

* Pass if Ruff and Black generate the same formatting
* Fail and write a markdown snapshot that shows the input code, the differences between Black and Ruff, Ruffs output, and Blacks output

This is achieved by introducing a new `fixture` macro (open to better name suggestions) that "duplicates" the attributed test for every file that matches the specified glob pattern. Creating a new test for each file over having a test that iterates over all files has the advantage that you can run a single test, and that test failures indicate which case is failing. 

The `fixture` macro also makes it straightforward to e.g. setup our own spec tests that test very specific formatting by creating a new folder and use insta to assert the formatted output.
2023-02-22 09:25:06 -05:00
Charlie Marsh cdc4e86158
Add support for TryStar (#3089) 2023-02-21 13:42:20 -05:00
Charlie Marsh a6eb60cdd5
Enable `function2` test (#3083) 2023-02-21 04:37:50 +00:00
Charlie Marsh 90c04b9cff
Enable `tupleassign` test (#3080) 2023-02-21 00:42:23 +00:00
Charlie Marsh b701cca779
Enable some already-passing Black tests (#3079) 2023-02-21 00:10:35 +00:00