From 9d11c180e64b4a58e2e0fb5ea944b9daeb86a5c5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:58:03 +0000 Subject: [PATCH 1/2] Initial plan From 7b205485d634de93a33b5f2e58c652de285755dc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 03:13:04 +0000 Subject: [PATCH 2/2] Split formatting preservation tests into rule-specific test files Co-authored-by: jackfirth <8175575+jackfirth@users.noreply.github.com> --- .../boolean-shortcuts-test.rkt | 12 ++++ .../formatting-preservation-test.rkt | 71 ------------------- .../cond-let-replacement-test.rkt | 22 ++++++ .../let-replacement/let-replacement-test.rkt | 29 ++++++++ 4 files changed, 63 insertions(+), 71 deletions(-) delete mode 100644 default-recommendations/formatting-preservation-test.rkt diff --git a/default-recommendations/boolean-shortcuts-test.rkt b/default-recommendations/boolean-shortcuts-test.rkt index 6c639a37..b054f742 100644 --- a/default-recommendations/boolean-shortcuts-test.rkt +++ b/default-recommendations/boolean-shortcuts-test.rkt @@ -70,6 +70,18 @@ test: "nested ands interspersed with ors can be flattened" - (and 1 2 (or 3 4) 5 6) +test: "refactoring an expression doesn't affect formatting of unrefactored code" +---------------------------------------- +( displayln "foo" ) +(or 1 (or 2 3)) +( displayln "bar" ) +======================================== +( displayln "foo" ) +(or 1 2 3) +( displayln "bar" ) +---------------------------------------- + + test: "using if to convert a boolean expression to a boolean can be removed" - (if (string? "foo") #true #false) - (string? "foo") diff --git a/default-recommendations/formatting-preservation-test.rkt b/default-recommendations/formatting-preservation-test.rkt deleted file mode 100644 index 607bea60..00000000 --- a/default-recommendations/formatting-preservation-test.rkt +++ /dev/null @@ -1,71 +0,0 @@ -#lang resyntax/test - - -require: resyntax/default-recommendations default-recommendations - - -header: -- #lang racket/base - - -test: "refactoring an expression doesn't affect formatting of unrefactored code" ----------------------------------------- -( displayln "foo" ) -(or 1 (or 2 3)) -( displayln "bar" ) -======================================== -( displayln "foo" ) -(or 1 2 3) -( displayln "bar" ) ----------------------------------------- - - -test: "define-let-to-double-define doesn't reformat the entire definition context" ----------------------------------------- -(define (f) - ( displayln "foo" ) - (define y (let ([x 1]) (* x 2))) - ( displayln "bar" )) -======================================== -(define (f) - ( displayln "foo" ) - (define x 1) - (define y (* x 2)) - ( displayln "bar" )) ----------------------------------------- - - -test: "let-to-define doesn't reformat the entire definition context" ----------------------------------------- -(define (f) - ( displayln "foo" ) - (let ([x 1]) - (* x 2))) -======================================== -(define (f) - ( displayln "foo" ) - (define x 1) - (* x 2)) ----------------------------------------- - - -test: "cond-let-to-cond-define doesn't reformat the entire cond expression" ----------------------------------------- -(define (f c1 c2) - (cond - [c1 ( displayln "foo" )] - [c2 - ( displayln "bar" ) - (let ([x 1]) - (* x 2))] - [else ( displayln "else" )])) -======================================== -(define (f c1 c2) - (cond - [c1 ( displayln "foo" )] - [c2 - ( displayln "bar" ) - (define x 1) - (* x 2)] - [else ( displayln "else" )])) ----------------------------------------- diff --git a/default-recommendations/let-replacement/cond-let-replacement-test.rkt b/default-recommendations/let-replacement/cond-let-replacement-test.rkt index dba1d827..de2bae3c 100644 --- a/default-recommendations/let-replacement/cond-let-replacement-test.rkt +++ b/default-recommendations/let-replacement/cond-let-replacement-test.rkt @@ -297,3 +297,25 @@ no-change-test: "and with more than two arguments should not be refactored" (and 'some-condition 'another-condition (let ([x 42]) (* x 2))) ------------------------------ + +test: "cond-let-to-cond-define doesn't reformat the entire cond expression" +---------------------------------------- +(define (f c1 c2) + (cond + [c1 ( displayln "foo" )] + [c2 + ( displayln "bar" ) + (let ([x 1]) + (* x 2))] + [else ( displayln "else" )])) +======================================== +(define (f c1 c2) + (cond + [c1 ( displayln "foo" )] + [c2 + ( displayln "bar" ) + (define x 1) + (* x 2)] + [else ( displayln "else" )])) +---------------------------------------- + diff --git a/default-recommendations/let-replacement/let-replacement-test.rkt b/default-recommendations/let-replacement/let-replacement-test.rkt index 518d21da..5f6f2cc1 100644 --- a/default-recommendations/let-replacement/let-replacement-test.rkt +++ b/default-recommendations/let-replacement/let-replacement-test.rkt @@ -625,3 +625,32 @@ test: "let binding with body nested in begin0 extractable to definition and body (displayln "bar"))) ------------------------------ + +test: "let-to-define doesn't reformat the entire definition context" +---------------------------------------- +(define (f) + ( displayln "foo" ) + (let ([x 1]) + (* x 2))) +======================================== +(define (f) + ( displayln "foo" ) + (define x 1) + (* x 2)) +---------------------------------------- + + +test: "define-let-to-double-define doesn't reformat the entire definition context" +---------------------------------------- +(define (f) + ( displayln "foo" ) + (define y (let ([x 1]) (* x 2))) + ( displayln "bar" )) +======================================== +(define (f) + ( displayln "foo" ) + (define x 1) + (define y (* x 2)) + ( displayln "bar" )) +---------------------------------------- +