Commit 5a57a9d
authored
Python: Fix formatter bugs and add comprehensive format tests (#6727)
* Split auto_format_battle_test.py into 3 files by test category
Organize 70 formatter battle tests into separate files matching the
project's one-file-per-concern pattern:
- auto_format_idempotency_test.py (30 tests)
- auto_format_corrections_test.py (20 tests)
- auto_format_edge_cases_test.py (20 tests)
* Python: Fix empty diff detection and eliminate spurious AST identity changes
Add empty diff detection to the test framework so that recipes which
modify the AST without changing printed output are caught as failures.
Fix six root causes of empty diffs in the formatting pipeline:
- Parser: place whitespace on inner expression instead of
ControlParentheses prefix for if/while/match (Python has no actual
parens, so SpacesVisitor was moving whitespace between equivalent
positions)
- Parser: consume whitespace into BoolOp prefix and MultiImport
container.before
- NormalizeFormat: early-return from _concatenate_prefix when prefix
is empty to avoid creating new list objects
- SpacesVisitor: skip before_colon on return type TypeHints (already
handled by visit_method_declaration) and skip space removal on
ExpressionTypeTree inside ClassDeclaration (already handled by
visit_class_declaration)
- PythonVisitor: guard visit_space(binary.negation) with None check
since non-negated operators (in, is) have no negation space
- StatementExpression.replace: use replace_if_changed instead of
always calling dataclass_replace
- utils: _is_changed uses equality for primitives, identity for
complex objects
Remove 12 xfail markers from tests that now pass.
* Python: Fix 6 formatter bugs in indentation, whitespace, and spacing visitors
- Fix try/except/else indentation by adding visit_trailing_else_wrapper to TabsAndIndentsVisitor
- Fix backslash line continuation stripping in RemoveTrailingWhitespaceVisitor
- Fix delete statement trailing whitespace by using pad_last=False in parser
- Fix multiline class bases losing indentation via ClassDeclaration CONTINUATION_INDENT
- Fix decorator closing paren over-indentation by treating Annotation like MethodInvocation
- Fix Binary continuation indent inside Parentheses with visit_binary/visit_parentheses overrides
- Fix empty diff in assignment with parenthesized RHS by removing redundant space update
* Python: Fix continuation indentation and string concatenation spacing
Fix 3 remaining formatter bugs for parenthesized expressions:
- Add _compute_column_of() to align Binary continuation lines to the
opening content column inside parentheses
- Detect method chains (via select type and cursor path) to use
continuation indent instead of column alignment for chained calls
- Remove incorrect space injection for implicit string concatenation
(StringConcatenation has no visible operator)1 parent c69bd6f commit 5a57a9d
14 files changed
Lines changed: 1808 additions & 42 deletions
File tree
- rewrite-python/rewrite
- src/rewrite
- python
- format
- test
- tests/python/all
- format
Lines changed: 10 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
511 | 511 | | |
512 | 512 | | |
513 | 513 | | |
514 | | - | |
| 514 | + | |
515 | 515 | | |
516 | 516 | | |
517 | 517 | | |
| |||
614 | 614 | | |
615 | 615 | | |
616 | 616 | | |
617 | | - | |
| 617 | + | |
618 | 618 | | |
619 | 619 | | |
620 | 620 | | |
| |||
638 | 638 | | |
639 | 639 | | |
640 | 640 | | |
641 | | - | |
| 641 | + | |
642 | 642 | | |
643 | 643 | | |
644 | 644 | | |
| |||
790 | 790 | | |
791 | 791 | | |
792 | 792 | | |
| 793 | + | |
| 794 | + | |
793 | 795 | | |
794 | 796 | | |
795 | | - | |
| 797 | + | |
796 | 798 | | |
797 | 799 | | |
798 | 800 | | |
799 | 801 | | |
800 | | - | |
| 802 | + | |
801 | 803 | | |
802 | 804 | | |
803 | 805 | | |
| |||
1125 | 1127 | | |
1126 | 1128 | | |
1127 | 1129 | | |
1128 | | - | |
| 1130 | + | |
1129 | 1131 | | |
1130 | 1132 | | |
1131 | 1133 | | |
| |||
1697 | 1699 | | |
1698 | 1700 | | |
1699 | 1701 | | |
| 1702 | + | |
1700 | 1703 | | |
1701 | 1704 | | |
1702 | 1705 | | |
| |||
1708 | 1711 | | |
1709 | 1712 | | |
1710 | 1713 | | |
1711 | | - | |
| 1714 | + | |
1712 | 1715 | | |
1713 | 1716 | | |
1714 | 1717 | | |
| |||
Lines changed: 3 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
66 | 69 | | |
67 | 70 | | |
68 | 71 | | |
| |||
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
| 41 | + | |
40 | 42 | | |
41 | 43 | | |
42 | 44 | | |
| |||
Lines changed: 8 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
279 | 279 | | |
280 | 280 | | |
281 | 281 | | |
282 | | - | |
283 | | - | |
284 | 282 | | |
285 | 283 | | |
286 | 284 | | |
| |||
366 | 364 | | |
367 | 365 | | |
368 | 366 | | |
369 | | - | |
370 | 367 | | |
371 | 368 | | |
372 | 369 | | |
| |||
467 | 464 | | |
468 | 465 | | |
469 | 466 | | |
470 | | - | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
471 | 471 | | |
472 | 472 | | |
473 | 473 | | |
474 | 474 | | |
475 | 475 | | |
476 | | - | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
477 | 480 | | |
478 | 481 | | |
479 | 482 | | |
| |||
Lines changed: 169 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
79 | 80 | | |
80 | 81 | | |
81 | 82 | | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
82 | 88 | | |
83 | 89 | | |
84 | 90 | | |
| |||
274 | 280 | | |
275 | 281 | | |
276 | 282 | | |
277 | | - | |
| 283 | + | |
278 | 284 | | |
279 | 285 | | |
280 | 286 | | |
| |||
300 | 306 | | |
301 | 307 | | |
302 | 308 | | |
303 | | - | |
| 309 | + | |
304 | 310 | | |
305 | 311 | | |
306 | 312 | | |
| 313 | + | |
| 314 | + | |
307 | 315 | | |
308 | 316 | | |
309 | 317 | | |
| |||
370 | 378 | | |
371 | 379 | | |
372 | 380 | | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
373 | 401 | | |
374 | 402 | | |
375 | 403 | | |
| |||
429 | 457 | | |
430 | 458 | | |
431 | 459 | | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
432 | 518 | | |
433 | 519 | | |
434 | 520 | | |
435 | | - | |
436 | | - | |
437 | | - | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
438 | 540 | | |
439 | 541 | | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
440 | 603 | | |
441 | 604 | | |
442 | 605 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
612 | 612 | | |
613 | 613 | | |
614 | 614 | | |
615 | | - | |
616 | | - | |
617 | | - | |
618 | | - | |
619 | | - | |
620 | | - | |
621 | | - | |
622 | | - | |
623 | | - | |
624 | | - | |
| 615 | + | |
625 | 616 | | |
626 | 617 | | |
627 | 618 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
135 | | - | |
136 | | - | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
137 | 138 | | |
138 | 139 | | |
139 | 140 | | |
| |||
0 commit comments